DMA_OPERATIONS结构提供指向控制 DMA 控制器作的函数的指针表。
Syntax
typedef struct _DMA_OPERATIONS {
ULONG Size;
PPUT_DMA_ADAPTER PutDmaAdapter;
PALLOCATE_COMMON_BUFFER AllocateCommonBuffer;
PFREE_COMMON_BUFFER FreeCommonBuffer;
PALLOCATE_ADAPTER_CHANNEL AllocateAdapterChannel;
PFLUSH_ADAPTER_BUFFERS FlushAdapterBuffers;
PFREE_ADAPTER_CHANNEL FreeAdapterChannel;
PFREE_MAP_REGISTERS FreeMapRegisters;
PMAP_TRANSFER MapTransfer;
PGET_DMA_ALIGNMENT GetDmaAlignment;
PREAD_DMA_COUNTER ReadDmaCounter;
PGET_SCATTER_GATHER_LIST GetScatterGatherList;
PPUT_SCATTER_GATHER_LIST PutScatterGatherList;
PCALCULATE_SCATTER_GATHER_LIST_SIZE CalculateScatterGatherList;
PBUILD_SCATTER_GATHER_LIST BuildScatterGatherList;
PBUILD_MDL_FROM_SCATTER_GATHER_LIST BuildMdlFromScatterGatherList;
PGET_DMA_ADAPTER_INFO GetDmaAdapterInfo;
PGET_DMA_TRANSFER_INFO GetDmaTransferInfo;
PINITIALIZE_DMA_TRANSFER_CONTEXT InitializeDmaTransferContext;
PALLOCATE_COMMON_BUFFER_EX AllocateCommonBufferEx;
PALLOCATE_ADAPTER_CHANNEL_EX AllocateAdapterChannelEx;
PCONFIGURE_ADAPTER_CHANNEL ConfigureAdapterChannel;
PCANCEL_ADAPTER_CHANNEL CancelAdapterChannel;
PMAP_TRANSFER_EX MapTransferEx;
PGET_SCATTER_GATHER_LIST_EX GetScatterGatherListEx;
PBUILD_SCATTER_GATHER_LIST_EX BuildScatterGatherListEx;
PFLUSH_ADAPTER_BUFFERS_EX FlushAdapterBuffersEx;
PFREE_ADAPTER_OBJECT FreeAdapterObject;
PCANCEL_MAPPED_TRANSFER CancelMappedTransfer;
PALLOCATE_DOMAIN_COMMON_BUFFER AllocateDomainCommonBuffer;
PFLUSH_DMA_BUFFER FlushDmaBuffer;
PJOIN_DMA_DOMAIN JoinDmaDomain;
PLEAVE_DMA_DOMAIN LeaveDmaDomain;
PGET_DMA_DOMAIN GetDmaDomain;
PALLOCATE_COMMON_BUFFER_WITH_BOUNDS AllocateCommonBufferWithBounds;
PALLOCATE_COMMON_BUFFER_VECTOR AllocateCommonBufferVector;
PGET_COMMON_BUFFER_FROM_VECTOR_BY_INDEX GetCommonBufferFromVectorByIndex;
PFREE_COMMON_BUFFER_FROM_VECTOR FreeCommonBufferFromVector;
PFREE_COMMON_BUFFER_VECTOR FreeCommonBufferVector;
PCREATE_COMMON_BUFFER_FROM_MDL CreateCommonBufferFromMdl;
} *PDMA_OPERATIONS, DMA_OPERATIONS;
Members
Size
此 DMA_OPERATIONS 结构的大小(以字节为单位)。
PutDmaAdapter
指向系统定义的例程的指针,用于释放 DMA_ADAPTER 结构。 有关详细信息,请参阅 PutDmaAdapter。
AllocateCommonBuffer
指向系统定义的例程的指针,用于分配物理连续的 DMA 缓冲区。 有关详细信息,请参阅 AllocateCommonBuffer。
FreeCommonBuffer
指向系统定义的例程的指针,用于释放以前由 AllocateCommonBuffer 分配的物理连续 DMA 缓冲区。 有关详细信息,请参阅 FreeCommonBuffer。
AllocateAdapterChannel
指向系统定义的例程的指针,用于为 DMA作分配通道。 有关详细信息,请参阅 AllocateAdapterChannel。
FlushAdapterBuffers
指向系统定义的例程的指针,用于在 DMA作后从系统或总线主适配器的内部缓存刷新数据。 有关详细信息,请参阅 FlushAdapterBuffers。
FreeAdapterChannel
指向系统定义的例程的指针,用于释放以前由 AllocateAdapterChannel 为 DMA作分配的通道。 有关详细信息,请参阅 FreeAdapterChannel。
FreeMapRegisters
指向系统定义的例程的指针,用于为 DMA作分配的免费映射寄存器。 有关详细信息,请参阅 FreeMapRegisters。
MapTransfer
指向系统定义的例程的指针,用于开始 DMA作。 有关详细信息,请参阅 MapTransfer。
GetDmaAlignment
指向系统定义的例程的指针,用于获取控制器的 DMA 对齐要求。 有关详细信息,请参阅 GetDmaAlignment。
ReadDmaCounter
指向系统定义的例程的指针,用于获取 DMA作的当前传输计数。 有关详细信息,请参阅 ReadDmaCounter。
GetScatterGatherList
指向系统定义的例程的指针,该例程分配映射寄存器并为 DMA 创建散点/收集列表。 有关详细信息,请参阅 GetScatterGatherList。
PutScatterGatherList
指向系统定义的例程的指针,该例程在完成 DMA作后释放映射寄存器和散点/收集列表。 有关详细信息,请参阅 PutScatterGatherList。
CalculateScatterGatherList
指向系统定义的例程的指针,用于确定保存描述 I/O 数据缓冲区的散点/收集列表所需的缓冲区大小。 此成员仅在版本 2 及更高版本中提供 DMA_OPERATIONS。 有关详细信息,请参阅 CalculateScatterGatherList。
BuildScatterGatherList
指向系统定义的例程的指针,该例程分配映射寄存器,并在驱动程序提供的缓冲区中为 DMA 创建散点/收集列表。 此成员仅在版本 2 及更高版本中提供 DMA_OPERATIONS。 有关详细信息,请参阅 BuildScatterGatherList。
BuildMdlFromScatterGatherList
指向系统定义的例程的指针,该例程生成对应于散点/收集列表的 MDL。 此成员仅在版本 2 及更高版本中提供 DMA_OPERATIONS。 有关详细信息,请参阅 BuildMdlFromScatterGatherList。
GetDmaAdapterInfo
指向系统定义的例程的指针,该例程描述总线主 DMA 设备或系统 DMA 控制器的功能。 GetDmaAdapterInfo 仅在 DMA_OPERATIONS版本 3 中可用。 有关详细信息,请参阅 GetDmaAdapterInfo。
GetDmaTransferInfo
指向系统定义的例程的指针,该例程描述散点/收集列表的分配要求。 此例程替换 CalculateScatterGatherList。 GetDmaTransferInfo 仅在 DMA_OPERATIONS 版本 3 中可用。 有关详细信息,请参阅 GetDmaTransferInfo。
InitializeDmaTransferContext
指向系统定义的例程的指针,用于初始化不透明的 DMA 传输上下文。 作系统在此上下文中存储 DMA 传输的内部状态。 InitializeDmaTransferContext 仅在 DMA_OPERATIONS版本 3 中可用。 有关详细信息,请参阅 InitializeDmaTransferContext。
AllocateCommonBufferEx
指向系统定义的例程的指针,该例程为通用缓冲区分配内存并映射此内存,以便处理器和 DMA 设备可以访问该内存。 AllocateCommonBufferEx 仅在 DMA_OPERATIONS版本 3 中可用。 有关详细信息,请参阅 AllocateCommonBufferEx。
AllocateAdapterChannelEx
指向系统定义的例程的指针,该例程分配 DMA 传输所需的资源,然后调用驱动程序提供的 AdapterControl 例程来启动 DMA 传输。 AllocateAdapterChannelEx 仅在 DMA_OPERATIONS版本 3 中可用。 有关详细信息,请参阅 AllocateAdapterChannelEx。
ConfigureAdapterChannel
指向系统定义的例程的指针可实现由 DMA 控制器实现的自定义函数。 ConfigureAdapterChannel 仅在 DMA_OPERATIONS 版本 3 中可用。 有关详细信息,请参阅 ConfigureAdapterChannel。
CancelAdapterChannel
指向系统定义的例程的指针,该例程尝试取消挂起的请求以分配 DMA 通道。 CancelAdapterChannel 仅在 DMA_OPERATIONS 版本 3 中可用。 有关详细信息,请参阅 CancelAdapterChannel。
MapTransferEx
指向系统定义的例程的指针,该例程设置映射寄存器以将散点/收集列表中的物理地址映射到执行 DMA 传输所需的逻辑地址。 MapTransferEx 仅在 DMA_OPERATIONS 版本 3 中可用。 有关详细信息,请参阅 MapTransferEx。
GetScatterGatherListEx
指向系统定义的例程的指针,该例程分配 DMA 传输所需的资源、生成散点/收集列表,然后调用驱动程序提供的 AdapterListControl 例程来启动 DMA 传输。 GetScatterGatherListEx 仅在 DMA_OPERATIONS 版本 3 中可用。 有关详细信息,请参阅 GetScatterGatherListEx。 此例程是 AllocateAdapterChannelEx 和 MapTransferEx 的包装器。
BuildScatterGatherListEx
指向系统定义的例程的指针,该例程在调用方分配的缓冲区中生成散点/收集列表,然后调用驱动程序提供的 AdapterListControl 例程来启动 DMA 传输。 BuildScatterGatherListEx 仅在 DMA_OPERATIONS 版本 3 中可用。 有关详细信息,请参阅 BuildScatterGatherListEx。
FlushAdapterBuffersEx
指向系统定义的例程的指针,用于刷新系统 DMA 控制器的内部缓存或 DMA 传输结束时总线主适配器的内部缓存中保留的任何数据。 对于使用系统 DMA 控制器的设备,如果传输未完成,此例程将取消控制器上的当前 DMA 传输。 FlushAdapterBuffersEx 仅在 DMA_OPERATIONS 版本 3 中可用。 有关详细信息,请参阅 FlushAdapterBuffersEx。
FreeAdapterObject
指向系统定义的例程的指针,该例程在驱动程序完成所有 DMA作后释放指定的适配器对象。 FreeAdapterObject 仅在 DMA_OPERATIONS 版本 3 中可用。 有关详细信息,请参阅 FreeAdapterObject。
CancelMappedTransfer
指向取消映射传输的系统定义的例程的指针。 CancelMappedTransfer 仅在 DMA_OPERATIONS版本 3 中可用。 有关详细信息,请参阅 CancelMappedTransfer。
AllocateDomainCommonBuffer
指向 PALLOCATE_DOMAIN_COMMON_BUFFER 回调例程的指针,用于分配域公共缓冲区。 此选项在 Windows 10 及更高版本中可用。
FlushDmaBuffer
指向 PFLUSH_DMA_BUFFER 回调函数的指针,用于刷新缓存中剩余的任何数据。 此选项在 Windows 10 及更高版本中可用。
JoinDmaDomain
指向联接指定 DMA 域 的PJOIN_DMA_DOMAIN 回调函数的指针。 此选项在 Windows 10 及更高版本中可用。
LeaveDmaDomain
指向离开指定 DMA 域 的PLEAVE_DMA_DOMAIN 回调函数的指针。 此选项在 Windows 10 及更高版本中可用。
GetDmaDomain
指向 PGET_DMA_DOMAIN 回调函数的指针,该函数获取 DMA 域的句柄。 此选项在 Windows 10 及更高版本中可用。
AllocateCommonBufferWithBounds
指向 PALLOCATE_COMMON_BUFFER_WITH_BOUNDS 回调函数的指针,该函数分配公共缓冲区的内存并将其映射,以便主设备和 CPU 可以访问该内存。 公共缓冲区可以绑定可选的最小和最大逻辑地址。 从 Windows 10 版本 1803 开始,此选项可用。
AllocateCommonBufferVector
指向 PALLOCATE_COMMON_BUFFER_VECTOR 回调函数的指针,该函数将多个公共缓冲区分配为矢量,从而高效批量分配 DMA 可访问的内存区域。
GetCommonBufferFromVectorByIndex
指向 PGET_COMMON_BUFFER_FROM_VECTOR_BY_INDEX 回调函数的指针,该函数通过索引从以前分配的向量中检索特定公共缓冲区的虚拟和逻辑地址。
FreeCommonBufferFromVector
指向 PFREE_COMMON_BUFFER_FROM_VECTOR 回调函数的指针,该函数通过索引从向量释放特定的公共缓冲区,从而允许在向量中释放单个缓冲区。
FreeCommonBufferVector
指向 PFREE_COMMON_BUFFER_VECTOR 回调函数的指针,该函数释放整个公共缓冲区向量及其以前由 AllocateCommonBufferVector 分配的所有关联缓冲区。
CreateCommonBufferFromMdl
指向 PCREATE_COMMON_BUFFER_FROM_MDL 回调函数的指针,该函数将从 MDL 创建 DMA 公共缓冲区并映射后盾内存,以便总线主控设备和 CPU 可以访问该缓冲区。 从 Windows Server 2022 开始,此可选回调可用。
注解
除 Size 之外,此结构的所有成员都是指向驱动程序用于为其设备执行 DMA作的函数的指针。 驱动程序通过调用 IoGetDmaAdapter 例程来获取这些指针。 此例程返回的DMA_OPERATIONS结构的版本取决于作为输入参数传递给 IoGetDmaAdapter的 DEVICE_DESCRIPTION 结构的 Version 成员。 如果 版本 DEVICE_DESCRIPTION_VERSION或DEVICE_DESCRIPTION_VERSION1,则返回此结构的版本 1。 如果 版本 DEVICE_DESCRIPTION_VERSION2,则返回此结构的版本 2。 从 Windows XP 开始,DMA_OPERATIONS版本 2 可用。 如果 版本 DEVICE_DESCRIPTION_VERSION3,则返回此结构的版本 3。 从 Windows 8 开始,DMA_OPERATIONS版本 3 可用。
要求
| Requirement | 价值 |
|---|---|
| 最低支持的客户端 | Windows 2000 |
| Header | wdm.h (包括 Wdm.h、Ntddk.h、Ntifs.h) |