WdfDeviceAddQueryInterface-Funktion (wdfqueryinterface.h)

[Gilt nur für KMDF]

Die WdfDeviceAddQueryInterface-Methode erstellt eine treiberdefinierte Schnittstelle, die andere Treiber abfragen und verwenden können.

Syntax

NTSTATUS WdfDeviceAddQueryInterface(
  [in] WDFDEVICE                   Device,
  [in] PWDF_QUERY_INTERFACE_CONFIG InterfaceConfig
);

Parameter

[in] Device

Ein Handle zu einem Framework-Geräteobjekt.

[in] InterfaceConfig

Ein Zeiger auf eine vom Treiber zugewiesene WDF_QUERY_INTERFACE_CONFIG Struktur, die die Schnittstelle beschreibt.

Rückgabewert

WdfDeviceAddQueryInterface gibt STATUS_SUCCESS zurück, wenn der Vorgang erfolgreich ist. Andernfalls gibt diese Methode möglicherweise einen der folgenden Werte zurück:

Rückgabecode Beschreibung
STATUS_INVALID_DEVICE_REQUEST
Die Methode wurde bei der falschen IRQL aufgerufen.
STATUS_INVALID_PARAMETER
Ein Eingabeparameter (möglicherweise auch Elemente der WDF_QUERY_INTERFACE_CONFIG Struktur) war ungültig.
STATUS_INFO_LENGTH_MISMATCH
Die Größe der WDF_QUERY_INTERFACE_CONFIG Struktur war falsch.
STATUS_INSUFFICIENT_RESOURCES
Es gab nicht genügend Arbeitsspeicher.
 

Eine Liste zusätzlicher Rückgabewerte finden Sie unter Framework-Objekterstellungsfehler.

Diese Methode kann auch andere NTSTATUS-Werte zurückgeben.

Eine Systemfehlerüberprüfung tritt auf, wenn der Treiber einen ungültigen Objekthandpunkt bereitstellt.

Hinweise

Hinweis

WdfDeviceAddQueryInterface kann nicht für ein Steuerelementgerät aufgerufen werden.

Treiber, die treiberdefinierte Schnittstellen erstellen, rufen in der Regel WdfDeviceAddQueryInterface aus einer EvtDriverDeviceAdd - oder EvtDevicePrepareHardware-Rückruffunktion auf.

Nachdem ein Treiber WdfDeviceAddQueryInterface aufgerufen hat, um eine treiberdefinierte Schnittstelle zu erstellen, kann ein anderer frameworkbasierter Treiber auf die Schnittstelle zugreifen, indem WdfFdoQueryForInterface aufgerufen wird.

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

Beispiele

Das folgende Codebeispiel stammt aus dem Toaster-Beispielbustreiber. In diesem Beispiel wird eine treiberdefinierte Schnittstelle erstellt, die die TOASTER_INTERFACE_STANDARD Struktur des Toasterbeispiels verwendet.

typedef struct _TOASTER_INTERFACE_STANDARD {
 INTERFACE  InterfaceHeader;
  PTOASTER_GET_CRISPINESS_LEVEL  GetCrispinessLevel;
  PTOASTER_SET_CRISPINESS_LEVEL  SetCrispinessLevel;
  PTOASTER_IS_CHILD_PROTECTED  IsSafetyLockEnabled;
} TOASTER_INTERFACE_STANDARD, *PTOASTER_INTERFACE_STANDARD;

TOASTER_INTERFACE_STANDARD  ToasterInterface;
WDF_QUERY_INTERFACE_CONFIG  qiConfig;

//
// Initialize the ToasterInterface structure.
//
RtlZeroMemory(
              &ToasterInterface,
              sizeof(ToasterInterface)
              );

ToasterInterface.InterfaceHeader.Size = sizeof(ToasterInterface);
ToasterInterface.InterfaceHeader.Version = 1;
ToasterInterface.InterfaceHeader.Context = (PVOID)hChild;

ToasterInterface.InterfaceHeader.InterfaceReference =
        WdfDeviceInterfaceReferenceNoOp;
ToasterInterface.InterfaceHeader.InterfaceDereference =
        WdfDeviceInterfaceDereferenceNoOp;

ToasterInterface.GetCrispinessLevel = Bus_GetCrispinessLevel;
ToasterInterface.SetCrispinessLevel = Bus_SetCrispinessLevel;
ToasterInterface.IsSafetyLockEnabled = Bus_IsSafetyLockEnabled;

//
// Initialize the qiConfig structure.
//
WDF_QUERY_INTERFACE_CONFIG_INIT(
                                &qiConfig,
                                (PINTERFACE)&ToasterInterface,
                                &GUID_TOASTER_INTERFACE_STANDARD,
                                NULL
                                );

//
// Create the interface.
//
status = WdfDeviceAddQueryInterface(
                                    hChild,
                                    &qiConfig
                                    );
if (!NT_SUCCESS(status)) {
    return status;
}

Anforderungen

   
Zielplattform Universell
KMDF-Mindestversion 1.0
Header wdfqueryinterface.h (enthalten Wdf.h)
Bibliothek Wdf01000.sys (siehe Framework-Bibliotheksversioning.)
IRQL PASSIVE_LEVEL
DDI-Complianceregeln DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf)

Weitere Informationen

EvtDevicePrepareHardware

EvtDriverDeviceAdd

WDF_QUERY_INTERFACE_CONFIG

WDF_QUERY_INTERFACE_CONFIG_INIT

WdfDeviceInterfaceDereferenceNoOp

WdfDeviceInterfaceReferenceNoOp

WdfFdoQueryForInterface