28 #ifndef _FXIOTARGET_H_ 29 #define _FXIOTARGET_H_ 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) 412 #else // FX_CORE_USER_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)) 966 #endif //_FXIOTARGET_H_ __in MdIrp __in PMdIoCsqIrpContext __in KIRQL CallerIrql
MdDeviceObject m_TargetDevice
WDFCONTEXT OrigTargetCompletionContext
enum _WDF_IO_TARGET_PURGE_IO_ACTION WDF_IO_TARGET_PURGE_IO_ACTION
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)
_Must_inspect_result_ _In_ WDFDEVICE _In_ DEVICE_REGISTRY_PROPERTY _In_ ULONG BufferLength
PVOID m_OriginalUserBuffer
__inline WDFDEVICE GetDeviceHandle(VOID)
__in MdIrp __in PMdIoCsqIrpContext pCsqContext
VOID CompletePendedRequestList(__in PLIST_ENTRY RequestListHead)
struct png_info_def **typedef void(__cdecl typeof(png_destroy_read_struct))(struct png_struct_def **
FxTransactionedEntry m_TransactionedEntry
UCHAR GetCurrentStackFlags(VOID)
VOID PrintDisposeMessage(VOID)
_In_ PFCB _In_ LONGLONG StartingOffset
_In_ WDFIOTARGET _In_ PWDF_REQUEST_COMPLETION_PARAMS Params
WUDF_IO_COMPLETION_ROUTINE MdCompletionRoutineType
_Must_inspect_result_ NTSTATUS PendRequestLocked(__in FxRequestBase *Request)
#define UNREFERENCED_PARAMETER(P)
WDFDEVICE __inline GetHandle(VOID)
virtual BOOLEAN Dispose(VOID)
_Must_inspect_result_ _In_ WDFDEVICE _In_ PIRP _In_ WDFQUEUE Queue
_In_ WDFDPC _In_ BOOLEAN Wait
_Must_inspect_result_ NTSTATUS FormatInternalIoctlOthersRequest(__in FxRequestBase *Request, __in ULONG Ioctl, __in FxRequestBuffer *Buffers)
static EVT_WDF_REQUEST_COMPLETION_ROUTINE _SyncCompletionRoutine
__inline VOID CopyFileObjectAndFlags(__in FxRequestBase *Request)
BOOLEAN m_WaitingForSentIo
__inline WDF_IO_TARGET_STATE GetState(VOID)
virtual VOID Forward(__in MdIrp Irp)
VOID DrainPendedRequestsLocked(__in PLIST_ENTRY RequestListHead, __in BOOLEAN RequestWillBeResent)
#define FX_REQUEST_NUM_OTHER_PARAMS
_Must_inspect_result_ NTSTATUS SubmitSync(__in FxRequestBase *Request, __in_opt PWDF_REQUEST_SEND_OPTIONS Options=NULL, __out_opt PULONG Action=NULL)
VOID ClearCompletedRequestVerifierFlags(__in FxRequestBase *Request)
VOID GetSentRequestsListLocked(__in PSINGLE_LIST_ENTRY RequestListHead, __in PLIST_ENTRY SendList, __out PBOOLEAN AddedToList)
PFILE_OBJECT MdFileObject
virtual VOID ReleaseAndRestore(__in FxRequestBase *Request)
VOID CompletePendedRequest(__in FxRequestBase *Request)
__inline MdDeviceObject GetTargetPDO(VOID)
VOID FailPendedRequest(__in FxRequestBase *Request, __in NTSTATUS Status)
__inline MdFileObject GetTargetFileObject(VOID)
virtual ~FxIoContext(VOID)
_Must_inspect_result_ NTSTATUS InitModeSpecific(__in CfxDeviceBase *Device)
WDF_IO_TARGET_STATE m_State
virtual VOID StoreAndReferenceMemory(__in FxRequestBuffer *Buffer)
ULONG Submit(__in FxRequestBase *Request, __in_opt PWDF_REQUEST_SEND_OPTIONS Options, __in_opt ULONG Flags)
MdDeviceObject m_InStackDevice
size_t m_BufferToFreeLength
__inline VOID IncrementIoCount(VOID)
_Must_inspect_result_ __in WDFIOTARGET __in_opt WDFREQUEST __in ULONG Ioctl
enum _WDF_IO_TARGET_SENT_IO_ACTION WDF_IO_TARGET_SENT_IO_ACTION
__GNU_EXTENSION typedef __int64 * PLONGLONG
static VOID _CancelSentRequest(__in FxRequestBase *Request)
WDFIOTARGET GetHandle(VOID)
FxCREvent m_DisposeEventUm
_Must_inspect_result_ NTSTATUS SubmitSyncRequestIgnoreTargetState(__in FxRequestBase *Request, __in_opt PWDF_REQUEST_SEND_OPTIONS RequestOptions)
VOID UpdateTargetIoType(VOID)
BOOLEAN m_AddedToDeviceList
_Must_inspect_result_ NTSTATUS FormatIoRequest(__inout FxRequestBase *Request, __in UCHAR MajorCode, __in FxRequestBuffer *IoBuffer, __in_opt PLONGLONG StartingOffset, __in_opt FxFileObject *FileObject=NULL)
PVOID __inline GetObjectHandle(VOID)
PFX_DRIVER_GLOBALS m_DriverGlobals
virtual VOID ReleaseAndRestore(__in FxRequestBase *Request)
NTSTATUS EnterCRAndWaitAndLeave(VOID)
FxIoTarget(__in PFX_DRIVER_GLOBALS FxDriverGlobals, __in USHORT ObjectSize)
MdFileObject m_TargetFileObject
EVT_WDF_REQUEST_COMPLETION_ROUTINE * PFN_WDF_REQUEST_COMPLETION_ROUTINE
MdDeviceObject m_TargetPdo
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
virtual VOID Remove(VOID)
_Must_inspect_result_ _In_ WDFIOTARGET _In_opt_ WDFREQUEST _In_opt_ PWDF_MEMORY_DESCRIPTOR OutputBuffer
VOID RequestCompletionRoutine(__in FxRequestBase *Request)
virtual VOID ReleaseAndRestore(__in FxRequestBase *Request)
_Must_inspect_result_ _In_ WDFIOTARGET _In_opt_ WDFREQUEST _In_opt_ PWDF_MEMORY_DESCRIPTOR InputBuffer
VOID SetCompletionRoutineEx(__in MdDeviceObject DeviceObject, __in MdCompletionRoutine CompletionRoutine, __in PVOID Context, __in BOOLEAN InvokeOnSuccess=TRUE, __in BOOLEAN InvokeOnError=TRUE, __in BOOLEAN InvokeOnCancel=TRUE)
__inline MdDeviceObject GetTargetDevice(VOID)
UCHAR GetTargetIoType(VOID)
_In_ PWDFDEVICE_INIT _In_ PWDF_REMOVE_LOCK_OPTIONS Options
IFxMemory * m_MemoryObjects[FX_REQUEST_NUM_OTHER_PARAMS-1]
_Must_inspect_result_ _In_ ULONG Flags
WDF_EXTERN_C_START enum _WDF_IO_TARGET_STATE WDF_IO_TARGET_STATE
VOID CopyParameters(__in FxRequestBase *Request)
static FxIoTarget * _FromEntry(__in FxTransactionedEntry *Entry)
BOOLEAN HasValidStackSize(VOID)
__inline VOID CompleteRequest(__in FxRequestBase *Request)
BOOLEAN __inline HasEnoughStackLocations(__in FxIrp *Irp)
PFN_WDF_REQUEST_COMPLETION_ROUTINE OrigTargetCompletionRoutine
VOID TimerCallback(__in FxRequestBase *Request)
virtual VOID GotoStopState(__in WDF_IO_TARGET_SENT_IO_ACTION Action, __in PSINGLE_LIST_ENTRY SentRequestListHead, __out PBOOLEAN Wait, __in BOOLEAN LockSelf)
static __inline KIRQL MxGetCurrentIrql()
VOID CompleteCanceledRequest(__in FxRequestBase *Request)
BOOLEAN RemoveCompletedRequestLocked(__in FxRequestBase *Request)
static const PVOID m_SentRequestTag
VOID SetNextStackFlags(__in UCHAR Flags)
VOID SetBufferAndLength(__in PVOID Buffer, __in size_t BufferLength, __in BOOLEAN CopyBackToBuffer)
#define InterlockedDecrement
_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)
VOID HandleFailedResubmit(__in FxRequestBase *Request)
LIST_ENTRY m_SentIoListHead
virtual VOID Purge(__in WDF_IO_TARGET_PURGE_IO_ACTION Action)
virtual _Must_inspect_result_ NTSTATUS Start(VOID)
__inline FxDriver * GetDriver(VOID)
virtual VOID StoreAndReferenceMemory(__in FxRequestBuffer *Buffer)
#define _Must_inspect_result_
_Must_inspect_result_ _In_ WDFDEVICE Device
FxCREvent * m_DisposeEvent
virtual VOID ClearTargetPointers(VOID)
static MdCompletionRoutineType _RequestCompletionRoutine
MxDeviceObject deviceObject
NTSTATUS _Must_inspect_result_ QueryInterface(__inout FxQueryInterfaceParams *Params)
_Must_inspect_result_ NTSTATUS Init(__in CfxDeviceBase *Device)
static VOID _RequestCancelled(__in FxIrpQueue *Queue, __in MdIrp Irp, __in PMdIoCsqIrpContext pCsqContext, __in KIRQL CallerIrql)
virtual VOID WaitForSentIoToComplete(VOID)
virtual _Must_inspect_result_ MdDeviceObject GetTargetDeviceObject(_In_ CfxDeviceBase *Device)
virtual _Must_inspect_result_ NTSTATUS GotoStartState(__in PLIST_ENTRY RequestListHead, __in BOOLEAN Lock=TRUE)
ULONG SubmitLocked(__in FxRequestBase *Request, __in_opt PWDF_REQUEST_SEND_OPTIONS Options, __in ULONG Flags)
FxInternalIoctlOthersContext(VOID)
__inline PFX_DRIVER_GLOBALS GetDriverGlobals(VOID)
#define InterlockedIncrement
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_ WDFIOTARGET _In_ _Strict_type_match_ WDF_IO_TARGET_SENT_IO_ACTION Action
virtual VOID WaitForDisposeEvent(VOID)
virtual VOID GotoRemoveState(__in WDF_IO_TARGET_STATE NewState, __in PLIST_ENTRY PendedRequestListHead, __in PSINGLE_LIST_ENTRY SentRequestListHead, __in BOOLEAN Lock, __out PBOOLEAN Wait)
static VOID _CancelSentRequests(__in PSINGLE_LIST_ENTRY RequestListHead)
VOID SubmitPendedRequest(__in FxRequestBase *Request)
VOID StoreAndReferenceOtherMemories(__in FxRequestBuffer *Buffer1, __in FxRequestBuffer *Buffer2, __in FxRequestBuffer *Buffer4)
static VOID _StoreAndReferenceMemoryWorker(__in PVOID Tag, __deref_out_opt IFxMemory **PPMemory, __in FxRequestBuffer *Buffer)
VOID SetCompletionRoutine(__in FxRequestBase *Request)
VOID SetNextStackFileObject(_In_ MdFileObject FileObject)
IFxMemory * m_OtherMemory
LIST_ENTRY m_IgnoredIoListHead
#define _In_reads_bytes_opt_(size)
_Must_inspect_result_ _In_ WDFIOTARGET _In_opt_ WDFREQUEST _In_opt_ PWDF_MEMORY_DESCRIPTOR _In_opt_ PLONGLONG _In_opt_ PWDF_REQUEST_SEND_OPTIONS RequestOptions
_Must_inspect_result_ _In_opt_ PWDF_OBJECT_ATTRIBUTES _Out_ WDFWAITLOCK * Lock
#define RtlZeroMemory(Destination, Length)
VOID CaptureState(__in FxIrp *Irp)
virtual VOID Send(_In_ MdIrp Irp)
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)
BOOLEAN m_CopyBackToBuffer
FX_DECLARE_VF_FUNCTION_P1(NTSTATUS, VerifySubmitLocked, _In_ FxRequestBase *)
__inline VOID DecrementIoCount(VOID)
PVOID m_OriginalSystemBuffer
VOID SubmitPendedRequests(__in PLIST_ENTRY RequestListHeadHead)
MdFileObject GetCurrentStackFileObject(VOID)
base of all file and directory entries
VOID StoreAndReferenceOtherMemory(__in FxRequestBuffer *Buffer)
virtual VOID Stop(__in WDF_IO_TARGET_SENT_IO_ACTION Action)