функция обратного вызова EVT_ACX_STREAM_RELEASE_HARDWARE (acxstreams.h)

Событие EvtAcxStreamReleaseHardware сообщает драйверу освободить любое оборудование, выделенное для потока, и поместить поток в состояние stop.

Синтаксис

EVT_ACX_STREAM_RELEASE_HARDWARE EvtAcxStreamReleaseHardware;

NTSTATUS EvtAcxStreamReleaseHardware(
  ACXSTREAM Stream
)
{...}

Параметры

Stream

Объект ACXSTREAM представляет звуковой поток, созданный каналом. Поток состоит из списка элементов, созданных на основе элементов родительского канала. Дополнительные сведения см. в разделе ACX — сводка по объектам ACX.

Возвращаемое значение

Возвращает STATUS_SUCCESS, если вызов выполнен успешно. В противном случае возвращается соответствующий код ошибки. Дополнительные сведения см. в использовании значений NTSTATUS.

Замечания

AcxStream поддерживает различные состояния. Эти состояния указывают, когда поток звука (состояние RUN), звук не выполняется, но звуковое оборудование подготовлено (состояние PAUSE), или звук не выполняется, а звуковое оборудование не подготовлено (состояние STOP).

Событие EvtAcxStreamReleaseHardware передаст состояние потока из состояния Приостановки в состояние Stop. Драйвер должен освободить все аппаратные ресурсы, выделенные для потоковой передачи в этом событии, например подсистемы DMA. После того как поток находится в состоянии Stop, драйвер может получить событие EvtAcxStreamPrepareHardware для перехода в состояние Приостановки или объекта ACXSTREAM может быть уничтожено.

События ACX аналогичны состояниям KS, как описано в этой таблице.

Состояние запуска Конечное состояние Вызывается событие драйвера ACX Примечания.
ОСТАНОВКА ПРИОБРЕТАТЬ PrepareHardware Драйвер выполняет выделение оборудования и подготовку
ПРИОБРЕТАТЬ PAUSE (Без вызова)
PAUSE БЕГИ Бежать
БЕГИ PAUSE Пауза
PAUSE ПРИОБРЕТАТЬ (Без вызова)
ПРИОБРЕТАТЬ ОСТАНОВКА ReleaseHardware Выпуски аппаратных выделений драйверов

После завершения работы с потоком evtAcxStreamFreeRtPackets вызывается после EvtAcxStreamReleaseHardware. Это позволяет этапу оборудования выпуска завершить очистку пропускной способности, освободить ресурсы DMA и любую другую связанную очистку, прежде чем выделенные буферы RT будут освобождены.

Очистка памяти

Удаление ресурсов потока можно сделать в очистке контекста потока драйвера (а не уничтожено). Никогда не помещайте в контекст объекта все, что совместно используется в контексте объекта, уничтожать обратный вызов. Это руководство относится ко всем объектам 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.

Требования

Требование Ценность
Заголовок acxstreams.h
IRQL пассивный уровень

См. также