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 支持不同的状态。 这些状态指示音频何时流动(RUN 状态),音频未流动,但音频硬件已准备好(PAUSE 状态),或者音频未流动,音频硬件未准备(停止状态)。

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

ACX 事件类似于 KS 状态,如下表所述。

启动状态 结束状态 调用 ACX 驱动程序事件 笔记
获得 PrepareHardware 驱动程序执行硬件分配和准备
获得 暂停 (无呼叫)
暂停
暂停 暂停
暂停 获得 (无呼叫)
获得 ReleaseHardware 驱动程序发布硬件分配

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

内存清理

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

在最后一个 ref 消失后调用销毁回调,当它未知时。

关闭句柄时会调用流的清理回调。 这一点的一个例外是驱动程序在其回调中创建流。 如果 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 版本概述

要求

要求 价值
标头 acxstreams.h
IRQL PASSIVE_LEVEL

另请参阅