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 |