Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In diesem Thema werden ACX-Schaltkreise erläutert. Eine allgemeine Übersicht über ACX und eine Liste der ACX-Begriffe finden Sie in der Übersicht über ACX-Audioklassenerweiterungen.
Wie in der Zusammenfassung von ACX-Objekten beschrieben, stellt ein AcxCircuit -Objekt einen teilweisen oder vollständigen Audiopfad zu einem vom Benutzer wahrgenommenen Audiogerät (Lautsprecher, Mikrofon usw.) dar. Ein AcxCircuit verfügt über mindestens einen Eingabe-Pin und einen Ausgabe-Pin (ACXPIN), und er kann ein oder mehrere AcxElements wie Objekte aggregieren. Der Schaltkreis stellt einen vorhandenen Endpunkt und seine Funktionen dar.
Und ACX Stream ist eine Treiberkomponente, die erstellt wird, um einen Audiodatenstrom darzustellen, der von einem Circuit erstellt wird. Der Stream besteht aus einer Liste von Elementen, die basierend auf den Elementen des übergeordneten Schaltkreises erstellt wurden. Ein Stream Circuit ist eine Schaltung in einer Multistapelarchitektur (partieller Audiopfad), die direkt mit dem Streamingdienst für den oberen Benutzermodus schnittstelle. Ein Core Circuit ist ein Schaltkreis in einer Multistapelarchitektur (partieller Audiopfad), der die Identität des Audioendpunktgeräts angibt.
ACX-Schaltkreisidentifikation
Jeder ACX-Schaltkreis verfügt über einen Schaltkreisbezeichner. ACX definiert Folgendes:
Name (str), identifiziert diesen Schaltkreis-Audiogerätetyp eindeutig. Es wird verwendet, um die INF-Einstellung zu finden, und ist Teil des symbolischen Links, der für den Zugriff auf diese Schaltung von einem Remotegerät verwendet wird. Beispiel: "Render0", "Render1" oder "Capture0".
Symbolische Verknüpfung. Ein symbolischer Link ist allen freigelegten Schaltkreisen zugeordnet. Clients verwenden diese symbolische Verknüpfung, um einen Kommunikationspfad mit dem Gerät/schaltkreis zu öffnen.
Komponenten-ID (GUID) des Schaltkreises. Identifiziert die Schaltkreisinstanz eindeutig (anbieterspezifisch). Sie kann nicht in den AcxCircuitTemplate-Bindungen verwendet werden, wenn der Circuit-URI angegeben wurde.
Komponenten-URI des Schaltkreises (str). Identifiziert die Schaltkreisinstanz eindeutig (anbieterspezifisch). Sie kann nicht in den AcxCircuitTemplate-Bindungen verwendet werden, wenn die Circuit-ID angegeben wurde.
Komponenten-ID (guid) von Circuit Factory. Identifiziert eindeutig die Instanz der Schaltkreisfabrik (spezifisch für den Hersteller). Sie kann nicht in den AcxCircuitTemplate-Bindungen verwendet werden, wenn der Circuit Factory-URI angegeben wurde.
Komponenten-URI (str) von Circuit Factory. Identifiziert die Instanz der Schaltkreisfabrik eindeutig (lieferantenspezifisch). Sie kann nicht in den AcxCircuitTemplate-Bindungen verwendet werden, wenn die Circuit Factory-ID angegeben wurde.
AcxCircuitCreate
Die AcxCircuitCreate-Funktion wird verwendet, um einen ACXCIRCUIT zu erstellen. Eine undurchsichtige ACXCIRCUIT_INIT Struktur, die von der AcxCircuitCreate-Funktion verwendet wird. AcxCircuitInitAllocate wird verwendet, um die ACXCIRCUIT_INIT Struktur zu initialisieren.
AcxFactoryCircuit
Ein ACX-Treiber kann auch AcxFactoryCircuit-Objekte (Schaltkreiseanbieter) während der Hochlauffolge mithilfe der AcxFactoryCircuitCreate-Funktion und der AcxDeviceAddFactoryCircuit-Funktion erstellen.
ACX-Schaltkreiskomposition
ACX bindet Schaltkreise zusammen, bis sie einen vollständigen Audiopfad bilden. ACX verwendet Audiobindungen, um Audioschaltungen miteinander zu verbinden. Weitere Informationen finden Sie unter ACX Multicircuit Composition.
Dynamische Erstellung des ACX-Schaltkreises (zu jeder Zeit)
ACX kann einen dynamischen Schaltkreis bei Bedarf erstellen. Dazu weist der Treiber eine WDFDEVICE_INIT Struktur zu, indem WdfPdoInitAllocate aufgerufen wird. Der Treiber gibt dann an, welche PnP/Power-Rückrufe er empfangen möchte, und erstellt das Gerät. Der Treiber instanziiert das neue Gerät/die neue Leitung durch Aufrufen von AcxDeviceAddCircuitDevice. Weitere Informationen finden Sie unter ACX-Geräteenumeration.
Dynamische Entfernung des ACX-Schaltkreises
Der Treiber ruft AcxDeviceRemoveCircuitDevice auf, um das Audiogerät aus der Geräteliste zu entfernen. Dadurch wird die Abschaltsequenz auf dem ACX-Schaltkreisgerät/der Schaltkreisentität initiiert. Das Schaltkreisgerät/die Schaltkreisschaltung wird asynchron gelöscht. Weitere Informationen finden Sie unter ACX-Geräteenumeration.
AcxDeviceRemoveCircuit und AcxDeviceDetachCircuit
Es gibt zwei gängige Methoden zum Verwalten der Schaltkreisendung. AcxDeviceDetachCircuit oder AcxDeviceRemoveCircuit.
Wenn der Aufrufer den AcxDeviceDetachCircuit aufruft, darf AcxDeviceRemoveCircuit nicht aufgerufen werden. Wenn der aufrufende Treiber den Schaltkreis nach AcxDeviceDetachCircuit löschen möchte, sollte er WdfObjectDelete verwenden.
Durch Aufrufen von AcxDeviceRemoveCircuit teilt der aufrufende Treiber ACX mit, diese Schaltung zu entfernen und sie vom Gerät zu entfernen/zu löschen. In diesem Fall ist es nicht erforderlich, WdfObjectDelete auf dem Schaltkreis aufzurufen.
In der Zusammenfassung bedeutet AcxDeviceDetachCircuit , dass der Treiber die Verwaltung der Lebensdauer der Schaltkreise besitzt, AcxDeviceRemoveCircuit bedeutet, dass der Schaltkreis entfernt und gelöscht wird.
Allgemeine Informationen zur Verwaltung der WDF-Objektlebensdauer finden Sie unter Framework Object Life Cycle.
AcxDeviceRemoveCircuitDevice
Anders als bei der oben beschriebenen Schaltungstermination wird AcxDeviceRemoveCircuitDevice vom Audiotreiber verwendet, um einen vorhandenen Audioendpunkt zu entfernen. Dieser kann während des Lebenszyklus des Treibers jederzeit aufgerufen werden.
Treiber können sich auch dafür entscheiden, Audiogeräte beim Neuausbalancieren immer zu zerstören und neu zu erstellen. Dies ist das gleiche Szenario oben, wenn das Gerät erkennt, dass die neuen Einstellungen nicht mit den alten kompatibel sind.
Die Löschung des Schaltkreises muss in EvtDevicePrepareHardware/EvtDeviceReleaseHardware-Rückrufen erfolgen, und der neue Schaltkreis wird in EvtDevicePrepareHardware neu erstellt. Der Treiber löscht einen Schaltkreis durch Aufheben der Registrierung des Schaltkreises (mit AcxDeviceRemoveCircuit).
EvtAcxCircuitReleaseHardware (EVT_ACX_CIRCUIT_RELEASE_HARDWARE) Rückruffunktion
Wenn ein Treiber eine EvtAcxCircuitReleaseHardware-Rückruffunktion registriert hat, ruft es das Framework während der folgenden Übergänge auf:
- Ressource rebalancing
- Geordnetes Entfernen
- Überraschungsentfernung
Das ACX-Framework ruft die EvtAcxCircuitReleaseHardware-Rückruffunktion auf, nachdem das WDF-Framework das Senden von E/A-Anforderungen an das Gerät beendet hat, alle dem Gerät zugewiesenen Unterbrechungen deaktiviert und getrennt wurden und das Gerät deaktiviert wurde.
Das ACX-Framework ruft die EvtAcxCircuitReleaseHardware-Rückruffunktion auf, bevor das WDF-Framework die EvtDeviceReleaseHardware-Rückruffunktion des Treibers aufruft.
Wenn das Framework evtAcxCircuitReleaseHardware aufruft, ist der PDO für das Gerät noch vorhanden und kann nach Geräteinformationen abgefragt werden, die im ausgeschalteten Zustand verfügbar sind, z. B. PCI-Konfigurationszustand.
Darüber hinaus werden die übersetzten Hardwareressourcen, die das Framework für EvtDeviceReleaseHardware bereitstellt, weiterhin dem Gerät zugewiesen. Der Hauptzweck dieser Rückruffunktion besteht darin, diese Ressourcen freizugeben, und insbesondere die Zuordnung von Speicherressourcen, die der EvtAcxCircuitPrepareHardware-Rückruffunktion des Treibers zugeordnet ist. Der Treiber kann diesen Rückruf auch verwenden, um alle anderen ACXCIRCUIT-Verwaltungsaktivitäten auszuführen, die möglicherweise im heruntergeschalteten Zustand erforderlich sind. In der Regel sollten alle anderen Hardware-Herunterfahren-Vorgänge in der EvtDeviceD0Exit-Rückruffunktion des Treibers ausgeführt werden.
Das ACX-Framework ruft immer die EvtAcxCircuitReleaseHardware-Rückruffunktion des Treibers auf, wenn die EvtAcxCircuitPrepareHardware-Rückruffunktion des Treibers aufgerufen wurde, es sei denn, die EvtAcxCircuitPrepareHardware hat einen Fehlercode zurückgegeben.
Weitere Informationen zu Hardwareressourcen finden Sie unter Einführung in Hardwareressourcen.
EvtAcxFactoryCircuitReleaseHardware (EVT_ACX_FACTORY_CIRCUIT_RELEASE_HARDWARE) Rückruffunktion
Wenn das Framework die EvtAcxFactoryCircuitReleaseHardware aufruft, ist der PDO für das Gerät noch vorhanden und kann nach Geräteinformationen abgefragt werden, die im ausgeschalteten Zustand verfügbar sind, z. B. PCI-Konfigurationszustand.
Darüber hinaus werden die übersetzten Hardwareressourcen, die das Framework für EvtDeviceReleaseHardware bereitstellt, weiterhin dem Gerät zugewiesen. Der Hauptzweck dieser Rückruffunktion besteht darin, diese Ressourcen freizugeben, und insbesondere die Zuordnung von Speicherressourcen, die der EvtAcxCircuitPrepareHardware-Rückruffunktion des Treibers zugeordnet ist. Der Treiber kann diesen Rückruf auch verwenden, um alle anderen ACXCIRCUIT-Verwaltungsaktivitäten auszuführen, die möglicherweise im heruntergeschalteten Zustand erforderlich sind. In der Regel sollten alle anderen Hardware-Herunterfahren-Vorgänge in der EvtDeviceD0Exit-Rückruffunktion des Treibers ausgeführt werden.
Das ACX-Framework ruft immer die EvtAcxFactoryCircuitReleaseHardware-Rückruffunktion des Treibers auf, wenn die EvtAcxFactoryCircuitPrepareHardware-Rückruffunktion des Treibers aufgerufen wurde, es sei denn, die EvtAcxFactoryCircuitPrepareHardware hat einen Fehlercode zurückgegeben.
Weitere Informationen zum Verwalten von WDF- und Schaltkreisobjekten finden Sie unter ACX WDF Driver Lifetime Management.
Siehe auch
Übersicht über ACX-Audioklassenerweiterungen
ACX Multi stack cross driver communications