90#if (FX_CORE_MODE == FX_CORE_KERNEL_MODE)
110 WUDFX_IRP_BUFFER_INFO m_OriginalBufferInfo;
330 return Device->GetAttachedDevice();
400#if (FX_CORE_MODE == FX_CORE_KERNEL_MODE)
661 EVT_WDF_REQUEST_COMPLETION_ROUTINE
691#if (FX_CORE_MODE == FX_CORE_USER_MODE)
749 if (
Request->IsAllocatedFromIo()) {
887#if (FX_CORE_MODE == FX_CORE_USER_MODE)
960#if ((FX_CORE_MODE)==(FX_CORE_KERNEL_MODE))
962#elif ((FX_CORE_MODE)==(FX_CORE_USER_MODE))
#define InterlockedIncrement
#define InterlockedDecrement
_In_ PFCB _In_ LONGLONG StartingOffset
WDFDEVICE __inline GetHandle(VOID)
NTSTATUS _Must_inspect_result_ QueryInterface(__inout FxQueryInterfaceParams *Params)
virtual _Must_inspect_result_ NTSTATUS GotoStartState(__in PLIST_ENTRY RequestListHead, __in BOOLEAN Lock=TRUE)
VOID DrainPendedRequestsLocked(__in PLIST_ENTRY RequestListHead, __in BOOLEAN RequestWillBeResent)
WDFIOTARGET GetHandle(VOID)
VOID CompleteCanceledRequest(__in FxRequestBase *Request)
VOID SetCompletionRoutine(__in FxRequestBase *Request)
static MdCompletionRoutineType _RequestCompletionRoutine
virtual VOID GotoStopState(__in WDF_IO_TARGET_SENT_IO_ACTION Action, __in PSINGLE_LIST_ENTRY SentRequestListHead, __out PBOOLEAN Wait, __in BOOLEAN LockSelf)
LIST_ENTRY m_IgnoredIoListHead
VOID FailPendedRequest(__in FxRequestBase *Request, __in NTSTATUS Status)
static VOID _CancelSentRequest(__in FxRequestBase *Request)
_Must_inspect_result_ NTSTATUS SubmitSync(__in FxRequestBase *Request, __in_opt PWDF_REQUEST_SEND_OPTIONS Options=NULL, __out_opt PULONG Action=NULL)
VOID TimerCallback(__in FxRequestBase *Request)
VOID RequestCompletionRoutine(__in FxRequestBase *Request)
ULONG SubmitLocked(__in FxRequestBase *Request, __in_opt PWDF_REQUEST_SEND_OPTIONS Options, __in ULONG Flags)
BOOLEAN m_AddedToDeviceList
__inline WDF_IO_TARGET_STATE GetState(VOID)
UCHAR GetTargetIoType(VOID)
BOOLEAN __inline HasEnoughStackLocations(__in FxIrp *Irp)
VOID HandleFailedResubmit(__in FxRequestBase *Request)
LIST_ENTRY m_SentIoListHead
_Must_inspect_result_ NTSTATUS SubmitSyncRequestIgnoreTargetState(__in FxRequestBase *Request, __in_opt PWDF_REQUEST_SEND_OPTIONS RequestOptions)
MdDeviceObject m_TargetDevice
static FxIoTarget * _FromEntry(__in FxTransactionedEntry *Entry)
MdDeviceObject m_TargetPdo
FxTransactionedEntry m_TransactionedEntry
virtual VOID WaitForDisposeEvent(VOID)
VOID UpdateTargetIoType(VOID)
virtual BOOLEAN Dispose(VOID)
__inline VOID CompleteRequest(__in FxRequestBase *Request)
MdDeviceObject m_InStackDevice
WDF_IO_TARGET_STATE m_State
__inline VOID CopyFileObjectAndFlags(__in FxRequestBase *Request)
FX_DECLARE_VF_FUNCTION_P1(NTSTATUS, VerifySubmitLocked, _In_ FxRequestBase *)
FxCREvent m_DisposeEventUm
VOID SubmitPendedRequests(__in PLIST_ENTRY RequestListHeadHead)
__inline WDFDEVICE GetDeviceHandle(VOID)
_Must_inspect_result_ NTSTATUS PendRequestLocked(__in FxRequestBase *Request)
VOID CompletePendedRequest(__in FxRequestBase *Request)
BOOLEAN HasValidStackSize(VOID)
__inline VOID DecrementIoCount(VOID)
VOID CompletePendedRequestList(__in PLIST_ENTRY RequestListHead)
virtual VOID ClearTargetPointers(VOID)
__inline MdDeviceObject GetTargetPDO(VOID)
BOOLEAN RemoveCompletedRequestLocked(__in FxRequestBase *Request)
_Must_inspect_result_ NTSTATUS FormatInternalIoctlOthersRequest(__in FxRequestBase *Request, __in ULONG Ioctl, __in FxRequestBuffer *Buffers)
virtual _Must_inspect_result_ MdDeviceObject GetTargetDeviceObject(_In_ CfxDeviceBase *Device)
static VOID _CancelSentRequests(__in PSINGLE_LIST_ENTRY RequestListHead)
static VOID _RequestCancelled(__in FxIrpQueue *Queue, __in MdIrp Irp, __in PMdIoCsqIrpContext pCsqContext, __in KIRQL CallerIrql)
FxCREvent * m_DisposeEvent
virtual VOID GotoPurgeState(__in WDF_IO_TARGET_PURGE_IO_ACTION Action, __in PLIST_ENTRY PendedRequestListHead, __in PSINGLE_LIST_ENTRY SentRequestListHead, __out PBOOLEAN Wait, __in BOOLEAN LockSelf)
VOID SubmitPendedRequest(__in FxRequestBase *Request)
virtual VOID Send(_In_ MdIrp Irp)
__inline FxDriver * GetDriver(VOID)
static const PVOID m_SentRequestTag
static EVT_WDF_REQUEST_COMPLETION_ROUTINE _SyncCompletionRoutine
__inline MdDeviceObject GetTargetDevice(VOID)
_Must_inspect_result_ NTSTATUS InitModeSpecific(__in CfxDeviceBase *Device)
_Must_inspect_result_ NTSTATUS FormatIoctlRequest(__in FxRequestBase *Request, __in ULONG Ioctl, __in BOOLEAN Internal, __in FxRequestBuffer *InputBuffer, __in FxRequestBuffer *OutputBuffer, __in_opt FxFileObject *FileObject=NULL)
BOOLEAN m_WaitingForSentIo
virtual VOID GotoRemoveState(__in WDF_IO_TARGET_STATE NewState, __in PLIST_ENTRY PendedRequestListHead, __in PSINGLE_LIST_ENTRY SentRequestListHead, __in BOOLEAN Lock, __out PBOOLEAN Wait)
__inline VOID IncrementIoCount(VOID)
ULONG Submit(__in FxRequestBase *Request, __in_opt PWDF_REQUEST_SEND_OPTIONS Options, __in_opt ULONG Flags)
VOID ClearCompletedRequestVerifierFlags(__in FxRequestBase *Request)
virtual VOID Forward(__in MdIrp Irp)
__inline MdFileObject GetTargetFileObject(VOID)
VOID GetSentRequestsListLocked(__in PSINGLE_LIST_ENTRY RequestListHead, __in PLIST_ENTRY SendList, __out PBOOLEAN AddedToList)
VOID PrintDisposeMessage(VOID)
virtual VOID Purge(__in WDF_IO_TARGET_PURGE_IO_ACTION Action)
virtual VOID WaitForSentIoToComplete(VOID)
_Must_inspect_result_ NTSTATUS FormatIoRequest(__inout FxRequestBase *Request, __in UCHAR MajorCode, __in FxRequestBuffer *IoBuffer, __in_opt PLONGLONG StartingOffset, __in_opt FxFileObject *FileObject=NULL)
MdFileObject m_TargetFileObject
UCHAR GetCurrentStackFlags(VOID)
VOID SetCompletionRoutineEx(__in MdDeviceObject DeviceObject, __in MdCompletionRoutine CompletionRoutine, __in PVOID Context, __in BOOLEAN InvokeOnSuccess=TRUE, __in BOOLEAN InvokeOnError=TRUE, __in BOOLEAN InvokeOnCancel=TRUE)
MdFileObject GetCurrentStackFileObject(VOID)
VOID SetNextStackFlags(__in UCHAR Flags)
VOID SetNextStackFileObject(_In_ MdFileObject FileObject)
__inline PFX_DRIVER_GLOBALS GetDriverGlobals(VOID)
static __inline KIRQL MxGetCurrentIrql()
return pObject GetObjectHandle()
MxDeviceObject deviceObject
@ SubmitSyncCallCompletion
_Must_inspect_result_ __in WDFIOTARGET __in_opt WDFREQUEST __in ULONG Ioctl
__in MdIrp __in PMdIoCsqIrpContext pCsqContext
__in MdIrp __in PMdIoCsqIrpContext __in KIRQL CallerIrql
@ FXREQUEST_FLAG_SENT_TO_TARGET
#define FX_REQUEST_NUM_OTHER_PARAMS
@ FX_RCT_INTERNAL_IOCTL_OTHERS
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
_In_opt_ PVOID _Out_ BOOLEAN * Stop
PFILE_OBJECT MdFileObject
WUDF_IO_COMPLETION_ROUTINE MdCompletionRoutineType
#define _Must_inspect_result_
#define _In_reads_bytes_opt_(s)
#define UNREFERENCED_PARAMETER(P)
__GNU_EXTENSION typedef __int64 * PLONGLONG
base of all file and directory entries
NTSTATUS EnterCRAndWaitAndLeave(VOID)
virtual VOID ReleaseAndRestore(__in FxRequestBase *Request)
FxInternalIoctlOthersContext(VOID)
virtual VOID StoreAndReferenceMemory(__in FxRequestBuffer *Buffer)
VOID StoreAndReferenceOtherMemories(__in FxRequestBuffer *Buffer1, __in FxRequestBuffer *Buffer2, __in FxRequestBuffer *Buffer4)
IFxMemory * m_MemoryObjects[FX_REQUEST_NUM_OTHER_PARAMS-1]
PVOID m_OriginalSystemBuffer
PFX_DRIVER_GLOBALS m_DriverGlobals
VOID StoreAndReferenceOtherMemory(__in FxRequestBuffer *Buffer)
virtual ~FxIoContext(VOID)
VOID SwapIrpBuffer(_In_ FxRequestBase *Request, _In_ ULONG NewInputBufferCb, _In_reads_bytes_opt_(NewInputBufferCb) PVOID NewInputBuffer, _In_ ULONG NewOutputBufferCb, _In_reads_bytes_opt_(NewOutputBufferCb) PVOID NewOutputBuffer)
IFxMemory * m_OtherMemory
BOOLEAN m_CopyBackToBuffer
PVOID m_OriginalUserBuffer
VOID SetBufferAndLength(__in PVOID Buffer, __in size_t BufferLength, __in BOOLEAN CopyBackToBuffer)
size_t m_BufferToFreeLength
VOID CaptureState(__in FxIrp *Irp)
virtual VOID ReleaseAndRestore(__in FxRequestBase *Request)
VOID CopyParameters(__in FxRequestBase *Request)
virtual VOID ReleaseAndRestore(__in FxRequestBase *Request)
virtual VOID StoreAndReferenceMemory(__in FxRequestBuffer *Buffer)
static VOID _StoreAndReferenceMemoryWorker(__in PVOID Tag, __deref_out_opt IFxMemory **PPMemory, __in FxRequestBuffer *Buffer)
WDFCONTEXT OrigTargetCompletionContext
PFN_WDF_REQUEST_COMPLETION_ROUTINE OrigTargetCompletionRoutine
#define RtlZeroMemory(Destination, Length)
#define CONTAINING_RECORD(address, type, field)
_Must_inspect_result_ _In_ WDFDEVICE Device
_In_ WDFREQUEST _In_ WDFFILEOBJECT FileObject
_Must_inspect_result_ _In_ WDFDEVICE _In_ PIRP _In_ WDFQUEUE Queue
_In_ PWDFDEVICE_INIT _In_ PWDF_REMOVE_LOCK_OPTIONS Options
_Must_inspect_result_ _In_ WDFDEVICE _In_ DEVICE_REGISTRY_PROPERTY _In_ ULONG BufferLength
_In_ WDFDPC _In_ BOOLEAN Wait
enum _WDF_IO_TARGET_PURGE_IO_ACTION WDF_IO_TARGET_PURGE_IO_ACTION
enum _WDF_IO_TARGET_SENT_IO_ACTION WDF_IO_TARGET_SENT_IO_ACTION
_Must_inspect_result_ _In_ WDFIOTARGET _In_opt_ WDFREQUEST _In_opt_ PWDF_MEMORY_DESCRIPTOR OutputBuffer
_In_ WDFIOTARGET _In_ _Strict_type_match_ WDF_IO_TARGET_SENT_IO_ACTION Action
WDF_EXTERN_C_START enum _WDF_IO_TARGET_STATE WDF_IO_TARGET_STATE
_Must_inspect_result_ _In_ WDFIOTARGET _In_opt_ WDFREQUEST _In_opt_ PWDF_MEMORY_DESCRIPTOR InputBuffer
_Must_inspect_result_ _In_ WDFIOTARGET _In_opt_ WDFREQUEST _In_opt_ PWDF_MEMORY_DESCRIPTOR _In_opt_ PLONGLONG _In_opt_ PWDF_REQUEST_SEND_OPTIONS RequestOptions
_In_ WDFIOTARGET _In_ PWDF_REQUEST_COMPLETION_PARAMS Params
EVT_WDF_REQUEST_COMPLETION_ROUTINE * PFN_WDF_REQUEST_COMPLETION_ROUTINE
_Must_inspect_result_ _In_opt_ PWDF_OBJECT_ATTRIBUTES _Out_ WDFWAITLOCK * Lock
_Must_inspect_result_ _In_ ULONG Flags