ReactOS 0.4.16-dev-1946-g52006dd
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 NTAPI 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
 
 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
 
 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 214 of file fxdriverapi.cpp.

215 {
216
218 "Invalid Driver flags or EvtDriverDeviceAdd callback already added"
219 "STATUS_INVALID_PARAMETER");
220
222 }
#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 133 of file fxdriverapi.cpp.

133 {
137 "DriverInitFlags 0x%x invalid, valid flags are 0x%x, %!STATUS!",
138 DriverConfig->DriverInitFlags, validFlags, status);
139 return status;
140 }
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 170 of file fxdriverapi.cpp.

170 {
171 *Driver = NULL;
172 }
_Must_inspect_result_ _In_ WDFDRIVER Driver
Definition: wdfcontrol.h:83

◆ if() [5/12]

if ( DriverConfig->DriverInitFlags &  WdfDriverInitNoDispatchOverride)

Definition at line 211 of file fxdriverapi.cpp.

211 {
212 DO_NOTHING();
213 }
#define DO_NOTHING()
Definition: mxgeneral.h:32

◆ if() [6/12]

Definition at line 116 of file fxdriverapi.cpp.

118 {
119
123 "WDF_DRIVER_CONFIG got Size %d, expected v1.1 size %d or cur ver size %d, %!STATUS!",
124 DriverConfig->Size,
126
127 return status;
128 }
#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 190 of file fxdriverapi.cpp.

192 {
193 //
194 // Copy directly using the driver's value
195 //
196 pFxDriverGlobals->Tag = DriverConfig->DriverPoolTag;
197 pFxDriverGlobals->Public.DriverTag = DriverConfig->DriverPoolTag;
198 }

◆ if() [8/12]

if ( NT_SUCCESS(status )

Definition at line 265 of file fxdriverapi.cpp.

265 {
266 //
267 // **** Note ****
268 // Do not introduce failures after this point without ensuring
269 // FxObject::DeleteFromFailedCreate has a chance to clear out any
270 // assigned callbacks on the object.
271 //
272
273 //
274 // Store the WDFDRIVER and FxDriver* globally so the driver can retrieve
275 // it anytime.
276 //
279
280 //
281 // Record the flags so that diagnostics knows what type of driver it is.
282 //
283 pFxDriverGlobals->Public.DriverFlags |= DriverConfig->DriverInitFlags;
284
285 if (DriverConfig->DriverInitFlags &
287 //
288 // If there is no dispatch override or if it is an NT4 legacy style
289 // driver then we will not displace unload in the stub if one was not
290 // specified.
291 //
292 if (DriverConfig->EvtDriverUnload != NULL) {
293 pFxDriverGlobals->Public.DisplaceDriverUnload = TRUE;
294 }
295 else {
296 pFxDriverGlobals->Public.DisplaceDriverUnload = FALSE;
297 }
298 }
299 else {
300 pFxDriverGlobals->Public.DisplaceDriverUnload = TRUE;
301 }
302
303 if (Driver != NULL) {
304 *Driver = hDriver;
305 }
306
307#ifndef __REACTOS__
308 if (FX_TELEMETRY_ENABLED(g_TelemetryProvider, pFxDriverGlobals)) {
310
311#if (FX_CORE_MODE == FX_CORE_KERNEL_MODE)
312 const PWCHAR pVersionStr =
313 FX_MAKE_WSTR(__WDF_MAJOR_VERSION_STRING) L"."
314 FX_MAKE_WSTR(__WDF_MINOR_VERSION_STRING) L"."
315 FX_MAKE_WSTR(__WDF_BUILD_NUMBER) ;
316#else // USER_MODE
317 const PWCHAR pVersionStr =
318 FX_MAKE_WSTR(__WUDF_MAJOR_VERSION_STRING) L"."
319 FX_MAKE_WSTR(__WUDF_MINOR_VERSION_STRING) L"."
320 FX_MAKE_WSTR(__WUDF_SERVICE_VERSION) ;
321#endif
322
323 //
324 // GetImageName can fail if the registry cannot be accessed. This
325 // can happen during system shutdown. Since the image name is only
326 // used for telemetry the failure can be ignored.
327 //
328 (VOID) GetImageName(pFxDriverGlobals, &imageName.m_UnicodeString);
329
330 WDF_CENSUS_EVT_WRITE_DRIVER_LOAD(g_TelemetryProvider,
332 imageName.m_UnicodeString.Buffer,
334 }
335#endif // __REACTOS__
336 }
#define VOID
Definition: acefi.h:82
#define TRUE
Definition: types.h:120
#define L(x)
Definition: resources.c:13
FxDriver * pDriver
Definition: fxdriverapi.cpp:59
const PWCHAR pVersionStr
return FALSE
WDFDRIVER hDriver
Definition: fxdriverapi.cpp:99
#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
UNICODE_STRING imageName
Definition: library.c:551
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 245 of file fxdriverapi.cpp.

245 {
246
247 if (NT_SUCCESS(status)) {
248
250
251 if (NT_SUCCESS(status)) {
253 }
254 }
255 }
_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 157 of file fxdriverapi.cpp.

158 {
159
161
163 "WdfDriverCreate can only be called one time per "
164 "WDM PDRIVER_OBJECT %p, %!STATUS!",
166
167 return status;
168 }
#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 521 of file fxdriverapi.cpp.

522 {
523 return TRUE;
524 }

◆ if() [12/12]

Definition at line 493 of file fxdriverapi.cpp.

493 {
495
498 "VersionAvailableParams Size 0x%x, expected 0x%x, %!STATUS!",
500 status);
501
502 return FALSE;
503 }
_Must_inspect_result_ _In_ WDFDRIVER _In_ PWDF_DRIVER_VERSION_AVAILABLE_PARAMS VersionAvailableParams
Definition: wdfdriver.h:439

◆ 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

◆ 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 199 of file fxdriverapi.cpp.

◆ EvtTraceCallback

◆ FALSE

return FALSE

Definition at line 526 of file fxdriverapi.cpp.

Referenced by if().

◆ hDriver

Definition at line 99 of file fxdriverapi.cpp.

Referenced by if().

◆ major

major = __WDF_MAJOR_VERSION

Definition at line 466 of file fxdriverapi.cpp.

◆ minor

minor = __WDF_MINOR_VERSION

Definition at line 466 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:87

Definition at line 59 of file fxdriverapi.cpp.

Referenced by if().

◆ pFxDriverGlobals

PFX_DRIVER_GLOBALS pFxDriverGlobals = GetFxDriverGlobals(DriverGlobals)

Definition at line 57 of file fxdriverapi.cpp.

Referenced by if().

◆ pString

FxString* pString

Definition at line 390 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 394 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 400 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 370 of file fxdriverapi.cpp.

◆ String

_Must_inspect_result_ __in WDFDRIVER __in WDFSTRING String
Initial value:

Definition at line 383 of file fxdriverapi.cpp.

◆ validFlags

const LONG validFlags
Initial value:

Definition at line 100 of file fxdriverapi.cpp.

Referenced by if().

◆ VersionAvailableParams