ReactOS 0.4.16-dev-1946-g52006dd
fxcxdeviceinitapi.cpp File Reference
#include "coreprivshared.hpp"
Include dependency graph for fxcxdeviceinitapi.cpp:

Go to the source code of this file.

Functions

static __inline NTSTATUS FxValiateCx (__in PFX_DRIVER_GLOBALS FxDriverGlobals, __in PFX_DRIVER_GLOBALS CxDriverGlobals)
 
_Must_inspect_result_ __drv_maxIRQL (DISPATCH_LEVEL) WDFAPI NTSTATUS NTAPI WDFEXPORT(WdfCxDeviceInitAssignWdmIrpPreprocessCallback)(__in PWDF_DRIVER_GLOBALS DriverGlobals
 
_Must_inspect_result_ __in PWDFCXDEVICE_INIT __in PFN_WDFCXDEVICE_WDM_IRP_PREPROCESS __in UCHAR __drv_when (NumMinorFunctions > 0, __in_bcount(NumMinorFunctions)) __drv_when(NumMinorFunctions
 
 FxPointerNotNull (cxDriverGlobals, CxDeviceInit)
 
 if (!NT_SUCCESS(status))
 
 FxPointerNotNull (fxDriverGlobals, EvtCxDeviceWdmIrpPreprocess)
 
 if (NumMinorFunctions > 0)
 
 if (MajorFunction >=ARRAY_SIZE(CxDeviceInit->PreprocessInfo->Dispatch))
 
 if (CxDeviceInit->PreprocessInfo==NULL)
 
 ASSERT (CxDeviceInit->PreprocessInfo->ClassExtension)
 
 FxPointerNotNull (fxDriverGlobals, EvtIoInCallerContext)
 
 FxPointerNotNull (fxDriverGlobals, RequestAttributes)
 
RtlCopyMemoryCxDeviceInit (WDF_OBJECT_ATTRIBUTES)
 
 FxPointerNotNull (fxDriverGlobals, CxFileObjectConfig)
 
 if (CxFileObjectConfig->Size !=sizeof(WDFCX_FILEOBJECT_CONFIG))
 
 switch (CxFileObjectConfig->AutoForwardCleanupClose)
 
 if (normalizedFileClass==WdfFileObjectInvalid||normalizedFileClass > WdfFileObjectWdfCannotUseFsContexts)
 
 if (FxIsFileObjectOptional(CxFileObjectConfig->FileObjectClass))
 
RtlCopyMemoryCxDeviceInit (CxDeviceInit->FileObject.Callbacks)
 
 if (FileObjectAttributes !=NULL)
 
_Must_inspect_result_ __drv_maxIRQL (PASSIVE_LEVEL) PWDFCXDEVICE_INIT NTAPI WDFEXPORT(WdfCxDeviceInitAllocate)(__in PWDF_DRIVER_GLOBALS DriverGlobals
 
 FxPointerNotNull (cxDriverGlobals, DeviceInit)
 
 if (NULL==cxDeviceInit)
 

Variables

_Must_inspect_result_ __in PWDFCXDEVICE_INIT CxDeviceInit
 
_Must_inspect_result_ __in PWDFCXDEVICE_INIT __in PFN_WDFCXDEVICE_WDM_IRP_PREPROCESS EvtCxDeviceWdmIrpPreprocess
 
_Must_inspect_result_ __in PWDFCXDEVICE_INIT __in PFN_WDFCXDEVICE_WDM_IRP_PREPROCESS __in UCHAR MajorFunction
 
_Must_inspect_result_ __in PWDFCXDEVICE_INIT __in PFN_WDFCXDEVICE_WDM_IRP_PREPROCESS __in UCHAR __in_opt PUCHAR MinorFunctions
 
_Must_inspect_result_ __in PWDFCXDEVICE_INIT __in PFN_WDFCXDEVICE_WDM_IRP_PREPROCESS __in UCHAR __in_opt PUCHAR __in ULONG NumMinorFunctions
 
PFX_DRIVER_GLOBALS fxDriverGlobals = CxDeviceInit->ClientDriverGlobals
 
PFX_DRIVER_GLOBALS cxDriverGlobals = GetFxDriverGlobals(DriverGlobals)
 
NTSTATUS status = FxValiateCx(fxDriverGlobals, cxDriverGlobals)
 
CxDeviceInit PreprocessInfo Dispatch[MajorFunctionEvtCxDevicePreprocess
 
Done __pad0__
 
__in PWDFCXDEVICE_INIT __in PFN_WDF_IO_IN_CALLER_CONTEXT EvtIoInCallerContext
 
CxDeviceInit IoInCallerContextCallback = EvtIoInCallerContext
 
Done __pad1__
 
__in PWDFCXDEVICE_INIT __in PWDF_OBJECT_ATTRIBUTES RequestAttributes
 
Done __pad2__
 
__in PWDFCXDEVICE_INIT __in PWDFCX_FILEOBJECT_CONFIG CxFileObjectConfig
 
__in PWDFCXDEVICE_INIT __in PWDFCX_FILEOBJECT_CONFIG __in_opt PWDF_OBJECT_ATTRIBUTES FileObjectAttributes
 
WDF_FILEOBJECT_CLASS normalizedFileClass
 
CxDeviceInit FileObject Set = TRUE
 
CxDeviceInit FileObject AutoForwardCleanupClose
 
CxDeviceInit FileObject Class = CxFileObjectConfig->FileObjectClass
 
Done __pad3__
 
_Must_inspect_result_ __in PWDFDEVICE_INIT DeviceInit
 
PWDFCXDEVICE_INIT cxDeviceInit = NULL
 
cxDeviceInit ClientDriverGlobals = fxDriverGlobals
 
cxDeviceInit CxDriverGlobals = cxDriverGlobals
 
Done __pad4__
 

Function Documentation

◆ __drv_maxIRQL() [1/2]

◆ __drv_maxIRQL() [2/2]

_Must_inspect_result_ __drv_maxIRQL ( PASSIVE_LEVEL  )

◆ __drv_when()

◆ ASSERT()

ASSERT ( CxDeviceInit->PreprocessInfo->  ClassExtension)

◆ CxDeviceInit() [1/2]

RtlCopyMemory & CxDeviceInit ( CxDeviceInit->FileObject.  Callbacks)

◆ CxDeviceInit() [2/2]

RtlCopyMemory & CxDeviceInit ( WDF_OBJECT_ATTRIBUTES  )

◆ FxPointerNotNull() [1/6]

FxPointerNotNull ( cxDriverGlobals  ,
CxDeviceInit   
)

◆ FxPointerNotNull() [2/6]

FxPointerNotNull ( cxDriverGlobals  ,
DeviceInit   
)

◆ FxPointerNotNull() [3/6]

FxPointerNotNull ( fxDriverGlobals  ,
CxFileObjectConfig   
)

◆ FxPointerNotNull() [4/6]

FxPointerNotNull ( fxDriverGlobals  ,
EvtCxDeviceWdmIrpPreprocess   
)

◆ FxPointerNotNull() [5/6]

FxPointerNotNull ( fxDriverGlobals  ,
EvtIoInCallerContext   
)

◆ FxPointerNotNull() [6/6]

FxPointerNotNull ( fxDriverGlobals  ,
RequestAttributes   
)

◆ FxValiateCx()

static __inline NTSTATUS FxValiateCx ( __in PFX_DRIVER_GLOBALS  FxDriverGlobals,
__in PFX_DRIVER_GLOBALS  CxDriverGlobals 
)
static

Definition at line 42 of file fxcxdeviceinitapi.cpp.

46{
48
49 if (FxIsClassExtension(FxDriverGlobals, CxDriverGlobals) == FALSE) {
52 "This function can only be called by a WDF "
53 "extension driver, Driver 0x%p, %!STATUS!",
54 CxDriverGlobals->Public.Driver, status);
55 FxVerifierDbgBreakPoint(FxDriverGlobals);
56 }
57
58 return status;
59}
LONG NTSTATUS
Definition: precomp.h:26
#define TRACINGDEVICE
Definition: dbgtrace.h:58
#define FALSE
Definition: types.h:117
DoTraceLevelMessage(pFxDriverGlobals, TRACE_LEVEL_VERBOSE, TRACINGPNP, "Enter, WDFDEVICE %p", Device)
NTSTATUS status
cxDeviceInit CxDriverGlobals
FxVerifierDbgBreakPoint(pFxDriverGlobals)
_Must_inspect_result_ __inline BOOLEAN FxIsClassExtension(__in PFX_DRIVER_GLOBALS FxDriverGlobals, __in PFX_DRIVER_GLOBALS ExtDriverGlobals)
Definition: fxglobals.h:965
#define STATUS_SUCCESS
Definition: shellext.h:65
#define TRACE_LEVEL_ERROR
Definition: storswtr.h:27
Definition: ps.c:97
#define STATUS_INVALID_DEVICE_REQUEST
Definition: udferr_usr.h:138

◆ if() [1/9]

if ( NT_SUCCESSstatus)

Definition at line 96 of file fxcxdeviceinitapi.cpp.

96 {
97 goto Done;
98 }

◆ if() [2/9]

if ( CxDeviceInit->  PreprocessInfo = NULL)

Definition at line 124 of file fxcxdeviceinitapi.cpp.

124 {
129 "Couldn't create object PreprocessInfo, "
130 "%!STATUS!", status);
131
132 goto Done;
133 }
135 }
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
_Must_inspect_result_ __in PWDFCXDEVICE_INIT CxDeviceInit
PFX_DRIVER_GLOBALS fxDriverGlobals
FxIrpPreprocessInfo * PreprocessInfo
#define STATUS_INSUFFICIENT_RESOURCES
Definition: udferr_usr.h:158

◆ if() [3/9]

Definition at line 356 of file fxcxdeviceinitapi.cpp.

356 {
359 "Invalid CxFileObjectConfig Size %d, expected %d",
361
363 goto Done;
364 }
__in PWDFCXDEVICE_INIT __in PWDFCX_FILEOBJECT_CONFIG CxFileObjectConfig

◆ if() [4/9]

Definition at line 447 of file fxcxdeviceinitapi.cpp.

447 {
451 }
WDF_OBJECT_ATTRIBUTES Attributes
CxFileObjectInit FileObject
#define RtlCopyMemory(Destination, Source, Length)
Definition: typedefs.h:263
_In_ PWDFDEVICE_INIT _In_ PWDF_FILEOBJECT_CONFIG _In_opt_ PWDF_OBJECT_ATTRIBUTES FileObjectAttributes
Definition: wdfdevice.h:3406

◆ if() [5/9]

if ( FxIsFileObjectOptional(CxFileObjectConfig->FileObjectClass)  )

Definition at line 423 of file fxcxdeviceinitapi.cpp.

423 {
424 switch(normalizedFileClass) {
428 break;
429
430 default:
433 "Invalid CxFileObjectConfig->FileObjectClass %d",
434 CxFileObjectConfig->FileObjectClass);
436 goto Done;
437 break; // just in case static verification tools complain.
438 }
439 }
WDF_FILEOBJECT_CLASS normalizedFileClass
@ WdfFileObjectWdfCanUseFsContext
Definition: wdfdevice.h:461
@ WdfFileObjectWdfCanUseFsContext2
Definition: wdfdevice.h:462
@ WdfFileObjectWdfCannotUseFsContexts
Definition: wdfdevice.h:463

◆ if() [6/9]

if ( MajorFunction >=  ARRAY_SIZECxDeviceInit->PreprocessInfo->Dispatch)

Definition at line 111 of file fxcxdeviceinitapi.cpp.

111 {
114 "MajorFunction %x is invalid, %!STATUS!",
116
117 goto Done;
118 }
uint32_t ULONG
Definition: typedefs.h:59
#define STATUS_INVALID_PARAMETER
Definition: udferr_usr.h:135
_In_ UCHAR MajorFunction
Definition: wdfdevice.h:1703

◆ if() [7/9]

Definition at line 410 of file fxcxdeviceinitapi.cpp.

411 {
414 "Out of range CxFileObjectConfig->FileObjectClass %d",
415 CxFileObjectConfig->FileObjectClass);
417 goto Done;
418 }

◆ if() [8/9]

if ( NULL  = cxDeviceInit)

Definition at line 494 of file fxcxdeviceinitapi.cpp.

494 {
495 goto Done;
496 }

◆ if() [9/9]

if ( NumMinorFunctions  ,
 
)

Definition at line 102 of file fxcxdeviceinitapi.cpp.

102 {
104 }
#define FxPointerNotNull(FxDriverGlobals, Ptr)
Definition: fxmacros.hpp:253
_Must_inspect_result_ _In_ PWDFDEVICE_INIT _In_ PFN_WDFDEVICE_WDM_IRP_PREPROCESS _In_ UCHAR _In_opt_ PUCHAR MinorFunctions
Definition: wdfdevice.h:3471

◆ switch()

switch ( CxFileObjectConfig->  AutoForwardCleanupClose)

Definition at line 382 of file fxcxdeviceinitapi.cpp.

382 {
383 case WdfTrue:
384 case WdfFalse:
385 case WdfUseDefault:
386 break;
387
388 default:
391 "Invalid CxFileObjectConfig->AutoForwardCleanupClose value 0x%x, "
392 "expected WDF_TRI_STATE value",
393 CxFileObjectConfig->AutoForwardCleanupClose);
394
396 goto Done;
397 }
@ WdfTrue
Definition: wdftypes.h:88
@ WdfUseDefault
Definition: wdftypes.h:89
@ WdfFalse
Definition: wdftypes.h:87

Variable Documentation

◆ __pad0__

Done __pad0__

Definition at line 176 of file fxcxdeviceinitapi.cpp.

◆ __pad1__

Done __pad1__

Definition at line 250 of file fxcxdeviceinitapi.cpp.

◆ __pad2__

Done __pad2__

Definition at line 302 of file fxcxdeviceinitapi.cpp.

◆ __pad3__

Done __pad3__

Definition at line 453 of file fxcxdeviceinitapi.cpp.

◆ __pad4__

Done __pad4__

Definition at line 501 of file fxcxdeviceinitapi.cpp.

◆ AutoForwardCleanupClose

CxDeviceInit FileObject AutoForwardCleanupClose
Initial value:
=
CxFileObjectConfig->AutoForwardCleanupClose

Definition at line 401 of file fxcxdeviceinitapi.cpp.

◆ Class

Definition at line 441 of file fxcxdeviceinitapi.cpp.

◆ ClientDriverGlobals

cxDeviceInit ClientDriverGlobals = fxDriverGlobals

Definition at line 498 of file fxcxdeviceinitapi.cpp.

◆ CxDeviceInit

__in PWDFCXDEVICE_INIT CxDeviceInit

Definition at line 70 of file fxcxdeviceinitapi.cpp.

Referenced by if().

◆ cxDeviceInit

cxDeviceInit = NULL

Definition at line 472 of file fxcxdeviceinitapi.cpp.

◆ cxDriverGlobals

PFX_DRIVER_GLOBALS cxDriverGlobals = GetFxDriverGlobals(DriverGlobals)

Definition at line 85 of file fxcxdeviceinitapi.cpp.

◆ CxDriverGlobals

cxDeviceInit CxDriverGlobals = cxDriverGlobals

Definition at line 499 of file fxcxdeviceinitapi.cpp.

Referenced by FxValiateCx().

◆ CxFileObjectConfig

Definition at line 315 of file fxcxdeviceinitapi.cpp.

Referenced by if(), and switch().

◆ DeviceInit

Initial value:
{
#define DDI_ENTRY()
Definition: fxglobalskm.h:56

Definition at line 465 of file fxcxdeviceinitapi.cpp.

◆ EvtCxDevicePreprocess

CxDeviceInit PreprocessInfo Dispatch [MajorFunction] EvtCxDevicePreprocess
Initial value:
=
_Must_inspect_result_ __in PWDFCXDEVICE_INIT __in PFN_WDFCXDEVICE_WDM_IRP_PREPROCESS EvtCxDeviceWdmIrpPreprocess

Definition at line 171 of file fxcxdeviceinitapi.cpp.

◆ EvtCxDeviceWdmIrpPreprocess

◆ EvtIoInCallerContext

◆ FileObjectAttributes

◆ fxDriverGlobals

◆ IoInCallerContextCallback

CxDeviceInit IoInCallerContextCallback = EvtIoInCallerContext

Definition at line 248 of file fxcxdeviceinitapi.cpp.

◆ MajorFunction

◆ MinorFunctions

◆ normalizedFileClass

normalizedFileClass
Initial value:
CxFileObjectConfig->FileObjectClass)
WDF_FILEOBJECT_CLASS __inline FxFileObjectClassNormalize(__in WDF_FILEOBJECT_CLASS FileObjectClass)
Definition: fxdevice.hpp:103

Definition at line 340 of file fxcxdeviceinitapi.cpp.

Referenced by FxFileObject::_CreateFileObject(), FxFileObject::_DestroyFileObject(), FxFileObject::_GetFileObjectFromWdm(), and if().

◆ NumMinorFunctions

◆ RequestAttributes

◆ Set

Definition at line 399 of file fxcxdeviceinitapi.cpp.

◆ status