34 #if defined(EVENT_TRACING) 35 #include "FxIoQueue.hpp.tmh" 553 #if (FX_CORE_MODE==FX_CORE_KERNEL_MODE) 577 #if (FX_CORE_MODE==FX_CORE_USER_MODE) 636 VerifyCancelForDriver,
648 VerifyValidateCompletedRequest,
668 "Enter: WDFQUEUE 0x%p, WDFREQUEST 0x%p",
687 DispatchInternalEvents(
irql);
707 "Enter: WDFQUEUE 0x%p, WDFREQUEST 0x%p",
742 "Enter: WDFQUEUE 0x%p, WDFREQUEST 0x%p",
762 DispatchInternalEvents(
irql);
865 VerifyGetRequestUpdateFlags,
872 VerifyGetRequestRestoreFlags,
905 VerifyForwardRequest,
921 VerifyQueueDriverCreatedRequest,
935 ProcessAcknowledgedRequests(
956 VerifyRequestCancelable,
1007 DispatchInternalEvents(
1053 if (ExecutionLevel !=
NULL) {
1057 if (SynchronizationScope !=
NULL) {
1321 VerifyForwardRequestUpdateFlags,
1336 VerifyForwardRequestToParent,
1393 ProcessIdleComplete(
1399 ProcessPurgeComplete(
1411 ProcessCancelledRequests(
1417 ProcessCancelledRequestsOnQueue(
1673 EVT_IRP_QUEUE_CANCEL
1682 EVT_IRP_QUEUE_CANCEL
1694 EVT_WDF_IO_QUEUE_STATE
1698 EVT_WDF_IO_QUEUE_STATE
1707 #if (FX_CORE_MODE==FX_CORE_KERNEL_MODE) 1714 #endif // _FXIOQUEUE_H_ VOID GetForwardProgressIrps(__in PLIST_ENTRY IrpListHead, __in_opt MdFileObject FileObject)
__drv_requiresIRQL(DISPATCH_LEVEL) VOID ProcessAcknowledgedRequests(__in FxRequest *Request
__drv_restoresIRQL KIRQL __in BOOLEAN Unlock
FxIoQueueForwardProgressExamineIrp m_IoExamineIrp
_In_ WDFREQUEST _In_ PFN_WDF_REQUEST_CANCEL EvtRequestCancel
IN PUNICODE_STRING IN POBJECT_ATTRIBUTES ObjectAttributes
__inline VOID PostRequestCompletedCallback(__in FxRequest *Request)
_Must_inspect_result_ _In_ WDFQUEUE _In_opt_ PFN_WDF_IO_QUEUE_STATE QueueReady
static EVT_SYSTEMWORKITEM _DeferredDispatchThreadThunk
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_IO_QUEUE_CONFIG _In_opt_ PWDF_OBJECT_ATTRIBUTES QueueAttributes
_Must_inspect_result_ NTSTATUS Invoke(__in WDFQUEUE Queue, __in WDFREQUEST Request)
#define _Must_inspect_result_
WDF_IO_FORWARD_PROGRESS_RESERVED_POLICY m_Policy
FX_DECLARE_VF_FUNCTION_P2(NTSTATUS, VerifyForwardRequest, _In_ FxIoQueue *, _In_ FxRequest *)
_Must_inspect_result_ _In_ WDFQUEUE _In_opt_ WDFREQUEST _In_opt_ WDFFILEOBJECT _Inout_opt_ PWDF_REQUEST_PARAMETERS Parameters
__inline VOID RemoveFromDriverOwnedList(__in FxRequest *Request)
_In_ WDFIOTARGET _In_ PWDF_REQUEST_COMPLETION_PARAMS Params
static BOOLEAN _IsValidNodeType(__in FxIoQueueNodeType NodeType)
BOOLEAN m_RequeueDeferredDispatcher
FxIoQueueForwardProgressAllocateResources m_IoResourcesAllocate
_Must_inspect_result_ _In_ WDFREQUEST _In_ WDFQUEUE _In_ PWDF_REQUEST_FORWARD_OPTIONS ForwardOptions
static _Must_inspect_result_ NTSTATUS _Create(__in PFX_DRIVER_GLOBALS DriverGlobals, __in_opt PWDF_OBJECT_ATTRIBUTES Attributes, __in PWDF_IO_QUEUE_CONFIG Config, __in_opt FxDriver *Caller, __in FxPkgIo *PkgIo, __in BOOLEAN InitialPowerStateOn, __deref_out FxIoQueue **Object)
SINGLE_LIST_ENTRY m_PowerSListEntry
#define UNREFERENCED_PARAMETER(P)
EVT_WDF_IO_QUEUE_STATE * PFN_WDF_IO_QUEUE_STATE
volatile BOOLEAN m_PowerReferenced
EVT_WDF_REQUEST_CANCEL * PFN_WDF_REQUEST_CANCEL
__inline BOOLEAN IsNodeType(__in FxIoQueueNodeType NodeType)
_Must_inspect_result_ BOOLEAN CanThreadDispatchEventsLocked(__in KIRQL PreviousIrql)
FxCallbackLock * m_CallbackLockPtr
#define __drv_restoresIRQL
_Must_inspect_result_ NTSTATUS ForwardRequest(__in FxIoQueue *pDestQueue, __in FxRequest *pRequest)
__in __drv_restoresIRQL KIRQL PreviousIrql
static __inline FxIoQueue * _FromIoPkgListEntry(__in PLIST_ENTRY Entry)
FxObject * m_CallbackLockObjectPtr
virtual BOOLEAN Dispose(VOID)
static FxIoQueueNode * _FromListEntry(__in PLIST_ENTRY Entry)
BOOLEAN IsPagingIo(__in MdIrp Irp)
virtual FxCallbackLock * GetCallbackLockPtr(__deref_out FxObject **LockObject)
_In_ WDFQUEUE _In_opt_ PFN_WDF_IO_QUEUE_STATE PurgeComplete
__inline BOOLEAN IsPowerStateNotifyingDriver(VOID)
DECLSPEC_NORETURN VOID FatalError(__in NTSTATUS Status)
_Must_inspect_result_ NTSTATUS QueueIdle(__in BOOLEAN CancelQueueRequests, __in_opt PFN_WDF_IO_QUEUE_STATE IdleComplete, __in_opt WDFCONTEXT Context)
__inline VOID SetInterruptQueue(VOID)
_Releases_lock_(this->m_SpinLock.m_Lock) VOID CancelForQueue(__in FxRequest *pRequest
FxIoQueueNode m_IoPkgListNode
__inline BOOLEAN IsPowerManaged()
PFILE_OBJECT MdFileObject
volatile LONG m_DriverIoCount
#define InsertTailList(ListHead, Entry)
WDFCONTEXT m_IdleCompleteContext
_Must_inspect_result_ NTSTATUS QueueRequest(__in FxRequest *pRequest)
PFN_WDF_IO_ALLOCATE_REQUEST_RESOURCES Method
volatile ULONG m_Dispatching
PFXIO_FORWARD_PROGRESS_CONTEXT m_FwdProgContext
_Must_inspect_result_ FORCEINLINE BOOLEAN IsListEmpty(_In_ const LIST_ENTRY *ListHead)
#define DECLSPEC_NORETURN
MxLockNoDynam m_PendedReserveLock
__inline VOID PreRequestCompletedCallback(__in FxRequest *Request)
_Must_inspect_result_ NTSTATUS ForwardRequestWorker(__in FxRequest *Request, __in FxIoQueue *DestQueue)
ULONG m_NumberOfReservedRequests
FxIoQueueIoCanceledOnQueue m_IoCanceledOnQueue
_Must_inspect_result_ NTSTATUS QueueDriverCreatedRequest(__in FxRequest *Request, __in BOOLEAN ParentQueue)
static MdCancelRoutineType _WdmCancelRoutineForReservedIrp
#define LockObject(Object, Irql)
FORCEINLINE BOOLEAN RemoveEntryList(_In_ PLIST_ENTRY Entry)
__inline VOID InsertInDriverOwnedList(__in FxRequest *Request)
_Must_inspect_result_ _In_ WDFDEVICE _In_ WDFQUEUE _In_ _Strict_type_match_ WDF_REQUEST_TYPE RequestType
FxIoQueueIoDefault m_IoDefault
__inline NTSTATUS InvokeAllocateResourcesCallback(__in FxRequest *Request)
_Must_inspect_result_ NTSTATUS QueueDrainSynchronously(VOID)
WDF_EXECUTION_LEVEL m_ExecutionLevel
_Must_inspect_result_ NTSTATUS PeekRequest(__in_opt FxRequest *TagRequest, __in_opt MdFileObject FileObject, __out_opt PWDF_REQUEST_PARAMETERS Parameters, __deref_out FxRequest **pOutRequest)
VOID PutBackReservedRequest(__in FxRequest *ReservedRequest)
#define TRACE_LEVEL_VERBOSE
VOID SetStateForShutdown(VOID)
_Must_inspect_result_ NTSTATUS GetRequest(__in_opt MdFileObject FileObject, __in_opt FxRequest *TagRequest, __deref_out FxRequest **pOutRequest)
FxIoQueueNode & operator=(const FxIoQueueNode &)
BOOLEAN m_SupportForwardProgress
FxIoQueueIoResume m_IoResume
enum _FX_IO_QUEUE_SET_STATE FX_IO_QUEUE_SET_STATE
PVOID __inline GetObjectHandle(VOID)
VOID InsertQueueDpc(VOID)
WDF_SYNCHRONIZATION_SCOPE m_SynchronizationScope
ULONG m_MaxParallelQueuePresentedRequests
static EVT_WDF_IO_QUEUE_STATE _PurgeComplete
virtual _Must_inspect_result_ NTSTATUS QueryInterface(__in FxQueryInterfaceParams *Params)
VOID GetRequestCount(__out_opt PULONG pQueuedRequests, __out_opt PULONG pDriverPendingRequests)
_Must_inspect_result_ NTSTATUS QueueIdleSynchronously(__in BOOLEAN CancelRequests)
_Must_inspect_result_ NTSTATUS _In_ FxRequest * TagRequest
LIST_ENTRY m_ReservedRequestList
FxIoQueueForwardProgressAllocateResourcesReserved m_IoReservedResourcesAllocate
__inline NTSTATUS InsertNewRequest(__in FxRequest **Request, __in KIRQL PreviousIrql)
static __inline FxIoQueue * _FromPowerSListEntry(__in PSINGLE_LIST_ENTRY Entry)
PFLT_MESSAGE_WAITER_QUEUE CONTAINING_RECORD(Csq, DEVICE_EXTENSION, IrpQueue)) -> WaiterQ.mLock) _IRQL_raises_(DISPATCH_LEVEL) VOID NTAPI FltpAcquireMessageWaiterLock(_In_ PIO_CSQ Csq, _Out_ PKIRQL Irql)
_In_ WDFREQUEST _In_ WDFFILEOBJECT FileObject
VOID CancelIrps(__in PLIST_ENTRY IrpListHead)
__inline VOID SetCxDeviceInfo(__in FxCxDeviceInfo *CxDeviceInfo)
enum _WDF_SYNCHRONIZATION_SCOPE WDF_SYNCHRONIZATION_SCOPE
_Must_inspect_result_ NTSTATUS ConfigureConstraints(__in_opt PWDF_OBJECT_ATTRIBUTES ObjectAttributes, __in_opt FxDriver *Caller)
__inline VOID SetTransitionFromEmpty(VOID)
_Must_inspect_result_ NTSTATUS AllocateReservedRequest(__deref_out FxRequest **Request)
_Must_inspect_result_ NTSTATUS ForwardRequestToParent(__in FxIoQueue *DestQueue, __in FxRequest *Request, __in PWDF_REQUEST_FORWARD_OPTIONS ForwardOptions)
VOID DeferredDispatchRequestsFromDpc(VOID)
FxCallbackSpinLock m_CallbackSpinLock
static EVT_IRP_QUEUE_CANCEL _IrpCancelForDriver
FX_DECLARE_VF_FUNCTION_P1(VOID, VerifyCancelForDriver, _In_ FxRequest *)
FxIrpQueue m_DriverCancelable
volatile BOOLEAN m_Disposing
_Must_inspect_result_ NTSTATUS QueuePurgeSynchronously(VOID)
_Must_inspect_result_ NTSTATUS Initialize(__in PWDF_IO_QUEUE_CONFIG pConfig, __in_opt PWDF_OBJECT_ATTRIBUTES QueueAttributes, __in_opt FxDriver *Caller, __in BOOLEAN InitialPowerStateOn)
BOOLEAN m_IsDevicePowerPolicyOwner
_Must_inspect_result_ NTSTATUS RequestCompleteEvent(__in FxRequest *Request)
enum _WDF_REQUEST_TYPE WDF_REQUEST_TYPE
_Must_inspect_result_ NTSTATUS GetReservedRequest(__in MdIrp Irp, __deref_out_opt FxRequest **ReservedRequest)
__inline VOID PostRemoveFromDriverOwnedList(VOID)
#define NT_SUCCESS(StatCode)
WDF_EXTERN_C_START enum _WDF_IO_QUEUE_DISPATCH_TYPE WDF_IO_QUEUE_DISPATCH_TYPE
_Must_inspect_result_ NTSTATUS __inline PowerReference(__in BOOLEAN WaitForD0, __in_opt PVOID Tag=NULL, __in_opt LONG Line=0, __in_opt PSTR File=NULL)
_Must_inspect_result_ NTSTATUS _In_ FxIoQueue * pDestQueue
enum _WDF_IO_QUEUE_STATE WDF_IO_QUEUE_STATE
FxIoQueueIoState m_IdleComplete
FxSystemWorkItem * m_SystemWorkItem
FxIoQueue(__in PFX_DRIVER_GLOBALS FxDriverGlobals, __in FxPkgIo *PkgIo)
FXIOQUEUE_POWER_STATE m_PowerState
volatile BOOLEAN m_ForceTransitionFromEmptyWhenAddingNewRequest
VOID FlushQueuedDpcs(VOID)
enum _WDF_IO_FORWARD_PROGRESS_RESERVED_POLICY WDF_IO_FORWARD_PROGRESS_RESERVED_POLICY
VOID SetState(__in FX_IO_QUEUE_SET_STATE NewStatus)
FxCallbackMutexLock m_CallbackMutexLock
_Must_inspect_result_ NTSTATUS RequestCancelable(__in FxRequest *pRequest, __in BOOLEAN Cancelable, __in_opt PFN_WDF_REQUEST_CANCEL EvtRequestCancel, __in BOOLEAN FailIfIrpIsCancelled)
WDFQUEUE __inline GetHandle(VOID)
FxIoQueueIoInternalDeviceControl m_IoInternalDeviceControl
VOID CancelForDriver(__in FxRequest *pRequest)
FX_DECLARE_VF_FUNCTION_P1_EX(, SHORT, 0, VerifyForwardRequestUpdateFlags, _In_ FxRequest *)
FxIoStopProcessingForPowerAction
_Must_inspect_result_ NTSTATUS QueueRequestFromForward(__in FxRequest *pRequest)
struct _FXIO_FORWARD_PROGRESS_CONTEXT * PFXIO_FORWARD_PROGRESS_CONTEXT
friend VOID GetTriageInfo(VOID)
VOID StopProcessingForPower(__in FxIoStopProcessingForPowerAction Action)
FxCallbackLock * m_IoCancelCallbackLockPtr
__inline BOOLEAN IsForwardProgressQueue(VOID)
static MdDeferredRoutineType _DeferredDispatchDpcThunk
VOID FlushByFileObject(__in MdFileObject FileObject)
BOOLEAN IsIoEventHandlerRegistered(__in WDF_REQUEST_TYPE RequestType)
VOID ResumeProcessingForPower(VOID)
VOID MarkNoDeleteDDI(__in FxObjectLockState State=ObjectLock)
VOID ReturnReservedRequest(__in FxRequest *ReservedRequest)
FxIoQueueIoState m_ReadyNotify
VOID ResetStateForRestart(VOID)
volatile BOOLEAN m_TransitionFromEmpty
WUDF_DRIVER_CANCEL MdCancelRoutineType
FxIoQueueIoWrite m_IoWrite
FxIoQueueNode(FxIoQueueNodeType NodeType)
_Must_inspect_result_ _In_ WDFCOLLECTION _In_ WDFOBJECT Object
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_CHILD_LIST_CONFIG Config
KDEFERRED_ROUTINE MdDeferredRoutineType
virtual VOID GetConstraints(__out WDF_EXECUTION_LEVEL *ExecutionLevel, __out WDF_SYNCHRONIZATION_SCOPE *SynchronizationScope)
_Must_inspect_result_ MdIrp GetForwardProgressIrpLocked(__in_opt PFILE_OBJECT FileObject)
NTSTATUS InsertNewRequestLocked(__deref_in FxRequest **Request, __in KIRQL PreviousIrql)
VOID DeferredDispatchRequestsFromWorkerThread(VOID)
__inline PFX_DRIVER_GLOBALS GetDriverGlobals(VOID)
VOID PurgeForwardProgressIrps(__in_opt MdFileObject FileObject)
VOID FreeAllReservedRequests(__in BOOLEAN Verify)
_In_ WDFIOTARGET _In_ _Strict_type_match_ WDF_IO_TARGET_SENT_IO_ACTION Action
__inline FxDriver * GetDriver(VOID)
_Must_inspect_result_ _In_ PWDFDEVICE_INIT _In_ WDF_DEVICE_POWER_STATE PowerState
#define InitializeListHead(ListHead)
__inline BOOLEAN IsState(__in FX_IO_QUEUE_STATE State)
__inline FxCxDeviceInfo * GetCxDeviceInfo(VOID)
__inline VOID PreRemoveFromDriverOwnedList(__in FxRequest *Request)
FX_IO_QUEUE_STATE m_QueueState
DoTraceLevelMessage(pFxDriverGlobals, TRACE_LEVEL_VERBOSE, TRACINGPNP, "Enter, WDFDEVICE %p", Device)
enum _FX_IO_QUEUE_STATE FX_IO_QUEUE_STATE
VOID StartPowerTransitionOff(VOID)
__inline VOID RequestCompletedCallback(__in FxRequest *Request)
BOOLEAN m_AllowZeroLengthRequests
_Must_inspect_result_ NTSTATUS _In_ FxIoQueue * DestQueue
volatile BOOLEAN m_CancelDispatchedRequests
__in_opt FxRequest * NewRequest
VOID VerifierVerifyFwdProgListsLocked(VOID)
__inline VOID SetPowerState(__in FXIOQUEUE_POWER_STATE PowerState)
static PVOID __inline _ToHandle(__in FxObject *Object)
__inline CfxDevice * GetDevice(VOID)
__inline FxPkgIo * GetPackage(VOID)
LIST_ENTRY m_CanceledOnQueueList
__inline BOOLEAN IsState(__in WDF_IO_QUEUE_STATE State)
_Must_inspect_result_ _In_opt_ PWDF_OBJECT_ATTRIBUTES _Out_ WDFWAITLOCK * Lock
_Must_inspect_result_ NTSTATUS Requeue(__in FxRequest *pRequest)
WDFCONTEXT m_PurgeCompleteContext
enum FxIoQueuePowerState FXIOQUEUE_POWER_STATE
WDF_EXTERN_C_START enum _WDF_EXECUTION_LEVEL WDF_EXECUTION_LEVEL
_In_ WDFQUEUE _In_opt_ PFN_WDF_IO_QUEUE_STATE DrainComplete
FxIoQueueIoDeviceControl m_IoDeviceControl
volatile LONG m_TwoPhaseCompletions
_Must_inspect_result_ NTSTATUS QueuePurge(__in BOOLEAN CancelQueueRequests, __in BOOLEAN CancelDriverRequests, __in_opt PFN_WDF_IO_QUEUE_STATE PurgeComplete, __in_opt WDFCONTEXT Context)
MxEvent m_FinishDisposing
_Must_inspect_result_ NTSTATUS AssignForwardProgressPolicy(__in PWDF_IO_QUEUE_FORWARD_PROGRESS_POLICY Policy)
volatile BOOLEAN m_Deleted
virtual _Must_inspect_result_ NTSTATUS QueryInterface(__in FxQueryInterfaceParams *Params)
VOID StartPowerTransitionOn(VOID)
static EVT_WDF_IO_QUEUE_STATE _IdleComplete
struct _FXIO_FORWARD_PROGRESS_CONTEXT FXIO_FORWARD_PROGRESS_CONTEXT
WDF_IO_QUEUE_DISPATCH_TYPE m_Type
_Must_inspect_result_ NTSTATUS ReadyNotify(__in PFN_WDF_IO_QUEUE_STATE QueueReady, __in_opt WDFCONTEXT Context)
LIST_ENTRY m_ReservedRequestInUseList
LIST_ENTRY m_PowerDriverNotified
_In_ WDFINTERRUPT _In_ WDF_INTERRUPT_POLICY Policy
WDFCONTEXT m_ReadyNotifyContext
FxCxDeviceInfo * m_CxDeviceInfo
static SERVICE_STATUS status
WDF_IO_QUEUE_STATE GetState(__out_opt PULONG pQueueCount, __out_opt PULONG pDriverCount)
MxEvent m_RequestWaitEventUm
FxIoQueueIoState m_PurgeComplete
base of all file and directory entries
_Must_inspect_result_ NTSTATUS QueueForwardProgressIrpLocked(__in MdIrp Irp)
_Must_inspect_result_ NTSTATUS QueueDrain(__in_opt PFN_WDF_IO_QUEUE_STATE DrainComplete, __in_opt WDFCONTEXT Context)
VOID DispatchRequestToDriver(__in FxRequest *pRequest)
LIST_ENTRY m_PendedIrpList
FxDriver * GetDriver(VOID)
_Must_inspect_result_ _In_ WDFDMAENABLER _In_ _In_opt_ PWDF_OBJECT_ATTRIBUTES Attributes
__inline VOID CheckTransitionFromEmpty(VOID)
static EVT_IRP_QUEUE_CANCEL _IrpCancelForQueue