PFREE_DMA_BUFFER回调函数 (hdaudio.h)

FreeDmaBuffer 例程释放以前由调用 AllocateDmaBuffer分配的 DMA 缓冲区。

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

语法

PFREE_DMA_BUFFER PfreeDmaBuffer;

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

参数

[in] _context

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

[in] Handle

标识 DMA 引擎的句柄。 此句柄值是从上一次调用 <AllocateCaptureDmaEngineAllocateRenderDmaEngine中获取的。

返回值

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

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

言论

FreeDmaBuffer 例程与 AllocateDmaBuffer 例程结合使用。 这两个例程仅在 HD Audio DDI 的 HDAUDIO_BUS_INTERFACE 版本中可用。 此 DDI 不包括 AllocateContiguousDmaBufferSetupDmaEngineWithBdlFreeContiguousDmaBuffer 例程,这些例程永远不会与 AllocateDmaBufferFreeDmaBuffer结合使用。 与 SetupDmaEngineWithBdl不同,它将 DMA 引擎配置为使用以前分配的 DMA 缓冲区,AllocateDmaBuffer 分配 DMA 缓冲区并将 DMA 引擎配置为使用缓冲区。

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

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

要求

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

另请参阅

AllocateDmaBuffer

HDAUDIO_BUS_INTERFACE

HDAUDIO_BUS_INTERFACE_V2

SetupDmaEngineWithBdl