ReactOS  0.4.15-dev-3303-g1ade494
fxpkgio.cpp File Reference
#include "ioprivshared.hpp"
Include dependency graph for fxpkgio.cpp:

Go to the source code of this file.

Functions

_Must_inspect_result_ NTSTATUS FX_VF_METHOD (FxPkgIo, VerifyDispatchContext)(_In_ PFX_DRIVER_GLOBALS FxDriverGlobals
 
 PAGED_CODE_LOCKED ()
 
 for (next=m_DynamicDispatchInfoListHead.Flink;next !=&m_DynamicDispatchInfoListHead;next=next->Flink)
 
 if (FALSE==ctxValid)
 
_Must_inspect_result_ NTSTATUS FX_VF_METHOD (FxPkgIo, VerifyEnqueueRequestUpdateFlags)(_In_ PFX_DRIVER_GLOBALS FxDriverGlobals
 
 if (NT_SUCCESS(status))
 
Request Unlock (irql)
 
VOID FX_VF_METHOD (FxPkgIo, VerifyEnqueueRequestRestoreFlags)(_In_ PFX_DRIVER_GLOBALS FxDriverGlobals
 
Request ClearVerifierFlagsLocked (~OrigVerifierFlags)
 
Request SetVerifierFlagsLocked (OrigVerifierFlags)
 
static VOID GetIoQueueList_ProcessQueueListEntry (PLIST_ENTRY QueueLE, PSINGLE_LIST_ENTRY SListHead, PVOID Tag)
 

Variables

_Must_inspect_result_ NTSTATUS _In_ WDFCONTEXT DispatchContext
 
BOOLEAN ctxValid
 
PLIST_ENTRY next
 
return status = Request->VerifyRequestIsInCallerContext(FxDriverGlobals)
 
_Must_inspect_result_ NTSTATUS _In_ FxRequestRequest
 
_Must_inspect_result_ NTSTATUS _In_ FxRequest _Inout_ SHORTOrigVerifierFlags
 
KIRQL irql
 

Function Documentation

◆ ClearVerifierFlagsLocked()

Request ClearVerifierFlagsLocked ( OrigVerifierFlags)

◆ for()

for ( next  = m_DynamicDispatchInfoListHead.Flink; next != &m_DynamicDispatchInfoListHead; next = next->Flink)

Definition at line 141 of file fxpkgio.cpp.

143  {
144  if ((PLIST_ENTRY)DispatchContext == next) {
145  ctxValid = TRUE;
146  break;
147  }
148  }
_In_ UCHAR _In_ UCHAR _In_ ULONG _In_ WDFCONTEXT _Inout_ PIRP _In_ WDFCONTEXT DispatchContext
Definition: wdfdevice.h:1697
#define TRUE
Definition: types.h:120
PLIST_ENTRY next
Definition: fxpkgio.cpp:130
BOOLEAN ctxValid
Definition: fxpkgio.cpp:129
Definition: typedefs.h:119

◆ FX_VF_METHOD() [1/3]

_Must_inspect_result_ NTSTATUS FX_VF_METHOD ( FxPkgIo  ,
VerifyDispatchContext   
)

◆ FX_VF_METHOD() [2/3]

_Must_inspect_result_ NTSTATUS FX_VF_METHOD ( FxPkgIo  ,
VerifyEnqueueRequestUpdateFlags   
)

◆ FX_VF_METHOD() [3/3]

VOID FX_VF_METHOD ( FxPkgIo  ,
VerifyEnqueueRequestRestoreFlags   
)

◆ GetIoQueueList_ProcessQueueListEntry()

static VOID GetIoQueueList_ProcessQueueListEntry ( PLIST_ENTRY  QueueLE,
PSINGLE_LIST_ENTRY  SListHead,
PVOID  Tag 
)
static

Definition at line 1451 of file fxpkgio.cpp.

1456 {
1457  FxIoQueueNode* listNode;
1458  FxIoQueue* queue;
1459 
1460  //
1461  // Skip any nodes that are not queues. They can be bookmarks for
1462  // in-progress flush operations.
1463  //
1464  listNode = FxIoQueueNode::_FromListEntry(QueueLE);
1465  if (listNode->IsNodeType(FxIoQueueNodeTypeQueue) == FALSE) {
1466  return;
1467  }
1468 
1470  PushEntryList(SListHead, &queue->m_PowerSListEntry);
1471 
1472  //
1473  // Add a reference since the request will be touched outside of the
1474  // lock being held. We will use the enumerant value as the tag.
1475  //
1476  queue->ADDREF(Tag);
1477 }
FxIoQueue * queue
__inline BOOLEAN IsNodeType(__in FxIoQueueNodeType NodeType)
Definition: fxioqueue.hpp:117
static __inline FxIoQueue * _FromIoPkgListEntry(__in PLIST_ENTRY Entry)
Definition: fxioqueue.hpp:1216
static FxIoQueueNode * _FromListEntry(__in PLIST_ENTRY Entry)
Definition: fxioqueue.hpp:98
FORCEINLINE VOID PushEntryList(_Inout_ PSINGLE_LIST_ENTRY ListHead, _Inout_ __drv_aliasesMem PSINGLE_LIST_ENTRY Entry)
Definition: rtlfuncs.h:253
#define FALSE
Definition: types.h:117
Definition: _queue.h:59
_Must_inspect_result_ _In_ WDFDEVICE _In_ BOOLEAN _In_opt_ PVOID Tag
Definition: wdfdevice.h:4061

Referenced by FxPkgIo::GetIoQueueListLocked().

◆ if() [1/2]

if ( FALSE  = ctxValid)

Definition at line 150 of file fxpkgio.cpp.

150  {
153  FxDriverGlobals, TRACE_LEVEL_ERROR, TRACINGIO,
154  "DispatchContext 0x%p is invalid, %!STATUS!",
156  FxVerifierDbgBreakPoint(FxDriverGlobals);
157  }
_In_ UCHAR _In_ UCHAR _In_ ULONG _In_ WDFCONTEXT _Inout_ PIRP _In_ WDFCONTEXT DispatchContext
Definition: wdfdevice.h:1697
#define STATUS_INVALID_PARAMETER
Definition: udferr_usr.h:135
#define TRACE_LEVEL_ERROR
Definition: storswtr.h:27
DoTraceLevelMessage(pFxDriverGlobals, TRACE_LEVEL_VERBOSE, TRACINGPNP, "Enter, WDFDEVICE %p", Device)
#define TRACINGIO
Definition: dbgtrace.h:66
FxVerifierDbgBreakPoint(pFxDriverGlobals)
Definition: ps.c:97

◆ if() [2/2]

if ( NT_SUCCESS(status )

Definition at line 569 of file fxpkgio.cpp.

569  {
570  status = Request->VerifyRequestIsDriverOwned(FxDriverGlobals);
571  }
_In_ WDFREQUEST Request
Definition: wdfdevice.h:547
Definition: ps.c:97

◆ PAGED_CODE_LOCKED()

PAGED_CODE_LOCKED ( )

◆ SetVerifierFlagsLocked()

Request SetVerifierFlagsLocked ( OrigVerifierFlags  )

◆ Unlock()

Request Unlock ( irql  )

Variable Documentation

◆ ctxValid

ctxValid
Initial value:
&m_DynamicDispatchInfoListHead ?
struct _LIST_ENTRY * PLIST_ENTRY
_In_ UCHAR _In_ UCHAR _In_ ULONG _In_ WDFCONTEXT _Inout_ PIRP _In_ WDFCONTEXT DispatchContext
Definition: wdfdevice.h:1697
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117

Definition at line 129 of file fxpkgio.cpp.

Referenced by for(), and VerifyWdfDeviceWdmDispatchIrp().

◆ DispatchContext

Initial value:
{
LONG NTSTATUS
Definition: precomp.h:26
#define STATUS_SUCCESS
Definition: shellext.h:65
Definition: ps.c:97

Definition at line 127 of file fxpkgio.cpp.

◆ irql

◆ next

Definition at line 130 of file fxpkgio.cpp.

Referenced by FxPkgIo::ConfigureDynamicDispatching(), for(), and FxPkgIo::~FxPkgIo().

◆ OrigVerifierFlags

VOID _In_ FxRequest _In_ SHORT OrigVerifierFlags
Initial value:
{
LONG NTSTATUS
Definition: precomp.h:26
#define STATUS_SUCCESS
Definition: shellext.h:65
Definition: ps.c:97

Definition at line 557 of file fxpkgio.cpp.

◆ Request

Definition at line 554 of file fxpkgio.cpp.

◆ status