PBUILD_MDL_FROM_SCATTER_GATHER_LIST回调函数 (wdm.h)

BuildMdlFromScatterGatherList 例程从系统分配的散点/收集列表生成 MDL。

此例程保留供系统使用。

语法

PBUILD_MDL_FROM_SCATTER_GATHER_LIST PbuildMdlFromScatterGatherList;

NTSTATUS PbuildMdlFromScatterGatherList(
  [in]  PDMA_ADAPTER DmaAdapter,
  [in]  PSCATTER_GATHER_LIST ScatterGather,
  [in]  PMDL OriginalMdl,
  [out] PMDL *TargetMdl
)
{...}

参数

[in] DmaAdapter

指向 IoGetDmaAdapter 返回的 DMA_ADAPTER 结构的指针,该结构表示总线主适配器或 DMA 控制器。

[in] ScatterGather

指向传递给驱动程序的 AdapterListControl 例程的SCATTER_GATHER_LIST结构的指针。

[in] OriginalMdl

指向驱动程序用于生成散点/收集列表的原始 MDL 的指针。

[out] TargetMdl

指向变量的指针,该例程使用 返回为保存散点/收集列表所描述的缓冲区而创建的 MDL。 返回的值可以与 OriginalMdl 相同。

返回值

BuildMdlFromScatterGatherList 返回以下状态代码之一:

返回代码 说明
STATUS_SUCCESS 操作成功。
STATUS_INVALID_PARAMETER OriginalMdl 参数为 NULL
STATUS_INSUFFICIENT_RESOURCES 没有足够的内存可用于分配新的 MDL。
STATUS_NONE_MAPPED 系统已为散点/收集列表中的内存位置创建了一个新的 MDL。 (仅当在同一个散点/收集列表上调用例程两次时,才会发生此情况 )

注解

BuildMdlFromScatterGatherList 不是可直接按名称调用的系统例程。 此例程只能由 DMA_OPERATIONS 结构中返回的地址中的指针调用。 驱动程序通过调用 IoGetDmaAdapter 获取此例程的地址,并将 DeviceDescription 参数的 Version 成员设置为 DEVICE_DESCRIPTION_VERSION2。 如果 IoGetDmaAdapter 返回 NULL,则例程在平台上不可用。

当驱动程序创建要写入设备的散点/收集列表时,系统可以创建要写入的数据的副本,并使用该副本执行 DMA 操作。 使用此例程访问散点/收集列表中的内存位置,无论这些位置是否为副本。

要求

要求
最低受支持的客户端 在 Windows XP 和更高版本的 Windows 中可用。
目标平台 桌面
标头 wdm.h (包括 Wdm.h)
IRQL <= DISPATCH_LEVEL
DDI 符合性规则 IrqlDispatch (wdm)

另请参阅

BuildScatterGatherList

DEVICE_DESCRIPTION

DMA_ADAPTER

DMA_OPERATIONS

IoGetDmaAdapter

SCATTER_GATHER_LIST