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 可用于解除分配通过调用 AllocateAdapterChannelExGetScatterGatherListExBuildScatterGatherListEx 例程分配的 DMA 资源。 如果驱动程序同步调用其中一个例程, 则 ExecutionRoutine 参数是可选的,可以省略。 在这种情况下,驱动程序可以使用由调用分配的适配器对象和映射寄存器。 驱动程序启动 DMA 传输后,驱动程序可以调用 FreeAdapterObject 来解除分配适配器对象,并在必要时注册映射。

FreeAdapterChannel 例程类似于 FreeAdapterObjectFreeAdapterChannel 始终释放适配器对象和任何分配的映射寄存器。 如果 AllocationAction = DeallocateObject,则此行为类似于 FreeAdapterObject 的行为。

要求

要求
最低受支持的客户端 从Windows 8开始可用。
目标平台 桌面
标头 wdm.h(包括 Wdm.h、Ntddk.h、Ntifs.h)
IRQL <= DISPATCH_LEVEL

另请参阅

AdapterControl

AdapterListControl

AllocateAdapterChannel

AllocateAdapterChannelEx

BuildScatterGatherListEx

DMA_ADAPTER

DMA_OPERATIONS

FreeAdapterChannel

FreeMapRegisters

GetScatterGatherListEx

IO_ALLOCATION_ACTION

IoGetDmaAdapter