IoGetDmaAdapter 函数 (wdm.h)
IoGetDmaAdapter 例程返回指向物理设备对象的 DMA 适配器结构的指针。
语法
_DMA_ADAPTER * IoGetDmaAdapter(
[in, optional] PDEVICE_OBJECT PhysicalDeviceObject,
[in] _DEVICE_DESCRIPTION *DeviceDescription,
[out] PULONG NumberOfMapRegisters
);
参数
[in, optional] PhysicalDeviceObject
指向请求 DMA 适配器结构的设备的物理设备对象的指针。
[in] DeviceDescription
指向 DEVICE_DESCRIPTION 结构的指针,该结构描述物理设备的属性。 无论DEVICE_DESCRIPTION结构中设置的版本如何,此函数始终返回 DMA_ADAPTER->Version == 1
。
[out] NumberOfMapRegisters
指向在输出中,驱动程序可为任何 DMA 传输作分配的最大映射寄存器数的指针。
返回值
IoGetDmaAdapter 返回指向 DMA_ADAPTER 结构的指针,该结构包含指向支持系统定义的 DMA作的函数的指针。 如果无法分配结构,则例程返回 NULL。 请参阅上述版本注释,了解 DeviceDescription 参数的说明。
言论
在调用此例程之前,驱动程序必须零初始化 DeviceDescription 指向的 DEVICE_DESCRIPTION 结构,然后将其设备的相关信息添加到此结构。
成功后,例程的返回值指向 DMA_ADAPTER 结构。 此结构包含指向 DMA_OPERATIONS 结构的指针,它是驱动程序随后可用于执行 DMA作的函数的指针表。 例程返回的此结构的版本如下:
如果驱动程序将 DEVICE_DESCRIPTION 结构的 版本 成员设置为DEVICE_DESCRIPTION_VERSION或DEVICE_DESCRIPTION_VERSION1,则返回 DMA_ADAPTER 结构指向 DMA_OPERATIONS 结构的版本 1。
如果驱动程序 版本 = DEVICE_DESCRIPTION_VERSION2,则返回的 DMA_ADAPTER 结构指向 DMA_OPERATIONS 结构的版本 2(如果支持版本 2);否则,例程返回 NULL 。 在尝试使用任何版本 2 函数之前,驱动程序必须检查是否支持版本 2。
如果驱动程序 版本 = DEVICE_DESCRIPTION_VERSION3,则返回 DMA_ADAPTER 结构指向 DMA_OPERATIONS 结构的版本 3(如果支持版本 3);否则,例程返回 NULL 。 在尝试使用任何版本 3 函数之前,驱动程序必须检查是否支持版本 3。 从 Windows 8 开始,支持版本 3。
PnP 驱动程序在调用 AddDevice 例程或处理设备的 PnP IRP_MN_START_DEVICE 请求时调用 IoGetDmaAdapter。 此 IRP 包含有关驱动程序必须在 DeviceDescription 结构中提供的设备硬件资源的信息。
调用方使用 DeviceDescription 结构中的 MaximumLength 成员来指示它可以使用的最佳映射寄存器数。 I/O 管理器将尝试分配足够的映射寄存器,以适应此最大大小的 DMA 传输作。 输出时,I/O 管理器返回 NumberOfMapRegisters 参数中为其分配的映射寄存器数。 驱动程序应检查返回的值;无法保证驱动程序将收到所请求的相同数量的映射寄存器。
若要释放适配器对象,驱动程序应通过 DMA_ADAPTER 结构中返回的指针调用 putDmaAdapter 。
如前所述,如果 IoGetDmaAdapter 不支持 DeviceDescription->版本指定的 DMA_ADAPTER 结构版本,则 IoGetDmaAdapter NULL 返回。 调用方应依赖此行为来确定例程是否返回指向所请求版本的 DMA_ADAPTER 结构的指针。 当 IoGetDmaAdapter 返回指向 DMA_ADAPTER 结构版本 1 或版本 2 或版本 3 的指针时,此结构 版本 成员始终设置为 1。 因此,调用方无法使用返回 DMA_ADAPTER 结构的 版本 成员来区分此结构的版本 1、2 和 3。
要求
要求 | 价值 |
---|---|
目标平台 | 普遍 |
标头 | wdm.h (包括 Wdm.h、Ntddk.h、Ntifs.h) |
库 | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | PASSIVE_LEVEL |
DDI 符合性规则 | HwStorPortProhibitedDIS(storport)、IrqlIoPassive5(wdm)、PowerIrpDDis(wdm) |