Freigeben über


WdfFdoInitQueryProperty-Funktion (wdffdo.h)

[Gilt für KMDF und UMDF]

Die WdfFdoInitQueryProperty--Methode ruft eine angegebene Geräteeigenschaft ab.

Syntax

NTSTATUS WdfFdoInitQueryProperty(
  [in]  PWDFDEVICE_INIT          DeviceInit,
  [in]  DEVICE_REGISTRY_PROPERTY DeviceProperty,
  [in]  ULONG                    BufferLength,
  [out] PVOID                    PropertyBuffer,
  [out] PULONG                   ResultLength
);

Die Parameter

[in] DeviceInit

Ein Zeiger auf eine WDFDEVICE_INIT Struktur, die der Treiber aus seiner EvtDriverDeviceAdd Rückruffunktion abgerufen hat.

[in] DeviceProperty

Ein DEVICE_REGISTRY_PROPERTY-typed-Enumeratorwert, der die abzurufende Geräteeigenschaft identifiziert.

[in] BufferLength

Die Größe des Puffers in Bytes, auf den PropertyBufferverweist.

[out] PropertyBuffer

Ein vom Aufrufer bereitgestellter Zeiger auf einen vom Aufrufer zugewiesenen Puffer, der die angeforderte Geräteeigenschaft empfängt. Dieser Zeiger kann NULL- werden, wenn der parameter BufferLength null ist.

[out] ResultLength

Ein vom Aufrufer bereitgestellter Speicherort, der im Gegenzug die Größe der Informationen enthält, die WdfFdoInitQueryProper ty in PropertyBuffer-gespeichert sind. Wenn der Rückgabewert dieser Methode STATUS_BUFFER_TOO_SMALL ist, erhält ResultLength- die erforderliche Puffergröße.

Rückgabewert

Wenn der Vorgang erfolgreich ist, gibt die Methode STATUS_SUCCESS zurück. Weitere Rückgabewerte sind:

Rückgabecode BESCHREIBUNG
STATUS_BUFFER_TOO_SMALL
Der bereitgestellte Puffer ist zu klein, um die Informationen zu empfangen.
STATUS_INVALID_PARAMETER_2
Der angegebene DeviceProperty Wert ist ungültig.
STATUS_INVALID_DEVICE_REQUEST
Die WDFDEVICE_INIT Struktur wurde nicht aus der EvtDriverDeviceAdd Rückruffunktion des Treibers abgerufen.
 

Die Methode kann auch andere NTSTATUS-Wertezurückgeben.

Bemerkungen

Bevor Geräteeigenschaftendaten empfangen werden, müssen Treiber in der Regel einen anfänglichen Aufruf WdfFdoInitQueryProperty- durchführen, um die erforderliche Puffergröße abzurufen. Bei einigen Eigenschaften kann sich die Datengröße zwischen dem Zeitpunkt ändern, zu dem die erforderliche Größe zurückgegeben wird, und der Zeit, zu der der Treiber diese Routine erneut aufruft. Daher sollten Treiber WdfFdoInitQueryProperty- in einer Schleife aufrufen, die ausgeführt wird, bis der Rückgabestatus nicht STATUS_BUFFER_TOO_SMALL ist.

Es empfiehlt sich, WdfFdoInitQueryProperty- nur zu verwenden, wenn die erforderliche Puffergröße bekannt und unveränderlich ist, da in diesem Fall der Treiber WdfFdoInitQueryProperty nur einmal aufrufen muss. Wenn die erforderliche Puffergröße unbekannt ist oder variiert, sollte der Treiber WdfFdoInitAllocAndQueryPropertyaufrufen.

Der Treiber kann WdfFdoInitQueryProperty- nur vor dem Aufrufen WdfDeviceCreateaufrufen. Weitere Informationen zum Aufrufen WdfDeviceCreatefinden Sie unter Creating a Framework Device Object.

Nach dem Aufrufen WdfDeviceCreatekann ein Treiber Geräteeigenschafteninformationen abrufen, indem WdfDeviceQueryPropertyaufgerufen wird.

Weitere Informationen zur WdfFdoInitQueryProperty--Methode finden Sie unter Erstellen von Geräteobjekten in einem Funktionstreiber-.

Alternativ können Sie WdfFdoInitQueryPropertyEx- verwenden, um auf Geräteeigenschaften zuzugreifen, die über das Unified Property Model verfügbar gemacht werden.

Beispiele

Im folgenden Codebeispiel wird eine Unicode-Zeichenfolge abgerufen, die den Namen des Enumerators eines Geräts darstellt, und gibt TRUE zurück, wenn die Zeichenfolge "PCI" lautet.

NTSTATUS  status = STATUS_SUCCESS;
WCHAR  enumeratorName[64] = {0};
ULONG  returnSize;
UNICODE_STRING  unicodeEnumName, temp;

status = WdfFdoInitQueryProperty(
                                 DeviceInit,
                                 DevicePropertyEnumeratorName,
                                 sizeof(enumeratorName),
                                 enumeratorName,
                                 &returnSize
                                 );
if(!NT_SUCCESS(status)){
    return status;
}

RtlInitUnicodeString(
                     &unicodeEnumName,
                     enumeratorName
                     );
RtlInitUnicodeString(
                     &temp,
                     L"PCI"
                     );
if(RtlCompareUnicodeString(
                           &unicodeEnumName,
                           &temp,
                           TRUE
                           ) == 0) {
    //
    // This device is a PCI device.
    //
    return TRUE;
}

Anforderungen

Anforderung Wert
Zielplattform universell
Minimale KMDF-Version 1.0
Mindest-UMDF-Version 2.0
Kopfzeile wdffdo.h (include Wdf.h)
Bibliothek Wdf01000.sys (KMDF); WUDFx02000.dll (UMDF)
IRQL PASSIVE_LEVEL
DDI-Complianceregeln DeviceInitAPI(kmdf), DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf)

Siehe auch

WdfDeviceQueryProperty-

WdfFdoInitAllocAndQueryProperty