EVT_ACX_STREAM_RELEASE_HARDWARE Rückruffunktion (acxstreams.h)

Das Ereignis EvtAcxStreamReleaseHardware weist den Treiber an, alle dem Datenstrom zugeordnete Hardware freizugeben und den Stream in den Status Beenden zu versetzen.

Syntax

EVT_ACX_STREAM_RELEASE_HARDWARE EvtAcxStreamReleaseHardware;

NTSTATUS EvtAcxStreamReleaseHardware(
  ACXSTREAM Stream
)
{...}

Parameter

Stream

Ein ACXSTREAM-Objekt stellt einen audiostream dar, der von einer Verbindung erstellt wird. Der Stream besteht aus einer Liste von Elementen, die basierend auf den Elementen der übergeordneten Verbindung erstellt wurden. Weitere Informationen finden Sie unter ACX – Zusammenfassung von ACX-Objekten.

Rückgabewert

Gibt zurück STATUS_SUCCESS , wenn der Aufruf erfolgreich war. Andernfalls wird ein geeigneter Fehlercode zurückgegeben. Weitere Informationen finden Sie unter Verwenden von NTSTATUS-Werten.

Hinweise

Ein AcxStream unterstützt verschiedene Zustände. Diese Zustände geben an, wann Audio fließt (RUN-Zustand), Audio nicht fließt, aber die Audiohardware vorbereitet ist (PAUSE-Zustand) oder audio nicht fließt und Audiohardware nicht vorbereitet ist (STOP-Zustand).

Das EvtAcxStreamReleaseHardware-Ereignis wechselt den Streamzustand vom Status Anhalten in den Status Beenden. Der Treiber sollte alle Hardwareressourcen freigeben, die für das Streaming in diesem Ereignis zugewiesen wurden, z. B. DMA-Engines. Sobald sich der Stream im Status Beenden befindet, empfängt der Treiber möglicherweise das EvtAcxStreamPrepareHardware-Ereignis , um in den Pause-Zustand zu wechseln, oder das ACXSTREAM-Objekt wird möglicherweise zerstört.

ACX-Ereignisse entsprechen KS-Zuständen, wie in dieser Tabelle beschrieben.

Startstatus Endzustand ACX-Treiberereignis mit dem Namen Hinweise
STOP ERWERBEN PrepareHardware Der Treiber führt Hardwarezuordnungen und Vorbereitungen aus.
ERWERBEN PAUSE (Kein Anruf)
PAUSE AUSFÜHREN Ausführen
AUSFÜHREN PAUSE Anhalten
PAUSE ERWERBEN (Kein Anruf)
ERWERBEN STOP ReleaseHardware Treiber gibt Hardwarezuordnungen frei

Wenn die Arbeit mit dem Stream abgeschlossen ist, wird EvtAcxStreamFreeRtPackets nach EvtAcxStreamReleaseHardware aufgerufen. Dadurch kann die Releasehardwarephase die Aufhebung der Bandbreitenzuweisung beenden, DMA-Ressourcen und alle anderen zugehörigen Bereinigungen freigeben, bevor die zugeordneten RT-Puffer freigegeben werden.

Speicherbereinigung

Die Entsorgung der Ressourcen des Streams kann in der Streamkontextbereinigung des Treibers erfolgen (nicht zerstören). Setzen Sie niemals die Entsorgung von elementen, die freigegeben sind, in den Rückruf des Kontexts "Destroy" eines Objekts. Diese Anleitung gilt für alle ACX-Objekte.

Der Destroy-Rückruf wird aufgerufen, nachdem der letzte Verweis nicht mehr vorhanden ist, wenn er unbekannt ist.

Der Cleanup-Rückruf des Streams wird aufgerufen, wenn das Handle geschlossen wird. Eine Ausnahme besteht darin, wenn der Treiber den Stream in seinem Rückruf erstellt hat. Wenn ACX diesen Stream nicht zu seiner stream-bridge hinzufügen konnte, bevor er vom Streamerstellungsvorgang zurückgegeben wird, wird der Stream asynchron abgebrochen, und der aktuelle Thread gibt einen Fehler an den create-stream-Client zurück. Dem Stream sollten zu diesem Zeitpunkt keine Mem-Zuordnungen zugeordnet sein.

Beispiel

Das Beispiel für die Verwendung ist unten dargestellt.

    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-Anforderungen

ACX-Mindestversion: 1.0

Weitere Informationen zu ACX-Versionen finden Sie unter ACX-Versionsübersicht.

Anforderungen

Anforderung Wert
Header acxstreams.h
IRQL PASSIVE_LEVEL

Weitere Informationen