DMA_OPERATIONS 结构 (wdm.h)

DMA_OPERATIONS 结构提供指向控制 DMA 控制器操作的函数的指针表。

语法

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;

成员

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 数据缓冲区的散点/收集列表所需的缓冲区大小。 此成员仅在 DMA_OPERATIONS 版本 2 及更高版本中可用。 有关详细信息,请参阅 CalculateScatterGatherList

BuildScatterGatherList

指向系统定义的例程的指针,该例程分配映射寄存器并在驱动程序提供的缓冲区中为 DMA 创建散点/收集列表。 此成员仅在 DMA_OPERATIONS 版本 2 及更高版本中可用。 有关详细信息,请参阅 BuildScatterGatherList

BuildMdlFromScatterGatherList

指向系统定义的例程的指针,该例程生成对应于散点/收集列表的 MDL。 此成员仅在 DMA_OPERATIONS 版本 2 及更高版本中可用。 有关详细信息,请参阅 BuildMdlFromScatterGatherList

GetDmaAdapterInfo

指向系统定义的例程的指针,该例程描述总线主 DMA 设备或系统 DMA 控制器的功能。 GetDmaAdapterInfo 仅在 DMA_OPERATIONS 版本 3 中可用。 有关详细信息,请参阅 GetDmaAdapterInfo

GetDmaTransferInfo

指向系统定义的例程的指针,该例程描述散点/收集列表的分配要求。 此例程替换 CalculateScatterGatherListGetDmaTransferInfo 仅在 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。 此例程是 AllocateAdapterChannelExMapTransferEx 的包装器。

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

指向获取 DMA 域句柄 的 PGET_DMA_DOMAIN 回调函数的指针。 此选项在 Windows 10 及更高版本中可用。

AllocateCommonBufferWithBounds

指向 PALLOCATE_COMMON_BUFFER_WITH_BOUNDS 回调函数的指针,该函数为公共缓冲区分配内存并将其映射,以便主设备和 CPU 可以访问该内存。 公共缓冲区可由可选的最小和最大逻辑地址绑定。 此选项从 Windows 10 版本 1803 开始可用。

AllocateCommonBufferVector

GetCommonBufferFromVectorByIndex

FreeCommonBufferFromVector

FreeCommonBufferVector

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。 DMA_OPERATIONS版本 2 从 Windows XP 开始可用。 如果 版本 DEVICE_DESCRIPTION_VERSION3,则返回此结构的版本 3。 DMA_OPERATIONS版本 3 从Windows 8开始可用。

要求

要求
最低受支持的客户端 从 Windows 2000 开始受支持。
标头 wdm.h(包括 Wdm.h、Ntddk.h、Ntifs.h)

另请参阅

AllocateAdapterChannel

AllocateAdapterChannelEx

AllocateCommonBuffer

AllocateCommonBufferEx

BuildMdlFromScatterGatherList

BuildScatterGatherList

BuildScatterGatherListEx

CalculateScatterGatherList

CancelAdapterChannel

CancelMappedTransfer

ConfigureAdapterChannel

DEVICE_DESCRIPTION

FlushAdapterBuffers

FlushAdapterBuffersEx

FreeAdapterChannel

FreeAdapterObject

FreeCommonBuffer

FreeMapRegisters

GetDmaAdapterInfo

GetDmaAlignment

GetDmaTransferInfo

GetScatterGatherList

GetScatterGatherListEx

InitializeDmaTransferContext

IoGetDmaAdapter

MapTransfer

MapTransferEx

PutDmaAdapter

PutScatterGatherList

ReadDmaCounter