PVIDEO_HW_QUERY_INTERFACE Rückruffunktion (video.h)

HwVidQueryInterface gibt eine vom Miniporttreiber implementierte Funktionsschnittstelle zurück, die von einem untergeordneten Gerät aufgerufen werden kann.

Syntax

PVIDEO_HW_QUERY_INTERFACE PvideoHwQueryInterface;

VP_STATUS PvideoHwQueryInterface(
  PVOID HwDeviceExtension,
  PQUERY_INTERFACE QueryInterface
)
{...}

Parameter

HwDeviceExtension

Zeiger auf den Speicherbereich des Miniporttreibers pro Adapter. Weitere Informationen finden Sie unter Geräteerweiterungen.

QueryInterface

Zeiger auf eine QUERY_INTERFACE Struktur, in der der Miniporttreiber Informationen zur unterstützten Schnittstelle zurückgeben soll.

Rückgabewert

HwVidQueryInterface sollte bei Erfolg NO_ERROR zurückgeben. Andernfalls sollte der entsprechende Fehlercode zurückgegeben werden. Beispielsweise sollte ein Miniporttreiber ERROR_OUTOFMEMORY zurückgeben, wenn er zum Abschließen des Vorgangs keinen Arbeitsspeicher zuweisen kann.

Hinweise

HwVidQueryInterface macht einen Kommunikationsmechanismus zwischen dem Video-Miniporttreiber und dem Treiber eines untergeordneten Geräts verfügbar. Ein Miniporttreiber, der einen solchen Mechanismus verfügbar macht, sollte diese Funktion implementieren.

Der Videoport ruft HwVidQueryInterface auf, wenn er eine IRP_MN_QUERY_INTERFACE-Anforderung empfängt. Wenn der Miniporttreiber den Anruf fehlschlägt, übergibt der Videoporttreiber die Anforderung an das übergeordnete Gerät des Miniporttreibers.

HwVidQueryInterface sollte die Member der INTERFACE-Struktur ausfüllen, auf die QueryInterface-Interface> wie folgt verweist:

  • Legen Sie Größe auf die Anzahl der Bytes in der INTERFACE-Struktur fest. Dieser Wert darf die anzahl der by queryInterface->Size angegebenen Bytes nicht überschreiten.
  • Legen Sie Version auf die Version der Schnittstelle fest, die vom Miniporttreiber zurückgegeben wird. Der Miniporttreiber sollte am besten mit der version übereinstimmen, die vom untergeordneten Treiber in QueryInterface->Version angefordert wurde.
  • Legen Sie Context fest, um auf einen vom Miniporttreiber definierten Kontext für die Schnittstelle zu zeigen. In der Regel legt ein Miniporttreiber Context so fest, dass er auf die durch HwDeviceExtension identifizierte Geräteerweiterung verweist.
  • Initialisieren Sie InterfaceReference und InterfaceDereference , um auf die vom Miniporttreiber implementierten Referenz- und Dereferenzierungsroutinen für diese Schnittstelle zu verweisen.
  • Initialisieren Sie alle zusätzlichen schnittstellenspezifischen Member, um auf die entsprechenden Routinen der verfügbar gemachten Schnittstelle zu verweisen.
Ein Miniporttreiber, der eine Schnittstelle zurückgibt, ist für den Verweis auf die Schnittstelle durch Aufrufen von QueryInterface->Interface.InterfaceReference verantwortlich. Der untergeordnete Treiber, der die Schnittstelle anfordert, ist für deren Dereferenzierung verantwortlich, wenn der Treiber die Schnittstelle nicht mehr benötigt, indem er QueryInterface->Interface.InterfaceDereference aufruft. Wenn der untergeordnete Treiber die Schnittstelle an eine andere Komponente übergibt, ist das untergeordnete Element für das Entfernen eines weiteren Verweises verantwortlich, und die andere Komponente ist dafür verantwortlich, den zusätzlichen Verweis zu entfernen, wenn sie keinen Zugriff mehr auf die Schnittstelle benötigt. Durch Verweisen kann ein übergeordnetes Element bestimmen, wann die Schnittstelle noch vom untergeordneten Gerät benötigt wird und folglich, wann das übergeordnete Element alle schnittstellengehörigen Ressourcen freigeben kann.

Der Treiber eines untergeordneten Geräts kann jederzeit ohne Wissen des Videoporttreibers über die funktionen, die von HwVidQueryInterface verfügbar gemacht werden, in den Miniporttreiber aufrufen. Folglich muss der Miniporttreiber den Zugriff auf sich selbst synchronisieren, indem er die vom Videoporttreiber verwaltete Gerätesperre in allen Funktionen abruft und freigibt, die von HwVidQueryInterface verfügbar gemacht werden.

Ein untergeordnetes Gerät wird von HwVidGetVideoChildDescriptor aufgezählt.

HwVidQueryInterface sollte ausgelagert werden.

Anforderungen

Anforderung Wert
Zielplattform Desktop
Kopfzeile video.h (Video.h einschließen)

Weitere Informationen

HwVidGetVideoChildDescriptor

QUERY_INTERFACE

VideoPortAcquireDeviceLock

VideoPortReleaseDeviceLock