PFREE_ADAPTER_OBJECT回调函数 (wdm.h)
FreeAdapterObject 例程在驱动程序完成所有 DMA 操作后释放指定的适配器对象。
语法
PFREE_ADAPTER_OBJECT PfreeAdapterObject;
void PfreeAdapterObject(
[in] PDMA_ADAPTER DmaAdapter,
[in] IO_ALLOCATION_ACTION AllocationAction
)
{...}
参数
[in] DmaAdapter
指向 DMA_ADAPTER 结构的指针。 此结构是要释放的适配器对象。 此对象表示驱动程序的总线主 DMA 设备或系统 DMA 通道。 调用方从对 IoGetDmaAdapter 例程的上一次调用中获取了此指针。
[in] AllocationAction
调用驱动程序请求的解除分配的类型。 将此参数设置为 IO_ALLOCATION_ACTION 枚举值。 有关详细信息,请参见“备注”部分。
返回值
无
备注
FreeAdapterObject 不是可直接按名称调用的系统例程。 此例程只能由 DMA_OPERATIONS结构中 返回的地址中的指针调用。 驱动程序通过将 DeviceDescription 参数的 Version 成员设置为 DEVICE_DESCRIPTION_VERSION3 调用 IoGetDmaAdapter 来获取此例程的地址。 如果 IoGetDmaAdapter 返回 NULL,则例程在平台上不可用。
如果 AllocationAction = DeallocateObject, 则 FreeAdapterObject 调用将释放适配器对象,并释放可能为此对象分配的任何映射寄存器。
如果 AllocationAction = DeallocateObjectKeepRegisters, 则 FreeAdapterObject 调用将释放适配器对象,但不释放任何映射寄存器。 在这种情况下,驱动程序必须通过调用 FreeMapRegisters 例程显式释放任何分配的映射寄存器。
如果 AllocationAction = KeepObject, 则 FreeAdapterObject 调用不起作用。
FreeAdapterObject 可用于解除分配通过调用 AllocateAdapterChannelEx、 GetScatterGatherListEx 和 BuildScatterGatherListEx 例程分配的 DMA 资源。 如果驱动程序同步调用其中一个例程, 则 ExecutionRoutine 参数是可选的,可以省略。 在这种情况下,驱动程序可以使用由调用分配的适配器对象和映射寄存器。 驱动程序启动 DMA 传输后,驱动程序可以调用 FreeAdapterObject 来解除分配适配器对象,并在必要时注册映射。
FreeAdapterChannel 例程类似于 FreeAdapterObject。 FreeAdapterChannel 始终释放适配器对象和任何分配的映射寄存器。 如果 AllocationAction = DeallocateObject,则此行为类似于 FreeAdapterObject 的行为。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | 从Windows 8开始可用。 |
目标平台 | 桌面 |
标头 | wdm.h(包括 Wdm.h、Ntddk.h、Ntifs.h) |
IRQL | <= DISPATCH_LEVEL |