WDF_QUERY_INTERFACE_CONFIG Struktur (wdfqueryinterface.h)

[Gilt nur für KMDF]

Die WDF_QUERY_INTERFACE_CONFIG Struktur beschreibt eine treiberdefinierte Schnittstelle.

Syntax

typedef struct _WDF_QUERY_INTERFACE_CONFIG {
  ULONG                                          Size;
  PINTERFACE                                     Interface;
  const GUID                                     *InterfaceType;
  BOOLEAN                                        SendQueryToParentStack;
  PFN_WDF_DEVICE_PROCESS_QUERY_INTERFACE_REQUEST EvtDeviceProcessQueryInterfaceRequest;
  BOOLEAN                                        ImportInterface;
} WDF_QUERY_INTERFACE_CONFIG, *PWDF_QUERY_INTERFACE_CONFIG;

Member

Size

Die Größe (in Bytes) dieser Struktur.

Interface

Ein Zeiger auf eine INTERFACE-Struktur , die die treiberdefinierte Schnittstelle beschreibt.

InterfaceType

Ein Zeiger auf die GUID, die die Schnittstelle identifiziert.

Hinweis

Erstellen Sie beim Einführen einer neuen Version einer vorhandenen Schnittstelle eine neue GUID, anstatt die Felder "Größe " oder " Version " der INTERFACE-Struktur zu ändern. Weitere Informationen finden Sie unter Verwenden von Driver-Defined Schnittstellen.

SendQueryToParentStack

Wenn TRUE und ihr Treiber ein Geräteobjekt angibt, das ein physisches Geräteobjekt (PDO) darstellt, wenn er WdfDeviceAddQueryInterface aufruft, sendet das Framework Anforderungen für die Schnittstelle an den oberen Rand des Treiberstapels des übergeordneten Geräts. Wenn dieses Element FALSCH ist oder wenn das Geräteobjekt keine PDO darstellt, sendet das Framework keine Anforderungen an den Stapel des übergeordneten Geräts. Weitere Informationen finden Sie im folgenden Abschnitt "Hinweise".

EvtDeviceProcessQueryInterfaceRequest

Ein Zeiger auf die EvtDeviceProcessQueryInterfaceRequest-Ereignisrückruffunktion des Treibers, die aufgerufen wird, wenn ein anderer Treiber die Schnittstelle anfordert.

ImportInterface

Wenn TRUE, unterstützt die Schnittstelle die zweidirektionale Kommunikation zwischen Ihrem Treiber und Treibern, die die Schnittstelle anfordern.

Wenn dieses Mitglied FALSCH ist, unterstützt die Schnittstelle die einmalige Kommunikation von Ihrem Treiber zu Treibern, die die Schnittstelle anfordern.

Bemerkungen

Die WDF_QUERY_INTERFACE_CONFIG Struktur wird als Eingabe für die WdfDeviceAddQueryInterface-Methode verwendet.

Für jede vom Treiber exportierte Treiberschnittstelle müssen Sie eine WDF_QUERY_INTERFACE_CONFIG Struktur zuweisen, die die Schnittstelle darstellt. Andere Treiber können den Zugriff auf die Schnittstelle anfordern, indem WdfFdoQueryForInterface aufgerufen wird.

Wenn Ihre Schnittstelle die zweiseitige Kommunikation zwischen dem anfordernden Treiber und Ihrem Treiber unterstützen soll, legen Sie das ImportInterface-Element auf TRUE fest. Wenn ImportInterfaceTRUE ist, kann die struktur, die vom angeforderten Treiber bereitgestellt wird, Daten enthalten, die Ihr Treiber lesen kann. In diesem Fall:

  • Die Rückruffunktion EvtDeviceProcessQueryInterfaceRequest ist erforderlich, und sie muss die Schnittstellenstruktur initialisieren, die der anfordernde Treiber bereitstellt.
  • Da die Rückruffunktion EvtDeviceProcessQueryInterfaceRequest die Schnittstelle zum anfordernden Treiber bereitstellt, kann das Interface-Element von WDF_QUERY_INTERFACE_CONFIGNULL sein. Wenn Sie einen Nicht-NULL-Zeiger bereitstellen, überprüft das Framework, ob die Größen- und Versionswerte, die der anfordernde Treiber bereitstellt, gleich oder größer sind als die Werte in Ihrer registrierten INTERFACE-Struktur . Wenn eine dieser Werte kleiner ist, lehnt das Framework die Anforderung ab. Wenn Sie keinen Wert für Die Schnittstelle angeben, muss ihre EvtDeviceProcessQueryInterfaceRequest-Rückruffunktion diese Werte überprüfen.

Wenn Sie möchten, dass Ihre Schnittstelle nur die einmalige Kommunikation von Ihrem Treiber an den anfordernden Treiber unterstützt, legen Sie "ImportInterface" auf "FALSE" fest. Die Schnittstellenstruktur, die der angeforderte Treiber bereitstellt, kann nur Daten empfangen, die Ihr Treiber bereitstellt. In diesem Fall:
  • Die Rückruffunktion EvtDeviceProcessQueryInterfaceRequest ist optional.
  • Das Interface-Element darf nicht NULL sein. Das Framework überprüft, ob die GUID-, Größen- und Versionswerte, die vom angeforderten Treiber bereitgestellt werden, mit den von Ihnen bereitgestellten übereinstimmen, und das Framework lehnt die Anforderung ab, wenn die Werte nicht übereinstimmen. Wenn die Werte gültig sind, initialisiert das Framework die Schnittstellenstruktur, die der angeforderte Treiber bereitstellt, mithilfe der Werte, die Sie für Die Schnittstelle angeben.
Darüber hinaus kann das Interface-ElementNULL sein, wenn der Wert des SendQueryToParentStack-ElementsTRUE ist.

Wenn das Interface-Element nicht NULL ist, kopiert das Framework den Wert in den internen Speicherplatz. Daher kann der Treiber die INTERFACE-Struktur in lokalem, temporärem Speicherplatz zuordnen.

Wenn Ihr Treiber WdfDeviceAddQueryInterface aufruft, kann er die Schnittstelle einem Framework-Geräteobjekt zuordnen, das entweder ein funktionales Geräteobjekt (FDO) oder ein physisches Geräteobjekt (PDO) darstellt. Wenn der Treiber die Schnittstelle einem PDO zuordnet, kann er das SendQueryToParentStack-Element der WDF_QUERY_INTERFACE_CONFIG-Struktur auf TRUE festlegen. Wenn das Framework eine Anforderung für die Schnittstelle abfangen, überprüft es das SendQueryToParentStack-Element , und wenn es auf TRUE festgelegt ist, sendet das Framework die Anforderung an den oberen Rand des Treiberstapels des übergeordneten PDO. Die Anforderung führt daher zwei Treiberstapel nach unten: zuerst der Stapel, der den Treiber enthält, der die Schnittstelle anfordert, und zweitens den Stapel des übergeordneten Geräts der Schnittstelle.

Das Framework stellt zwei Referenz-/Ableitungsmethoden bereit, die Sie mit Ihren Schnittstellen verwenden können, indem Sie ihre Adressen für die Elemente "InterfaceReference " und " InterfaceDereference " der SCHNITTSTELLE-Struktur angeben. Weitere Informationen zu diesen Methoden finden Sie unter WdfDeviceInterfaceReferenceNoOp und WdfDeviceInterfaceDereferenceNoOp.

Treiber sollten diese Struktur initialisieren, indem WDF_QUERY_INTERFACE_CONFIG_INIT aufgerufen wird.

Weitere Informationen zu treiberdefinierte Schnittstellen finden Sie unter Verwenden von Driver-Defined Schnittstellen.

Anforderungen

   
KMDF-Mindestversion 1.0
Header wdfqueryinterface.h (include Wdf.h)

Weitere Informationen

EvtDeviceProcessQueryInterfaceRequest

SCHNITTSTELLE

WDF_QUERY_INTERFACE_CONFIG_INIT

WdfDeviceAddQueryInterface

WdfDeviceInterfaceDereferenceNoOp

WdfDeviceInterfaceReferenceNoOp

WdfFdoQueryForInterface