Abrufen eines HDAUDIO_BUS_INTERFACE DDI-Objekts
Die folgende Tabelle zeigt die Eingabeparameterwerte, die der Funktionstreiber in die IRP_MN_QUERY_INTERFACE IOCTL schreibt, um eine HDAUDIO_BUS_INTERFACE-Struktur und ein Kontextobjekt für die Version des HD Audio DDI abzurufen, die diese Struktur definiert.
Parameter | Wert |
---|---|
CONST GUID *InterfaceType |
GUID_HDAUDIO_BUS_INTERFACE |
USHORT-Größe |
sizeof(HDAUDIO_BUS_INTERFACE) |
USHORT-Version |
0x0100 |
PINTERFACE-Schnittstelle |
Zeiger auf HDAUDIO_BUS_INTERFACE Struktur |
PVOID-SchnittstelleSpecificData |
NULL |
Der Funktionstreiber weist den Speicher für die HDAUDIO_BUS_INTERFACE-Struktur zu und enthält einen Zeiger auf diese Struktur in der IOCTL. In der obigen Tabelle wird der Zeiger auf die HDAUDIO_BUS_INTERFACE-Struktur in den Typ PINTERFACE umgewandelt, bei dem es sich um einen Zeiger auf eine Struktur vom Typ INTERFACE handelt. Die Namen und Typen der ersten fünf Member von HDAUDIO_BUS_INTERFACE entsprechen denen der fünf Member von INTERFACE. HDAUDIO_BUS_INTERFACE enthält zusätzliche Member, die Funktionszeiger auf die DDI-Routinen sind. Als Reaktion auf den Empfang des IOCTL vom Funktionstreiber füllt der HD Audio-Bustreiber die gesamte HDAUDIO_BUS_INTERFACE-Struktur aus.
Die folgende Tabelle zeigt die Werte, die der HD Audio-Bustreiber in die ersten fünf Member der HDAUDIO_BUS_INTERFACE-Struktur schreibt.
Member | Wert |
---|---|
USHORT-Größe |
sizeof(HDAUDIO_BUS_INTERFACE) |
USHORT-Version |
0x0100 |
PVOID-Kontext |
Kontextinformationen, die als erster Aufrufparameter an jede DDI-Routine übergeben werden müssen |
PINTERFACE_REFERENCE InterfaceReference |
Zeiger auf eine Routine, die die Verweisanzahl des Kontextobjekts erhöht |
PINTERFACE_DEREFERENCE InterfaceDereference |
Zeiger auf eine Routine, die die Verweisanzahl des Kontextobjekts verringert |
In der obigen Tabelle verweist das Context-Element auf ein Kontextobjekt, das Informationen enthält, die für den jeweiligen instance des HD Audio-Baseline-DDI spezifisch sind, den der Client aus dem IOCTL erhält. Beim Aufrufen einer der Routinen im DDI muss der Clientfunktionstreiber immer den Context-Zeigerwert als ersten Aufrufparameter angeben. Die Kontextinformationen sind für den Client undurchsichtig. Der HD Audio-Bustreiber erstellt für jeden Client ein anderes Kontextobjekt. Wenn das Kontextobjekt nicht mehr erforderlich ist, gibt der Client das Kontextobjekt frei, indem er die In der vorherigen Tabelle gezeigte InterfaceDereference-Routine aufruft. Bei Bedarf kann ein Client zusätzliche Verweise auf das -Objekt erstellen, indem er die InterfaceReference-Routine aufruft, aber der Client ist für die Freigabe dieser Verweise verantwortlich, wenn er sie nicht mehr benötigt.