Something went wrong. Try again.
Reactos
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155/*++
Copyright (c) Microsoft Corporation
Module Name:
FxStringApi.cpp
Abstract:
This module implements the "C" interface to the collection object.
Author:
Environment:
Both kernel and user mode
Revision History:
--*/
#include "fxsupportpch.hpp"
extern "C" {// #include "FxStringAPI.tmh"}
extern "C" {
_Must_inspect_result___drv_maxIRQL(PASSIVE_LEVEL)NTSTATUSNTAPIWDFEXPORT(WdfStringCreate)( __in PWDF_DRIVER_GLOBALS DriverGlobals, __in_opt PCUNICODE_STRING UnicodeString, __in_opt PWDF_OBJECT_ATTRIBUTES StringAttributes, __out WDFSTRING* String ){ DDI_ENTRY();
PFX_DRIVER_GLOBALS pFxDriverGlobals; FxString* pString; NTSTATUS status;
pFxDriverGlobals = GetFxDriverGlobals(DriverGlobals);
// // Get the parent's globals if it is present // if (NT_SUCCESS(FxValidateObjectAttributesForParentHandle(pFxDriverGlobals, StringAttributes))) { FxObject* pParent;
FxObjectHandleGetPtrAndGlobals(pFxDriverGlobals, StringAttributes->ParentObject, FX_TYPE_OBJECT, (PVOID*)&pParent, &pFxDriverGlobals); }
FxPointerNotNull(pFxDriverGlobals, String);
*String = NULL;
status = FxVerifierCheckIrqlLevel(pFxDriverGlobals, PASSIVE_LEVEL); if (!NT_SUCCESS(status)) { return status; }
status = FxValidateObjectAttributes(pFxDriverGlobals, StringAttributes); if (!NT_SUCCESS(status)) { return status; }
if (UnicodeString != NULL) { status = FxValidateUnicodeString(pFxDriverGlobals, UnicodeString); if (!NT_SUCCESS(status)) { return status; } }
pString = new (pFxDriverGlobals, StringAttributes) FxString(pFxDriverGlobals);
if (pString != NULL) { if (UnicodeString != NULL) { status = pString->Assign(UnicodeString); }
if (NT_SUCCESS(status)) { status = pString->Commit(StringAttributes, (WDFOBJECT*)String); }
if (!NT_SUCCESS(status)) { pString->DeleteFromFailedCreate(); pString = NULL; } } else { status = STATUS_INSUFFICIENT_RESOURCES;
DoTraceLevelMessage( pFxDriverGlobals, TRACE_LEVEL_ERROR, TRACINGERROR, "Could not allocate WDFSTRING handle, %!STATUS!", status); }
return status;}
__drv_maxIRQL(PASSIVE_LEVEL)VOIDNTAPIWDFEXPORT(WdfStringGetUnicodeString)( __in PWDF_DRIVER_GLOBALS DriverGlobals, __in WDFSTRING String, __out PUNICODE_STRING UnicodeString ){ DDI_ENTRY();
PFX_DRIVER_GLOBALS pFxDriverGlobals; FxString* pString; NTSTATUS status;
FxObjectHandleGetPtrAndGlobals(GetFxDriverGlobals(DriverGlobals), String, FX_TYPE_STRING, (PVOID*) &pString, &pFxDriverGlobals);
FxPointerNotNull(pFxDriverGlobals, UnicodeString);
status = FxVerifierCheckIrqlLevel(pFxDriverGlobals, PASSIVE_LEVEL); if (!NT_SUCCESS(status)) { return; }
RtlCopyMemory(UnicodeString, pString->GetUnicodeString(), sizeof(UNICODE_STRING));}
} // extern "C"