85 "WDFDMATRANSACTION %p state %!FxDmaTransactionState! "
124 "Enter WDFDMATRANSACTION %p",
GetHandle());
133 "WDFDMATRANSACTION %p state %!FxDmaTransactionState! "
179 "Exit WDFDMATRANSACTION %p, %!STATUS!",
200 "WDFDMATRANSACTION %p state %!FxDmaTransactionState! "
261 WDFDMATRANSACTION dmaTransaction;
274 "Enter WDFDMATRANSACTION %p, length %d",
283 "WDFDMATRANSACTION %p state %!FxDmaTransactionState! "
284 "is invalid", dmaTransaction,
m_State);
295 "WDFDMATRANSACTION %p Transfered Length %I64d can't be more "
296 "than the length asked to transfer %I64d "
386 "WDFDMATRANSACTION %p completed with status %!STATUS! - "
387 "releasing DMA resources",
400 hasTransitioned =
TRUE;
402 hasTransitioned =
FALSE;
409 "Exit WDFDMATRANSACTION %p "
410 "Transitioned(%!BOOLEAN!)",
411 dmaTransaction, hasTransitioned);
414 return hasTransitioned;
424 if (ForceRelease ==
FALSE)
434 "WDFDMATRANSACTION %p is already released, "
445 "WDFDMATRANSACTION %p state %!FxDmaTransactionState! "
496 "Must set immediate execution flag for WDFDMATRANSACTION "
497 "%p before calling AllocateResources or Execute (current "
498 "state is %!FxDmaTransactionState!)",
506 m_Flags |= DMA_SYNCHRONOUS_CALLBACK;
509 m_Flags &= ~DMA_SYNCHRONOUS_CALLBACK;
526 "WDFDMATRANSACTION %p cannot be cancelled in state "
527 "%!FxDmaTransactionState!",
564 __in size_t CurrentOffset,
567 __out size_t *NextOffset
590 size_t transfered, mdlSize;
595 if (Transferred < mdlSize) {
600 *NextOffset = CurrentOffset + Transferred;
608 transfered = Transferred - mdlSize;
626 *NextOffset = transfered;
635 __in size_t CurrentOffset,
673 ULONG requiredMapRegisters;
674 ULONG transferLength;
677 ULONG possTransferLength;
684 mdlLength = transferLength;
687 requiredMapRegisters = 0;
688 possTransferLength = 0;
701 while (transferLength < Length && tempMdl->Next !=
NULL) {
707 requiredMapRegisters += (pageOffset + mdlLength +
PAGE_SIZE - 1) >>
710 if (requiredMapRegisters <= AvailableMapRegisters) {
711 possTransferLength = transferLength;
714 tempMdl = tempMdl->Next;
715 pageOffset = tempMdl->ByteOffset;
716 mdlLength = tempMdl->ByteCount;
717 transferLength += mdlLength;
732 requiredMapRegisters += (pageOffset +
Length + mdlLength - transferLength +
735 if (requiredMapRegisters <= AvailableMapRegisters) {
736 possTransferLength += (
Length + mdlLength - transferLength);
739 if (PossibleTransferLength !=
NULL) {
740 *PossibleTransferLength = possTransferLength;
743 ASSERT(*PossibleTransferLength);
745 *MapRegistersRequired = requiredMapRegisters;
786 if (pTransaction ==
NULL) {
790 "Could not allocate memory for WDFTRANSACTION, %!STATUS!",
status);
806 &
DmaEnabler->m_SGList.ScatterGatherProfile.Lookaside
812 "Unable to allocate memory for SG List, "
813 "WDFDMATRANSACTION %p, %!STATUS! ",
872 ULONG mapRegistersRequired;
873 size_t remLength, transferLength, transferred, possibleLength=0;
894 while (remLength != 0) {
898 (
ULONG) transferLength,
906 (
ULONG) transferLength,
909 &mapRegistersRequired
915 "CalculateScatterGatherList failed for "
924 "WDFDMATRANSACTION %p for MDL %p is more fragmented (%d) "
925 "than the limit (%I64d) specified by the driver, %!STATUS! ",
926 GetHandle(), nextMdl, mapRegistersRequired,
931 transferred += transferLength;
932 remLength -= transferLength;
971 ULONG mapRegistersRequired;
972 WDFDMATRANSACTION dmaTransaction;
979 mapRegistersRequired = 0xFFFFFFFF;
990 "Enter WDFDMATRANSACTION %p ",
GetHandle());
1017 &mapRegistersRequired);
1031 "WDFDMATRANSACTION %p for MDL %p is more fragmented (%d) "
1032 "than the limit (%I64d) specified by the driver, %!STATUS! ",
1065 "Build or GetScatterGatherList failed for "
1066 "WDFDMATRANSACTION %p, %!STATUS!",
1083 "Exit WDFDMATRANSACTION %p, "
1084 "%!STATUS!", dmaTransaction,
status);
1100 WDFDMATRANSACTION dmaTransaction;
1108 dmaTransaction = pDmaTransaction->
GetHandle();
1112 "Enter WDFDMATRANSACTION %p",
1137 "Exit WDFDMATRANSACTION %p",
1206 if (pTransaction ==
NULL) {
1210 "Could not allocate memory for WDFTRANSACTION, %!STATUS!",
status);
1239 LockTransferState(&oldIrql);
1241 UnlockTransferState(oldIrql);
1294 WDFDMATRANSACTION dmaTransaction =
GetHandle();
1298 "Enter WDFDMATRANSACTION %p", dmaTransaction);
1312 "RequiredMapRegisters cannot be 0 because "
1313 "WDFDMATRANSACTION %p is not initialized ("
1314 "state is %!FxDmaTransactionState!) - %!STATUS!",
1329 "WDFDMATRANSACTION %p state %!FxDmaTransactionState! "
1330 "is invalid", dmaTransaction,
m_State);
1344 "WDFDMATRANSACTION %p already has allocated map registers.",
1457 "Exit WDFDMATRANSACTION %p, %!STATUS!",
1470 WDFDMATRANSACTION dmaTransaction =
GetHandle();
1474 "Enter WDFDMATRANSACTION %p", dmaTransaction);
1486 "WDFDMATRANSACTION %p state %!FxDmaTransactionState! "
1487 "is invalid", dmaTransaction,
m_State);
1503 "Exit WDFDMATRANSACTION %p",
1518 WDFDMATRANSACTION dmaTransaction;
1529 "Enter WDFDMATRANSACTION %p",
1533 "Starting WDFDMATRANSACTION %p - MDL %#p, "
1534 "offset %I64x, length %I64x",
1548 NT_ASSERTMSG(
"AcquireDevice should never fail when DMAv3 is in use",
1552 "Only one transaction can be queued "
1553 "at one time on a packet based WDFDMAENABLER %p "
1640 "AllocateAdapterChannel failed for "
1641 "WDFDMATRANSACTION %p, %!STATUS!",
1653 "Exit WDFDMATRANSACTION %p, "
1654 "%!STATUS!", dmaTransaction,
status);
1694 NT_ASSERTMSG(
"Caller was expected to use existing map register base",
1700 "Map registers for WDFDMATRANSACTION %p allocated "
1730 ASSERTMSG(
"Mismatch between map register counts",
1766 ASSERTMSG(
"Unexpected failure of StageTransfer for packet based "
1772 "Invoking DmaCompleted callback %p (context %p) "
1773 "for WDFDMATRANSACTION %p (status %x) "
1774 "due to staging failure (%!STATUS!)",
1805 WDFDMATRANSACTION dmaTransaction;
1822 "Enter WDFDMATRANSACTION %p ", dmaTransaction);
1833 LockTransferState(&oldIrql);
1843 stagingNeeded =
FALSE;
1848 "Staging next fragment of WDFDMATRANSACTION %p "
1861 ASSERTMSG(
"The thread which was staging didn't clear "
1865 stagingNeeded =
TRUE;
1868 UnlockTransferState(oldIrql);
1879 while (stagingNeeded) {
1898 size_t currentPageOffset;
1911 if (mdlBytes >= currentOffset)
1920 currentOffset -= mdlBytes;
1948 "Initiating %s transfer for WDFDMATRANSACTION %p. "
1949 "Mdl %p, Offset %I64x, Length %I64x",
2009 sgListSize =
sizeof(sgListBuffer);
2030 ((mappedBytes > 0) &&
2049 "Invoking ProgramDma callback %p (context %p) for "
2050 "WDFDMATRANSACTION %p.",
2075 LockTransferState(&oldIrql);
2084 ASSERTMSG(
"driver called TransferComplete with pending DMA "
2085 "completion callback",
2102 ASSERTMSG(
"completion needed, but status was not set or was "
2106 ASSERTMSG(
"completion needed, but mapping failed so there shouldn't "
2107 "be any parallel work going on",
2120 UnlockTransferState(oldIrql);
2123 "Invoking DmaCompleted callback %p (context %p) "
2124 "for WDFDMATRANSACTION %p (status %x) "
2132 LockTransferState(&oldIrql);
2138 ASSERTMSG(
"RerunCompletion should not be set on an unstaged "
2148 stagingNeeded =
TRUE;
2153 stagingNeeded =
FALSE;
2156 UnlockTransferState(oldIrql);
2161 ASSERTMSG(
"MapTransfer returned an error - there should not be any "
2163 (stagingNeeded ==
FALSE));
2173 "Exit WDFDMATRANSACTION %p, "
2174 "%!STATUS!", dmaTransaction,
2197 "FlushAdapterBuffers on WDFDMATRANSACTION %p "
2198 "failed, %!STATUS!",
2236 if (pTransaction ==
NULL) {
2240 "Could not allocate memory for WDFTRANSACTION, %!STATUS!",
status);
2278 "Invoking ConfigureChannel callback %p (context "
2279 "%p) for WDFDMATRANSACTION %p.",
2340 "WDFDMATRANSACTION %p state %!FxDmaTransactionState! "
2366 (
ULONG) this->m_TransactionLength,
2367 this->m_DmaDirection == WDF_DMA_DIRECTION::WdfDmaDirectionWriteToDevice,
2392 info.V1.MapRegisterCount +=
2402 info.V1.ScatterGatherElementCount =
info.V1.MapRegisterCount;
2433 transaction->LockTransferState(&oldIrql);
2435 ASSERTMSG(
"Completion state was already set",
2438 ASSERTMSG(
"Deferred completion is already pending",
2447 completionDeferred =
TRUE;
2450 completionDeferred =
FALSE;
2453 transaction->UnlockTransferState(oldIrql);
2458 if (completionDeferred ==
TRUE) {
2467 "Deferring DmaCompleted callback for WDFDMATRANSACTION %p"
2486 "Invoking DmaCompleted callback %p (context %p) "
2487 "for WDFDMATRANSACTION %p (status %x)",
2523 "WDFDMATRANSACTION %p has already been stopped",
WDFDEVICE __inline GetHandle(VOID)
BOOLEAN m_IsSGListAllocated
VOID InitializeTransferContext(__out PVOID Context, __in WDF_DMA_DIRECTION Direction)
union FxDmaEnabler::@4823 m_SGList
__inline FxDmaDescription * GetWriteDmaDescription(VOID)
struct FxDmaEnabler::@4823::@4824 ScatterGatherProfile
__inline FxDmaDescription * GetReadDmaDescription(VOID)
__inline BOOLEAN IsBusMaster(VOID)
__inline WDFDMAENABLER GetHandle(VOID)
__inline size_t GetMaxSGElements(VOID)
struct FxDmaEnabler::@4823::@4825 SystemProfile
ULONG m_MapRegistersNeeded
struct FxDmaPacketTransaction::@4336 m_TransferState
BOOLEAN m_MapRegisterBaseSet
void SetMapRegisterBase(__in PVOID Value)
virtual VOID FreeMapRegistersAndAdapter(VOID)
FxDmaPacketTransaction(__in PFX_DRIVER_GLOBALS FxDriverGlobals, __in USHORT ObjectSize, __in USHORT ExtraSize, __in FxDmaEnabler *DmaEnabler)
FORCEINLINE NTSTATUS MapTransfer(__out_bcount_opt(ScatterGatherListCb) PSCATTER_GATHER_LIST ScatterGatherList, __in ULONG ScatterGatherListCb, __in_opt PDMA_COMPLETION_ROUTINE CompletionRoutine, __in_opt PVOID CompletionContext, __out ULONG *TransferLength)
FORCEINLINE NTSTATUS FlushAdapterBuffers(VOID)
virtual VOID CallEvtDmaCompleted(__in DMA_COMPLETION_STATUS)
static IO_ALLOCATION_ACTION STDCALL _AdapterControl(__in PDEVICE_OBJECT DeviceObject, __in PIRP Irp, __in PVOID MapRegisterBase, __in PVOID Context)
static _Must_inspect_result_ NTSTATUS _Create(__in PFX_DRIVER_GLOBALS FxDriverGlobals, __in PWDF_OBJECT_ATTRIBUTES Attributes, __in FxDmaEnabler *DmaEnabler, __out WDFDMATRANSACTION *Transaction)
ULONG m_MapRegistersReserved
FORCEINLINE VOID ReleaseDevice(VOID)
VOID ReleaseAdapter(VOID)
_Must_inspect_result_ NTSTATUS AllocateAdapterChannel(__in BOOLEAN MapRegistersReserved)
BOOLEAN IsMapRegisterBaseSet(VOID)
virtual BOOLEAN PreMapTransfer(VOID)
_Must_inspect_result_ NTSTATUS ReserveAdapter(__in ULONG NumberOfMapRegisters, __in WDF_DMA_DIRECTION Direction, __in PFN_WDF_RESERVE_DMA Callback, __in_opt PVOID Context)
void ClearMapRegisterBase(VOID)
virtual _Must_inspect_result_ NTSTATUS TransferCompleted(VOID)
_Must_inspect_result_ NTSTATUS AcquireDevice(VOID)
virtual _Must_inspect_result_ NTSTATUS StartTransfer(VOID)
virtual VOID ReleaseResources(__in BOOLEAN ForceRelease)
virtual _Must_inspect_result_ NTSTATUS StageTransfer(VOID)
virtual PDMA_COMPLETION_ROUTINE GetTransferCompletionRoutine(VOID)
ULONG m_DeviceAddressOffset
virtual _Must_inspect_result_ NTSTATUS InitializeResources(VOID)
virtual IO_ALLOCATION_ACTION GetAdapterControlReturnValue(VOID)
static _Must_inspect_result_ NTSTATUS _Create(__in PFX_DRIVER_GLOBALS FxDriverGlobals, __in PWDF_OBJECT_ATTRIBUTES Attributes, __in FxDmaEnabler *DmaEnabler, __out WDFDMATRANSACTION *Transaction)
virtual _Must_inspect_result_ NTSTATUS InitializeResources(VOID)
static VOID _AdapterListControl(__in DEVICE_OBJECT *DeviceObject, __in IRP *Irp, __in SCATTER_GATHER_LIST *SgList, __in VOID *Context)
FxDmaScatterGatherTransaction(__in PFX_DRIVER_GLOBALS FxDriverGlobals, __in USHORT ExtraSize, __in FxDmaEnabler *DmaEnabler)
virtual _Must_inspect_result_ NTSTATUS StartTransfer(VOID)
_Must_inspect_result_ NTSTATUS BuildScatterGatherList(__in PMDL Mdl, __in size_t CurrentOffset, __in ULONG Length, __in PDRIVER_LIST_CONTROL ExecutionRoutine, __in PVOID Context, __in PVOID ScatterGatherBuffer, __in ULONG ScatterGatherBufferLength)
virtual _Must_inspect_result_ NTSTATUS TransferCompleted(VOID)
_Must_inspect_result_ NTSTATUS GetScatterGatherList(__in PMDL Mdl, __in size_t CurrentOffset, __in ULONG Length, __in PDRIVER_LIST_CONTROL ExecutionRoutine, __in PVOID Context)
virtual _Must_inspect_result_ NTSTATUS StageTransfer(VOID)
virtual BOOLEAN Dispose(VOID)
VOID PutScatterGatherList(__in PSCATTER_GATHER_LIST ScatterGather)
virtual VOID ReleaseResources(__in BOOLEAN ForceRelease)
PSCATTER_GATHER_LIST m_SGList
static DMA_COMPLETION_ROUTINE _SystemDmaCompletion
PVOID m_ConfigureChannelContext
PVOID m_TransferCompleteContext
FxDmaSystemTransaction(__in PFX_DRIVER_GLOBALS FxDriverGlobals, __in USHORT ExtraSize, __in FxDmaEnabler *DmaEnabler)
BOOLEAN CancelMappedTransfer(VOID)
static _Must_inspect_result_ NTSTATUS _Create(__in PFX_DRIVER_GLOBALS FxDriverGlobals, __in PWDF_OBJECT_ATTRIBUTES Attributes, __in FxDmaEnabler *DmaEnabler, __out WDFDMATRANSACTION *Transaction)
VOID CallEvtDmaCompleted(__in DMA_COMPLETION_STATUS Status)
FxDmaTransactionConfigureChannel m_ConfigureChannelFunction
virtual PDMA_COMPLETION_ROUTINE GetTransferCompletionRoutine(VOID)
virtual BOOLEAN PreMapTransfer(VOID)
FxDmaTransactionTransferComplete m_TransferCompleteFunction
FxRequest * m_EncodedRequest
__forceinline VOID ReleaseButRetainRequest(VOID)
VOID SetImmediateExecution(__in BOOLEAN Value)
size_t m_MaxFragmentLength
static PVOID GetStartVaFromOffset(__in PMDL Mdl, __in size_t Offset)
virtual _Must_inspect_result_ NTSTATUS TransferCompleted(VOID)=0
virtual VOID ReleaseResources(__in BOOLEAN ForceRelease)=0
FxDmaTransactionProgramOrReserveDma m_DmaAcquiredFunction
PVOID m_DmaAcquiredContext
FxDmaDescription * m_AdapterInfo
virtual _Must_inspect_result_ NTSTATUS StartTransfer(VOID)=0
FxDmaEnabler * m_DmaEnabler
VOID ReleaseForReuse(__in BOOLEAN ForceRelease)
virtual _Must_inspect_result_ NTSTATUS StageTransfer(VOID)=0
PMDL m_CurrentFragmentMdl
__forceinline VOID ReferenceRequest(VOID)
WDF_DMA_DIRECTION m_DmaDirection
__forceinline FxDmaEnabler * GetDmaEnabler(VOID)
size_t m_TransactionLength
FxDmaTransactionBase(__in PFX_DRIVER_GLOBALS FxDriverGlobals, __in USHORT ObjectSize, __in USHORT ExtraSize, __in FxDmaEnabler *DmaEnabler)
__forceinline VOID ClearRequest(VOID)
size_t m_CurrentFragmentOffset
_Must_inspect_result_ NTSTATUS Execute(__in PVOID Context)
FxDmaTransactionState m_State
VOID GetTransferInfo(__out_opt ULONG *MapRegisterCount, __out_opt ULONG *ScatterGatherElementCount)
virtual _Must_inspect_result_ NTSTATUS InitializeResources(VOID)=0
size_t m_CurrentFragmentLength
virtual BOOLEAN Dispose(VOID)
static _Must_inspect_result_ NTSTATUS _CalculateRequiredMapRegisters(__in PMDL Mdl, __in size_t CurrentOffset, __in ULONG Length, __in ULONG AvailableMapRegisters, __out_opt PULONG PossibleTransferLength, __out PULONG MapRegistersRequired)
static VOID _ComputeNextTransferAddress(__in PMDL CurrentMdl, __in size_t CurrentOffset, __in ULONG Transferred, __deref_out PMDL *NextMdl, __out size_t *NextOffset)
_Must_inspect_result_ NTSTATUS Initialize(__in PFN_WDF_PROGRAM_DMA ProgramDmaFunction, __in WDF_DMA_DIRECTION DmaDirection, __in PMDL Mdl, __in size_t Offset, __in ULONG Length)
BOOLEAN CancelResourceAllocation(VOID)
BOOLEAN DmaCompleted(__in size_t TransferredLength, __out NTSTATUS *ReturnStatus, __in FxDmaCompletionType CompletionType)
__forceinline WDFDMATRANSACTION GetHandle(VOID)
PFN_WDF_PROGRAM_DMA ProgramDma
BOOLEAN InvokeProgramDma(__in WDFDMATRANSACTION Transaction, __in WDFDEVICE Device, __in PVOID Context, __in WDF_DMA_DIRECTION Direction, __in PSCATTER_GATHER_LIST SgList)
union FxDmaTransactionProgramOrReserveDma::@4337 Method
PFN_WDF_RESERVE_DMA ReserveDma
VOID Invoke(__in WDFDMATRANSACTION Transaction, __in WDFDEVICE Device, __in WDFCONTEXT Context, __in WDF_DMA_DIRECTION Direction, __in DMA_COMPLETION_STATUS Status)
PFN_WDF_DMA_TRANSACTION_DMA_TRANSFER_COMPLETE Method
__inline PFX_DRIVER_GLOBALS GetDriverGlobals(VOID)
ULONG __inline AddRef(__in_opt PVOID Tag=NULL, __in LONG Line=0, __in_opt PSTR File=NULL)
CfxDeviceBase * m_DeviceBase
VOID DeleteFromFailedCreate(VOID)
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)
#define NT_SUCCESS(StatCode)
DoTraceLevelMessage(pFxDriverGlobals, TRACE_LEVEL_VERBOSE, TRACINGPNP, "Enter, WDFDEVICE %p", Device)
PFX_DRIVER_GLOBALS pFxDriverGlobals
return pObject GetObjectHandle()
FxVerifierDbgBreakPoint(pFxDriverGlobals)
#define UNDEFINED_DMA_COMPLETION_STATUS
@ FxDmaTransactionStateDeleted
@ FxDmaTransactionStateInitialized
@ FxDmaTransactionStateTransferCompleted
@ FxDmaTransactionStateInvalid
@ FxDmaTransactionStateReleased
@ FxDmaTransactionStateReserved
@ FxDmaTransactionStateTransfer
@ FxDmaTransactionStateCreated
@ FxDmaTransactionStateTransferFailed
@ FxDmaCompletionTypeAbort
@ FxDmaCompletionTypePartial
return pDmaTrans GetDmaEnabler() -> GetDeviceHandle()
FxDmaSystemTransaction * systemTransaction
return pDmaTrans GetTransferContext()
__inline size_t FxSizeTMin(__in size_t A, __in size_t B)
__inline PVOID FxAllocateFromNPagedLookasideList(_In_ PNPAGED_LOOKASIDE_LIST Lookaside, _In_opt_ size_t ElementSize=0)
__inline VOID FxFreeToNPagedLookasideList(__in PNPAGED_LOOKASIDE_LIST Lookaside, __in PVOID Entry)
#define COMPUTE_RAW_OBJECT_SIZE(_rawObjectSize)
#define COMPUTE_OBJECT_SIZE(_rawObjectSize, _extraSize)
@ FX_TYPE_DMA_TRANSACTION
#define FxVerifierBugCheck(FxDriverGlobals, Error,...)
GLuint GLsizei GLsizei * length
#define KeGetCurrentThread
static IPrintDialogCallback callback
#define _Must_inspect_result_
#define ASSERTMSG(msg, exp)
#define UNREFERENCED_PARAMETER(P)
_In_ ULONG _In_ ULONG Offset
_In_ ULONG _In_ ULONG _In_ ULONG Length
#define ARGUMENT_PRESENT(ArgumentPointer)
#define STATUS_MORE_PROCESSING_REQUIRED
#define STATUS_BUFFER_TOO_SMALL
#define TRACE_LEVEL_WARNING
#define TRACE_LEVEL_VERBOSE
#define TRACE_LEVEL_ERROR
struct _DMA_OPERATIONS * DmaOperations
PCANCEL_ADAPTER_CHANNEL CancelAdapterChannel
_Must_inspect_result_ BOOLEAN IsVerificationEnabled(__in ULONG Major, __in ULONG Minor, __in FxVerifierDownlevelOption DownLevel)
PDMA_ADAPTER AdapterObject
ULONG NumberOfMapRegisters
size_t MaximumFragmentLength
size_t PreallocatedSGListSize
#define __WARNING_CLASS_MISMATCH_NONE
#define STATUS_INVALID_PARAMETER
#define STATUS_INSUFFICIENT_RESOURCES
_Must_inspect_result_ _In_ WDFDMAENABLER _In_ _In_opt_ PWDF_OBJECT_ATTRIBUTES Attributes
_Must_inspect_result_ _In_ WDFDMAENABLER DmaEnabler
#define WDF_PTR_ADD_OFFSET_TYPE(_ptr, _offset, _type)
_In_ PDEVICE_OBJECT DeviceObject
_In_ WDFDMAENABLER _In_ WDF_DMA_DIRECTION DmaDirection
enum _WDF_DMA_DIRECTION WDF_DMA_DIRECTION
@ WdfDmaDirectionReadFromDevice
EVT_WDF_PROGRAM_DMA * PFN_WDF_PROGRAM_DMA
EVT_WDF_RESERVE_DMA * PFN_WDF_RESERVE_DMA
WDF_EXTERN_C_START typedef _In_ WDFDEVICE _In_ WDFCONTEXT _In_ WDF_DMA_DIRECTION _In_ PSCATTER_GATHER_LIST SgList
_In_ WDFDEVICE _In_ PVOID _In_opt_ PMDL Mdl
_In_ WDFDMATRANSACTION _Out_opt_ ULONG * MapRegisterCount
_In_ WDFDMATRANSACTION _In_ size_t TransferredLength
_In_ WDFDMATRANSACTION _Out_opt_ ULONG _Out_opt_ ULONG * ScatterGatherElementCount
_In_ WDFINTERRUPT _In_ PFN_WDF_INTERRUPT_SYNCHRONIZE Callback
_Must_inspect_result_ _In_ WDFKEY _In_ PCUNICODE_STRING _Out_opt_ PUSHORT _Inout_opt_ PUNICODE_STRING Value
_In_ WDFREQUEST _In_opt_ PFN_WDF_REQUEST_COMPLETION_ROUTINE _In_opt_ __drv_aliasesMem WDFCONTEXT CompletionContext
#define STATUS_WDF_TOO_FRAGMENTED
_Out_ PULONG NumberOfMapRegisters
ActualNumberDriverObjects * sizeof(PDRIVER_OBJECT)) PDRIVER_OBJECT *DriverObjectList
struct _SCATTER_GATHER_LIST SCATTER_GATHER_LIST
struct _SCATTER_GATHER_LIST * PSCATTER_GATHER_LIST
_Inout_ struct _IRP _In_ PVOID MapRegisterBase
enum _IO_ALLOCATION_ACTION IO_ALLOCATION_ACTION
_Must_inspect_result_ typedef _In_ PHYSICAL_ADDRESS _In_ LARGE_INTEGER ByteCount
DMA_COMPLETION_ROUTINE * PDMA_COMPLETION_ROUTINE
#define MmGetMdlByteOffset(_Mdl)
#define MmGetMdlByteCount(_Mdl)
#define MmGetMdlVirtualAddress(_Mdl)
#define ADDRESS_AND_SIZE_TO_SPAN_PAGES(_Va, _Size)