PFREE_CONTIGUOUS_DMA_BUFFER回调函数 (hdaudio.h)

FreeContiguousDmaBuffer 程释放通过调用 AllocateContiguousDmaBuffer 分配的 BDL) (DMA 缓冲区和缓冲区描述符列表。

例程的 FreeContiguousDmaBuffer 函数指针类型定义如下。

语法

PFREE_CONTIGUOUS_DMA_BUFFER PfreeContiguousDmaBuffer;

NTSTATUS PfreeContiguousDmaBuffer(
  [in] PVOID _context,
  [in] HANDLE Handle
)
{...}

参数

[in] _context

指定HDAUDIO_BUS_INTERFACE_BDL结构的 Context 成员中的上下文值。

[in] Handle

标识 DMA 引擎的句柄。 此句柄值是从以前调用 AllocateCaptureDmaEngineAllocateRenderDmaEngine 获取的

返回值

FreeContiguousDmaBuffer 如果调用成功,则返回STATUS_SUCCESS。 否则,例程将返回相应的错误代码。 下表显示了一些可能的返回状态代码。

返回代码 说明
STATUS_UNSUCCESSFUL
指示调用方在太高的 IRQL 上运行。
STATUS_INVALID_HANDLE
指示句柄参数值无效。
STATUS_INVALID_DEVICE_REQUEST
指示流未处于重置状态,或者当前未为 DMA 引擎分配任何缓冲区。

注解

FreeContiguousDmaBuffer 程与 SetupDmaEngineWithBdlAllocateContiguousDmaBuffer 例程一起使用。 这三个例程仅在 hd Audio DDI 的 HDAUDIO_BUS_INTERFACE_BDL 版本中可用。 此 DDI 不包括 AllocateDmaBufferFreeDmaBuffer 例程,它们永远不会与 AllocateContiguousDmaBufferSetupDmaEngineWithBdlFreeContiguousDmaBuffer结合使用。 与将 DMA 引擎配置为使用以前分配的 DMA 缓冲区的 SetupDmaEngineWithBdl 不同, AllocateDmaBuffer 既分配 DMA 缓冲区,又将 DMA 引擎配置为使用该缓冲区。 有关详细信息,请参阅 两个 DDI 版本之间的差异

例程在以下任一情况下失败并返回错误代码STATUS_INVALID_DEVICE_REQUEST:

  • 当当前没有为 DMA 引擎分配缓冲区时,客户端将调用 FreeContiguousDmaBuffer
  • 流处于重置以外的状态。

要求

要求
目标平台 桌面
标头 hdaudio.h (包括 Hdaudio.h)
IRQL PASSIVE_LEVEL

另请参阅

AllocateCaptureDmaEngine

AllocateContiguousDmaBuffer

AllocateDmaBuffer

AllocateRenderDmaEngine

FreeDmaBuffer

HDAUDIO_BUS_INTERFACE_BDL

SetupDmaEngineWithBdl