ReactOS 0.4.16-dev-252-g9ccafe8
fxdriverapi.cpp File Reference
#include "coreprivshared.hpp"
#include <ntverp.h>
#include "fxtelemetry.hpp"
Include dependency graph for fxdriverapi.cpp:

Go to the source code of this file.

Functions

 __drv_maxIRQL (PASSIVE_LEVEL) PWSTR STDCALL WDFEXPORT(WdfDriverGetRegistryPath)(__in PWDF_DRIVER_GLOBALS DriverGlobals
 
 FxObjectHandleGetPtrAndGlobals (GetFxDriverGlobals(DriverGlobals), Driver, FX_TYPE_DRIVER,(PVOID *)&pDriver, &pFxDriverGlobals)
 
 if (!NT_SUCCESS(status))
 
return pDriver GetRegistryPathUnicodeString () -> Buffer
 
VOID RosInitWdf ()
 
 FxPointerNotNull (pFxDriverGlobals, DriverObject)
 
 FxPointerNotNull (pFxDriverGlobals, RegistryPath)
 
 FxPointerNotNull (pFxDriverGlobals, DriverConfig)
 
 WDFCASSERT (sizeof(WDF_DRIVER_CONFIG_V1_0)==sizeof(WDF_DRIVER_CONFIG_V1_1))
 
 if (DriverConfig->Size !=sizeof(WDF_DRIVER_CONFIG) &&DriverConfig->Size !=sizeof(WDF_DRIVER_CONFIG_V1_1))
 
 if ((DriverConfig->DriverInitFlags &~validFlags) !=0)
 
 if (pFxDriverGlobals->Driver !=NULL||pFxDriverGlobals->Public.Driver !=NULL)
 
 if (Driver !=NULL)
 
 if (DriverConfig->Size==sizeof(WDF_DRIVER_CONFIG) &&DriverConfig->DriverPoolTag !=0x0 &&DriverConfig->DriverPoolTag !=' kdD')
 
 if (DriverConfig->DriverInitFlags &WdfDriverInitNoDispatchOverride)
 
else if ((DriverConfig->DriverInitFlags &WdfDriverInitNonPnpDriver) &&DriverConfig->EvtDriverDeviceAdd !=NULL)
 
 FxInitialize (pFxDriverGlobals, DriverObject, RegistryPath, DriverConfig)
 
 if (pDriver !=NULL)
 
 if (NT_SUCCESS(status))
 
 UNREFERENCED_PARAMETER (DriverGlobals)
 
 UNREFERENCED_PARAMETER (DriverObject)
 
 UNREFERENCED_PARAMETER (EvtTraceCallback)
 
 UNREFERENCED_PARAMETER (ControlBlock)
 
 FxPointerNotNull (pFxDriverGlobals, String)
 
 FxObjectHandleGetPtr (pFxDriverGlobals, String, FX_TYPE_STRING,(PVOID *)&pString)
 
 FxPointerNotNull (pFxDriverGlobals, VersionAvailableParams)
 
 if (VersionAvailableParams->Size !=sizeof(WDF_DRIVER_VERSION_AVAILABLE_PARAMS))
 
 DoTraceLevelMessage (pFxDriverGlobals, TRACE_LEVEL_INFORMATION, TRACINGDRIVER, "IsVersionAvailable, current WDF ver major %d, minor %d, caller asking " "about major %d, minor %d", major, minor, VersionAvailableParams->MajorVersion, VersionAvailableParams->MinorVersion)
 
 if (VersionAvailableParams->MajorVersion==major &&VersionAvailableParams->MinorVersion<=minor)
 

Variables

__in WDFDRIVER Driver
 
PFX_DRIVER_GLOBALS pFxDriverGlobals = GetFxDriverGlobals(DriverGlobals)
 
NTSTATUS status = FxVerifierCheckIrqlLevel(pFxDriverGlobals, PASSIVE_LEVEL)
 
FxDriverpDriver
 
_Must_inspect_result_ __in MdDriverObject DriverObject
 
_Must_inspect_result_ __in MdDriverObject __in PCUNICODE_STRING RegistryPath
 
_Must_inspect_result_ __in MdDriverObject __in PCUNICODE_STRING __in_opt PWDF_OBJECT_ATTRIBUTES DriverAttributes
 
_Must_inspect_result_ __in MdDriverObject __in PCUNICODE_STRING __in_opt PWDF_OBJECT_ATTRIBUTES __in PWDF_DRIVER_CONFIG DriverConfig
 
WDFDRIVER hDriver = NULL
 
const LONG validFlags
 
 DriverGlobals = WdfDriverGlobals
 
 else
 
_Must_inspect_result_ __in PDRIVER_OBJECT __in PFN_WDF_TRACE_CALLBACK EvtTraceCallback
 
_Must_inspect_result_ __in PDRIVER_OBJECT __in PFN_WDF_TRACE_CALLBACK __in PVOID ControlBlock
 
return STATUS_NOT_SUPPORTED
 
_Must_inspect_result_ __in WDFDRIVER __in WDFSTRING String
 
FxStringpString
 
const PWCHAR pVersionStr
 
const PWCHAR pVersionStrVerifier
 
_Must_inspect_result_ __in WDFDRIVER __in PWDF_DRIVER_VERSION_AVAILABLE_PARAMS VersionAvailableParams
 
ULONG major = __WDF_MAJOR_VERSION
 
ULONG minor = __WDF_MINOR_VERSION
 
return FALSE
 

Function Documentation

◆ __drv_maxIRQL()

__drv_maxIRQL ( PASSIVE_LEVEL  )

◆ DoTraceLevelMessage()

DoTraceLevelMessage ( pFxDriverGlobals  ,
TRACE_LEVEL_INFORMATION  ,
TRACINGDRIVER  ,
IsVersionAvailable,
current WDF ver major d,
minor d,
caller asking " "about major d,
minor %d"  ,
major  ,
minor  ,
VersionAvailableParams->  MajorVersion,
VersionAvailableParams->  MinorVersion 
)

Referenced by if().

◆ FxInitialize()

FxInitialize ( pFxDriverGlobals  ,
DriverObject  ,
RegistryPath  ,
DriverConfig   
)

◆ FxObjectHandleGetPtr()

FxObjectHandleGetPtr ( pFxDriverGlobals  ,
String  ,
FX_TYPE_STRING  ,
(PVOID *)&  pString 
)

◆ FxObjectHandleGetPtrAndGlobals()

FxObjectHandleGetPtrAndGlobals ( GetFxDriverGlobals(DriverGlobals ,
Driver  ,
FX_TYPE_DRIVER  ,
(PVOID *)&  pDriver,
pFxDriverGlobals 
)

◆ FxPointerNotNull() [1/5]

FxPointerNotNull ( pFxDriverGlobals  ,
DriverConfig   
)

◆ FxPointerNotNull() [2/5]

FxPointerNotNull ( pFxDriverGlobals  ,
DriverObject   
)

◆ FxPointerNotNull() [3/5]

FxPointerNotNull ( pFxDriverGlobals  ,
RegistryPath   
)

◆ FxPointerNotNull() [4/5]

FxPointerNotNull ( pFxDriverGlobals  ,
String   
)

◆ FxPointerNotNull() [5/5]

FxPointerNotNull ( pFxDriverGlobals  ,
VersionAvailableParams   
)

◆ GetRegistryPathUnicodeString()

return pDriver GetRegistryPathUnicodeString ( ) -> Buffer

◆ if() [1/12]

if ( NT_SUCCESSstatus)

Definition at line 68 of file fxdriverapi.cpp.

68 {
69 return NULL;
70 }
#define NULL
Definition: types.h:112

◆ if() [2/12]

else if ( (DriverConfig->DriverInitFlags &WdfDriverInitNonPnpDriver) &&DriverConfig->EvtDriverDeviceAdd !  = NULL)

Definition at line 220 of file fxdriverapi.cpp.

221 {
222
224 "Invalid Driver flags or EvtDriverDeviceAdd callback already added"
225 "STATUS_INVALID_PARAMETER");
226
228 }
#define TRACINGDRIVER
Definition: dbgtrace.h:68
DoTraceLevelMessage(pFxDriverGlobals, TRACE_LEVEL_INFORMATION, TRACINGDRIVER, "IsVersionAvailable, current WDF ver major %d, minor %d, caller asking " "about major %d, minor %d", major, minor, VersionAvailableParams->MajorVersion, VersionAvailableParams->MinorVersion)
PFX_DRIVER_GLOBALS pFxDriverGlobals
Definition: fxdriverapi.cpp:57
#define TRACE_LEVEL_ERROR
Definition: storswtr.h:27
#define STATUS_INVALID_PARAMETER
Definition: udferr_usr.h:135

◆ if() [3/12]

if ( (DriverConfig->DriverInitFlags &~validFlags) !  = 0)

Definition at line 139 of file fxdriverapi.cpp.

139 {
143 "DriverInitFlags 0x%x invalid, valid flags are 0x%x, %!STATUS!",
144 DriverConfig->DriverInitFlags, validFlags, status);
145 return status;
146 }
NTSTATUS status
Definition: fxdriverapi.cpp:58
const LONG validFlags
Definition: ps.c:97
_Must_inspect_result_ _In_ PDRIVER_OBJECT _In_ PCUNICODE_STRING _In_opt_ PWDF_OBJECT_ATTRIBUTES _In_ PWDF_DRIVER_CONFIG DriverConfig
Definition: wdfdriver.h:219

◆ if() [4/12]

if ( Driver = NULL)

Definition at line 176 of file fxdriverapi.cpp.

176 {
177 *Driver = NULL;
178 }
_Must_inspect_result_ _In_ WDFDRIVER Driver
Definition: wdfcontrol.h:83

◆ if() [5/12]

if ( DriverConfig->DriverInitFlags &  WdfDriverInitNoDispatchOverride)

Definition at line 217 of file fxdriverapi.cpp.

217 {
218 DO_NOTHING();
219 }
#define DO_NOTHING()
Definition: mxgeneral.h:32

◆ if() [6/12]

Definition at line 122 of file fxdriverapi.cpp.

124 {
125
129 "WDF_DRIVER_CONFIG got Size %d, expected v1.1 size %d or cur ver size %d, %!STATUS!",
130 DriverConfig->Size,
132
133 return status;
134 }
#define STATUS_INFO_LENGTH_MISMATCH
Definition: udferr_usr.h:133

◆ if() [7/12]

if ( DriverConfig->  Size = sizeof(WDF_DRIVER_CONFIG) && DriverConfig->DriverPoolTag != 0x0 && DriverConfig->DriverPoolTag != ' kdD')

Definition at line 196 of file fxdriverapi.cpp.

198 {
199 //
200 // Copy directly using the driver's value
201 //
202 pFxDriverGlobals->Tag = DriverConfig->DriverPoolTag;
203 pFxDriverGlobals->Public.DriverTag = DriverConfig->DriverPoolTag;
204 }

◆ if() [8/12]

if ( NT_SUCCESS(status )

Definition at line 271 of file fxdriverapi.cpp.

271 {
272 //
273 // **** Note ****
274 // Do not introduce failures after this point without ensuring
275 // FxObject::DeleteFromFailedCreate has a chance to clear out any
276 // assigned callbacks on the object.
277 //
278
279 //
280 // Store the WDFDRIVER and FxDriver* globally so the driver can retrieve
281 // it anytime.
282 //
285
286 //
287 // Record the flags so that diagnostics knows what type of driver it is.
288 //
289 pFxDriverGlobals->Public.DriverFlags |= DriverConfig->DriverInitFlags;
290
291 if (DriverConfig->DriverInitFlags &
293 //
294 // If there is no dispatch override or if it is an NT4 legacy style
295 // driver then we will not displace unload in the stub if one was not
296 // specified.
297 //
298 if (DriverConfig->EvtDriverUnload != NULL) {
299 pFxDriverGlobals->Public.DisplaceDriverUnload = TRUE;
300 }
301 else {
302 pFxDriverGlobals->Public.DisplaceDriverUnload = FALSE;
303 }
304 }
305 else {
306 pFxDriverGlobals->Public.DisplaceDriverUnload = TRUE;
307 }
308
309 if (Driver != NULL) {
310 *Driver = hDriver;
311 }
312
313#ifndef __REACTOS__
314 if (FX_TELEMETRY_ENABLED(g_TelemetryProvider, pFxDriverGlobals)) {
315 FxAutoString imageName;
316
317#if (FX_CORE_MODE == FX_CORE_KERNEL_MODE)
318 const PWCHAR pVersionStr =
319 FX_MAKE_WSTR(__WDF_MAJOR_VERSION_STRING) L"."
320 FX_MAKE_WSTR(__WDF_MINOR_VERSION_STRING) L"."
321 FX_MAKE_WSTR(__WDF_BUILD_NUMBER) ;
322#else // USER_MODE
323 const PWCHAR pVersionStr =
324 FX_MAKE_WSTR(__WUDF_MAJOR_VERSION_STRING) L"."
325 FX_MAKE_WSTR(__WUDF_MINOR_VERSION_STRING) L"."
326 FX_MAKE_WSTR(__WUDF_SERVICE_VERSION) ;
327#endif
328
329 //
330 // GetImageName can fail if the registry cannot be accessed. This
331 // can happen during system shutdown. Since the image name is only
332 // used for telemetry the failure can be ignored.
333 //
335
336 WDF_CENSUS_EVT_WRITE_DRIVER_LOAD(g_TelemetryProvider,
338 imageName.m_UnicodeString.Buffer,
340 }
341#endif // __REACTOS__
342 }
#define VOID
Definition: acefi.h:82
#define TRUE
Definition: types.h:120
FxDriver * pDriver
Definition: fxdriverapi.cpp:59
const PWCHAR pVersionStr
return FALSE
WDFDRIVER hDriver
#define FX_MAKE_WSTR(x)
Definition: fxmacros.hpp:264
#define WDF_CENSUS_EVT_WRITE_DRIVER_LOAD(TraceHandle, Globals, DrvImage, WdfVersion)
Definition: fxtelemetry.hpp:72
_Must_inspect_result_ NTSTATUS GetImageName(_In_ PFX_DRIVER_GLOBALS DriverGlobals, _Out_ PUNICODE_STRING ImageName)
#define FX_TELEMETRY_ENABLED(TraceHandle, Globals)
Definition: fxtelemetry.hpp:45
#define L(x)
Definition: ntvdm.h:50
UNICODE_STRING m_UnicodeString
FxDriver * Driver
Definition: fxglobals.h:374
uint16_t * PWCHAR
Definition: typedefs.h:56
@ WdfDriverInitNonPnpDriver
Definition: wdfdriver.h:51
@ WdfDriverInitNoDispatchOverride
Definition: wdfdriver.h:52

◆ if() [9/12]

if ( pDriver = NULL)

Definition at line 251 of file fxdriverapi.cpp.

251 {
252
253 if (NT_SUCCESS(status)) {
254
256
257 if (NT_SUCCESS(status)) {
259 }
260 }
261 }
_Must_inspect_result_ NTSTATUS Initialize(__in PCUNICODE_STRING RegistryPath, __in PWDF_DRIVER_CONFIG Config, __in_opt PWDF_OBJECT_ATTRIBUTES DriverAttributes)
Definition: fxdriver.cpp:334
_Must_inspect_result_ NTSTATUS Commit(__in_opt PWDF_OBJECT_ATTRIBUTES Attributes, __out_opt WDFOBJECT *ObjectHandle, __in_opt FxObject *Parent=NULL, __in BOOLEAN AssignDriverAsDefaultParent=TRUE)
Definition: fxobject.cpp:904
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:33
_Must_inspect_result_ _In_ PDRIVER_OBJECT _In_ PCUNICODE_STRING _In_opt_ PWDF_OBJECT_ATTRIBUTES DriverAttributes
Definition: wdfdriver.h:217
_Must_inspect_result_ _In_ PDRIVER_OBJECT _In_ PCUNICODE_STRING RegistryPath
Definition: wdfdriver.h:215
_In_ LPWSTR _In_ ULONG _In_ ULONG _In_ ULONG _Out_ DEVINFO _In_ HDEV _In_ LPWSTR _In_ HANDLE hDriver
Definition: winddi.h:3557

◆ if() [10/12]

Definition at line 163 of file fxdriverapi.cpp.

164 {
165
167
169 "WdfDriverCreate can only be called one time per "
170 "WDM PDRIVER_OBJECT %p, %!STATUS!",
172
173 return status;
174 }
#define STATUS_DRIVER_INTERNAL_ERROR
Definition: udferr_usr.h:177
_Must_inspect_result_ _In_ PDRIVER_OBJECT DriverObject
Definition: wdfdriver.h:213

◆ if() [11/12]

if ( VersionAvailableParams->  MajorVersion = major && VersionAvailableParams->MinorVersion <= minor)

Definition at line 527 of file fxdriverapi.cpp.

528 {
529 return TRUE;
530 }

◆ if() [12/12]

Definition at line 499 of file fxdriverapi.cpp.

499 {
501
504 "VersionAvailableParams Size 0x%x, expected 0x%x, %!STATUS!",
506 status);
507
508 return FALSE;
509 }
_Must_inspect_result_ _In_ WDFDRIVER _In_ PWDF_DRIVER_VERSION_AVAILABLE_PARAMS VersionAvailableParams
Definition: wdfdriver.h:439

◆ RosInitWdf()

VOID RosInitWdf ( )

Definition at line 53 of file reactos_special.cpp.

54{
57
63 WdfBindInfo.FuncTable = (WDFFUNC *)(&WdfVersion.Functions);
67}
PFX_DRIVER_GLOBALS fxDriverGlobals
__inline PFX_DRIVER_GLOBALS GetFxDriverGlobals(__in PWDF_DRIVER_GLOBALS DriverGlobals)
Definition: fxglobals.h:597
struct _WDF_BIND_INFO WDF_BIND_INFO
_Must_inspect_result_ PWDF_DRIVER_GLOBALS FxAllocateDriverGlobals(VOID)
Definition: globals.cpp:1052
WDFVERSION WdfVersion
VOID(* WDFFUNC)(VOID)
PWDF_DRIVER_GLOBALS WdfDriverGlobals
WDF_BIND_INFO WdfBindInfo
FxLibraryGlobalsType FxLibraryGlobals
Definition: globals.cpp:95
RTL_OSVERSIONINFOEXW OsVersionInfo
Definition: fxglobals.h:770
PWDF_BIND_INFO WdfBindInfo
Definition: fxglobals.h:405
ULONG dwMajorVersion
Definition: rtltypes.h:270
ULONG dwMinorVersion
Definition: rtltypes.h:271
ULONG FuncCount
Definition: fxdynamics.h:593
WDFFUNCTIONS Functions
Definition: fxdynamics.h:594
ULONG Size
Definition: fxldr.h:131
WDF_VERSION Version
Definition: fxldr.h:133
ULONG FuncCount
Definition: fxldr.h:134
WDF_MAJOR_VERSION Major
Definition: fxldr.h:122
WDF_BUILD_NUMBER Build
Definition: fxldr.h:124
WDF_MINOR_VERSION Minor
Definition: fxldr.h:123

◆ UNREFERENCED_PARAMETER() [1/4]

UNREFERENCED_PARAMETER ( ControlBlock  )

◆ UNREFERENCED_PARAMETER() [2/4]

UNREFERENCED_PARAMETER ( DriverGlobals  )

◆ UNREFERENCED_PARAMETER() [3/4]

UNREFERENCED_PARAMETER ( DriverObject  )

◆ UNREFERENCED_PARAMETER() [4/4]

UNREFERENCED_PARAMETER ( EvtTraceCallback  )

◆ WDFCASSERT()

Variable Documentation

◆ ControlBlock

◆ Driver

Initial value:

Definition at line 52 of file fxdriverapi.cpp.

◆ DriverAttributes

◆ DriverConfig

◆ DriverGlobals

DriverGlobals = WdfDriverGlobals

Definition at line 107 of file fxdriverapi.cpp.

Referenced by __deref_opt_out_bcount(), __deref_out_range(), __drv_maxIRQL(), __drv_strictTypeMatch(), __drv_when(), __in_bcount_opt(), __in_ecount(), __in_xcount(), __out_bcount(), __success(), _Acquires_lock_(), FxDevice::_AllocAndQueryPropertyEx(), FxIoQueue::_Create(), FxMemoryBuffer::_Create(), FxPkgFdo::_Create(), FxPortResourceInfo::_CreateAndInit(), FxRegisterResourceInfo::_CreateAndInit(), FxInterruptThreadpool::_CreateAndInit(), FxMessageDispatch::_CreateAndInitialize(), _Deref_out_range_(), _In_reads_(), _In_reads_bytes_opt_(), _Out_writes_bytes_(), _Outptr_opt_result_bytebuffer_(), FxDevice::_QueryPropertyEx(), _Requires_lock_held_(), _Requires_lock_not_held_(), _When_(), AddEventHooksWdfDeviceCreate(), AddEventHooksWdfIoQueueCreate(), IdleTimeoutManagement::CommitPowerFrameworkSettings(), FxRequestMemory::Create(), IdleTimeoutManagement::FreezeIdleTimeoutManagementStatus(), FxFreeDriverGlobals(), GetFxDriverGlobals(), GetImageName(), GetStackCapabilities(), if(), FxEventQueue::Initialize(), IsLoggingEnabledAndNeeded(), LockResourceTable(), LogDeviceStartTelemetryEvent(), LogDriverInfoStream(), RegistryReadLastLoggedTime(), RegistryWriteCurrentTime(), ResumeIdleWorker(), SetD3ColdSupport(), StopIdleWorker(), switch(), IdleTimeoutManagement::UseSystemManagedIdleTimeout(), VerifyCriticalRegionExit(), VerifyIrqlExit(), VerifyWdfDeviceWdmDispatchIrp(), VfAllocateContext(), WdfCxVerifierKeBugCheck(), WdfDriverMiniportUnload(), WdfGetTriageInfo(), WdfInterruptGetDevice(), WdfInterruptQueueDpcForIsr(), WdfInterruptQueueWorkItemForIsr(), WdfInterruptWdmGetInterrupt(), WdfObjectAllocateContext(), WdfObjectContextGetObject(), WdfObjectDereferenceActual(), WdfObjectGetTypedContextWorker(), WdfObjectReferenceActual(), WdfRequestSend(), WdfVerifierDbgBreakPoint(), WdfVerifierKeBugCheck(), and WdfWaitLockAcquire().

◆ DriverObject

◆ else

else
Initial value:
{
static VOID _InitializeTag(__in PFX_DRIVER_GLOBALS Globals, __in PWDF_DRIVER_CONFIG Config)
Definition: fxdriver.cpp:266

Definition at line 205 of file fxdriverapi.cpp.

◆ EvtTraceCallback

◆ FALSE

return FALSE

Definition at line 532 of file fxdriverapi.cpp.

Referenced by if().

◆ hDriver

Definition at line 102 of file fxdriverapi.cpp.

Referenced by if().

◆ major

major = __WDF_MAJOR_VERSION

Definition at line 472 of file fxdriverapi.cpp.

◆ minor

minor = __WDF_MINOR_VERSION

Definition at line 472 of file fxdriverapi.cpp.

◆ pDriver

FxDriver* pDriver
Initial value:
_Must_inspect_result_ __in MdDriverObject __in PCUNICODE_STRING __in_opt PWDF_OBJECT_ATTRIBUTES DriverAttributes
Definition: fxdriverapi.cpp:90

Definition at line 59 of file fxdriverapi.cpp.

Referenced by if().

◆ pFxDriverGlobals

Definition at line 57 of file fxdriverapi.cpp.

Referenced by if().

◆ pString

FxString* pString

Definition at line 396 of file fxdriverapi.cpp.

◆ pVersionStr

const PWCHAR pVersionStr
Initial value:
=
L"Kernel Mode Driver Framework version "
FX_MAKE_WSTR(__WDF_MAJOR_VERSION_STRING) L"."
FX_MAKE_WSTR(__WDF_MINOR_VERSION_STRING) L"."
FX_MAKE_WSTR(__WDF_BUILD_NUMBER)

Definition at line 400 of file fxdriverapi.cpp.

Referenced by if().

◆ pVersionStrVerifier

const PWCHAR pVersionStrVerifier
Initial value:
=
L"Kernel Mode Driver Framework (verifier on) version "
FX_MAKE_WSTR(__WDF_MAJOR_VERSION_STRING) L"."
FX_MAKE_WSTR(__WDF_MINOR_VERSION_STRING) L"."
FX_MAKE_WSTR(__WDF_BUILD_NUMBER)

Definition at line 406 of file fxdriverapi.cpp.

◆ RegistryPath

◆ status

Definition at line 58 of file fxdriverapi.cpp.

Referenced by if().

◆ STATUS_NOT_SUPPORTED

return STATUS_NOT_SUPPORTED

Definition at line 376 of file fxdriverapi.cpp.

◆ String

_Must_inspect_result_ __in WDFDRIVER __in WDFSTRING String
Initial value:

Definition at line 389 of file fxdriverapi.cpp.

◆ validFlags

const LONG validFlags
Initial value:

Definition at line 103 of file fxdriverapi.cpp.

Referenced by if().

◆ VersionAvailableParams