EVT_ACX_STREAM_RELEASE_HARDWARE回调函数 (acxstreams.h)

EvtAcxStreamReleaseHardware 事件告知驱动程序释放为流分配的任何硬件,并将流置于停止状态。

语法

EVT_ACX_STREAM_RELEASE_HARDWARE EvtAcxStreamReleaseHardware;

NTSTATUS EvtAcxStreamReleaseHardware(
  ACXSTREAM Stream
)
{...}

参数

Stream

ACXSTREAM 对象表示由线路创建的音频流。 该流由基于父线路的元素创建的元素列表组成。 有关详细信息,请参阅 ACX - ACX 对象的摘要

返回值

STATUS_SUCCESS如果调用成功,则返回 。 否则,它将返回相应的错误代码。 有关详细信息,请参阅 使用 NTSTATUS 值

注解

AcxStream 支持不同的状态。 这些状态指示音频 (运行状态) ,音频未流动,但音频硬件准备 (PAUSE 状态) ,或者音频未流动,音频硬件未准备 (停止状态) 。

EvtAcxStreamReleaseHardware 事件会将流状态从“暂停”状态转换为“停止”状态。 驱动程序应释放在此事件中为流式处理分配的任何硬件资源,例如 DMA 引擎。 一旦流处于停止状态,驱动程序可能会收到 EvtAcxStreamPrepareHardware 事件以转换为暂停状态,或者 ACXSTREAM 对象可能会被销毁。

ACX 事件类似于此表中所述的 KS 状态。

开始状态 结束状态 调用的 ACX 驱动程序事件 备注
STOP 获得 PrepareHardware 驱动程序执行硬件分配和准备
获得 PAUSE (无呼叫)
PAUSE 运行 运行
运行 PAUSE 暂停
PAUSE 获得 (无调用)
获得 STOP ReleaseHardware 驱动程序发布硬件分配

处理流完成后, EvtAcxStreamFreeRtPackets 在 EvtAcxStreamReleaseHardware 之后调用。 这样,在释放分配的 RT 缓冲区之前,发布硬件阶段就可以完成解除分配带宽、释放 DMA 资源和任何其他相关的清理。

内存清理

可以在驱动程序的流上下文清理中处置流资源, (不会销毁) 。 切勿在对象的上下文销毁回调中处置共享的任何内容。 本指南适用于所有 ACX 对象。

销毁回调在最后一个引用消失后调用,如果它是未知的。

关闭句柄时,将调用流的清理回调。 这种情况的一个例外是驱动程序在其回调中创建流时。 如果 ACX 在从流-创建操作返回之前未能将此流添加到其流桥,则会取消该流异步,并且当前线程会向 create-stream 客户端返回错误。 此时,流不应分配任何 mem 分配。

示例

示例用法如下所示。

    ACX_STREAM_CALLBACKS streamCallbacks;
    ACX_STREAM_CALLBACKS_INIT(&streamCallbacks);
    streamCallbacks.EvtAcxStreamReleaseHardware = EvtStreamReleaseHardware;
    ...
    status = AcxStreamInitAssignAcxStreamCallbacks(StreamInit, &streamCallbacks);
PAGED_CODE_SEG
NTSTATUS
EvtStreamReleaseHardware(
    _In_ ACXSTREAM Stream
    )
{
    PSTREAM_CONTEXT ctx;
    NTSTATUS        status;

    PAGED_CODE();

    ctx = GetStreamContext(Stream);

    status = ReleaseStreamHardware(Stream);

    ctx->StreamState = AcxStreamStateStop;

    return status;
}

ACX 要求

最低 ACX 版本: 1.0

有关 ACX 版本的详细信息,请参阅 ACX 版本概述

要求

要求
Header acxstreams.h
IRQL PASSIVE_LEVEL

另请参阅