31#if (FX_CORE_MODE == FX_CORE_USER_MODE)
83 "WDFWORKITEM %p destroyed without calling WdfObjectDelete, or by "
84 "Framework processing DeviceRemove. Possible reference count "
155#if (FX_CORE_MODE == FX_CORE_USER_MODE)
159 "Could not initialize m_WorkItemCompleted event "
196 Config->AutomaticSerialization,
212 "ParentObject %p cannot automatically synchronize callbacks "
213 "with a WorkItem since it is not configured for passive level "
214 "callback constraints. Use a WDFDPC instead or set "
215 "AutomaticSerialization to FALSE."
225#if (FX_CORE_MODE == FX_CORE_KERNEL_MODE)
227#elif (FX_CORE_MODE == FX_CORE_USER_MODE)
236 "Could not allocate IoWorkItem, %!STATUS!",
status);
269 ParentObject->ADDREF(
this);
304 "Previously queued WDFWORKITEM 0x%p is already pending. "
305 "Ignoring the request to queue again",
GetHandle());
309 "WDFWORKITEM 0x%p is already deleted",
GetHandle());
516 "Calling WdfWorkItemFlush from within the WDFWORKITEM "
517 "%p callback will lead to deadlock, PRKTHREAD %p",
548 DbgPrint(
"Thread 0x%p is waiting on WDFWORKITEM 0x%p\n",
virtual void Lock(__out PKIRQL PreviousIrql)=0
virtual void Unlock(__in KIRQL PreviousIrql)=0
static FxDeviceBase * _SearchForDevice(__in FxObject *Object, __out_opt IFxHasCallbacks **Callbacks)
__inline FxDriver * GetDriver(VOID)
MdDeviceObject __inline GetDeviceObject(VOID)
__inline MdDriverObject GetDriverObject(VOID)
PVOID __inline GetObjectHandleUnchecked(VOID)
__inline PFX_DRIVER_GLOBALS GetDriverGlobals(VOID)
static _Must_inspect_result_ NTSTATUS _GetEffectiveLock(__in FxObject *Object, __in_opt IFxHasCallbacks *Callbacks, __in BOOLEAN AutomaticLocking, __in BOOLEAN PassiveCallbacks, __out FxCallbackLock **CallbackLock, __out_opt FxObject **CallbackLockObject)
CfxDeviceBase * m_DeviceBase
__drv_restoresIRQL KIRQL __in BOOLEAN Unlock
VOID DeleteFromFailedCreate(VOID)
VOID MarkPassiveCallbacks(__in FxObjectLockState State=ObjectLock)
VOID MarkDisposeOverride(__in FxObjectLockState State=ObjectLock)
_Must_inspect_result_ NTSTATUS Commit(__in_opt PWDF_OBJECT_ATTRIBUTES Attributes, __out_opt WDFOBJECT *ObjectHandle, __in_opt FxObject *Parent=NULL, __in BOOLEAN AssignDriverAsDefaultParent=TRUE)
FxWorkItem(__in PFX_DRIVER_GLOBALS FxDriverGlobals)
FxCREvent m_WorkItemCompleted
FxCallbackLock * m_CallbackLock
ULONG m_WorkItemRunningCount
static MX_WORKITEM_ROUTINE WorkItemThunk
MxThread m_WorkItemThread
_Must_inspect_result_ NTSTATUS Initialize(__in PWDF_OBJECT_ATTRIBUTES Attributes, __in PWDF_WORKITEM_CONFIG Config, __in FxObject *ParentObject, __out WDFWORKITEM *WorkItem)
FxObject * m_CallbackLockObject
PFN_WDF_WORKITEM m_Callback
virtual BOOLEAN Dispose(VOID)
static _Must_inspect_result_ NTSTATUS _Create(__in PFX_DRIVER_GLOBALS FxDriverGlobals, __in PWDF_WORKITEM_CONFIG Config, __in PWDF_OBJECT_ATTRIBUTES Attributes, __in FxObject *ParentObject, __out WDFWORKITEM *WorkItem)
__inline MdWorkItem GetWorkItem()
_Must_inspect_result_ __inline NTSTATUS Allocate(__in MdDeviceObject DeviceObject, __in_opt PVOID ThreadPoolEnv=NULL)
static __inline MdEThread GetCurrentEThread()
static __inline MxThread MxGetCurrentThread()
static __inline KIRQL MxGetCurrentIrql()
#define NT_SUCCESS(StatCode)
DoTraceLevelMessage(pFxDriverGlobals, TRACE_LEVEL_VERBOSE, TRACINGPNP, "Enter, WDFDEVICE %p", Device)
PFX_DRIVER_GLOBALS pFxDriverGlobals
FX_TRACK_DRIVER(fxDriverGlobals)
FxVerifierDbgBreakPoint(pFxDriverGlobals)
FORCEINLINE VOID FxPerfTraceWorkItem(_In_ PVOID DriverCallback)
#define _Must_inspect_result_
#define UNREFERENCED_PARAMETER(P)
#define TRACE_LEVEL_VERBOSE
#define TRACE_LEVEL_ERROR
NTSTATUS EnterCRAndWaitAndLeave(VOID)
CHECK_RETURN_IF_USER_MODE NTSTATUS Initialize(__in BOOLEAN InitialState=FALSE)
#define STATUS_INVALID_DEVICE_REQUEST
#define STATUS_INSUFFICIENT_RESOURCES
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_CHILD_LIST_CONFIG Config
_Must_inspect_result_ _In_ WDFDMAENABLER _In_ _In_opt_ PWDF_OBJECT_ATTRIBUTES Attributes
FORCEINLINE LONGLONG WDF_REL_TIMEOUT_IN_SEC(_In_ ULONGLONG Time)
_In_ PDEVICE_OBJECT DeviceObject
#define STATUS_WDF_INCOMPATIBLE_EXECUTION_LEVEL
_Must_inspect_result_ _In_opt_ PWDF_OBJECT_ATTRIBUTES _Out_ WDFWAITLOCK * Lock
_Must_inspect_result_ _In_ PWDF_WORKITEM_CONFIG _In_ PWDF_OBJECT_ATTRIBUTES _Out_ WDFWORKITEM * WorkItem
ActualNumberDriverObjects * sizeof(PDRIVER_OBJECT)) PDRIVER_OBJECT *DriverObjectList