Funzione WdfFdoInitQueryProperty (wdffdo.h)

[Si applica a KMDF e UMDF]

Il metodo WdfFdoInitQueryProperty recupera una proprietà del dispositivo specificata.

Sintassi

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

Parametri

[in] DeviceInit

Puntatore a una struttura WDFDEVICE_INIT ottenuta dal driver dalla relativa funzione di callback EvtDriverDeviceAdd .

[in] DeviceProperty

Valore dell'enumeratore tipizzato DEVICE_REGISTRY_PROPERTY che identifica la proprietà del dispositivo da recuperare.

[in] BufferLength

Dimensione, in byte, del buffer a cui punta PropertyBuffer.

[out] PropertyBuffer

Puntatore fornito dal chiamante a un buffer allocato dal chiamante che riceve la proprietà del dispositivo richiesta. Questo puntatore può essere NULL se il parametro BufferLength è zero.

[out] ResultLength

Posizione fornita dal chiamante che, in caso di restituzione, contiene le dimensioni, in byte, delle informazioni archiviate da WdfFdoInitQueryProperty in PropertyBuffer. Se il valore restituito di questo metodo è STATUS_BUFFER_TOO_SMALL, ResultLength riceve le dimensioni del buffer necessarie.

Valore restituito

Se l'operazione ha esito positivo, il metodo restituisce STATUS_SUCCESS. I valori restituiti aggiuntivi includono:

Codice restituito Descrizione
STATUS_BUFFER_TOO_SMALL
Il buffer fornito è troppo piccolo per ricevere le informazioni.
STATUS_INVALID_PARAMETER_2
Il valore DeviceProperty specificato non è valido.
STATUS_INVALID_DEVICE_REQUEST
La struttura WDFDEVICE_INIT non è stata ottenuta dalla funzione di callback EvtDriverDeviceAdd del driver.
 

Il metodo potrebbe anche restituire altri valori NTSTATUS.

Commenti

Prima di ricevere i dati delle proprietà del dispositivo, i driver in genere devono effettuare una chiamata iniziale a WdfFdoInitQueryProperty per ottenere le dimensioni del buffer necessarie. Per alcune proprietà, le dimensioni dei dati possono cambiare tra il momento in cui vengono restituite le dimensioni necessarie e l'ora in cui il driver chiama nuovamente questa routine. Pertanto, i driver devono chiamare WdfFdoInitQueryProperty all'interno di un ciclo che viene eseguito fino a quando lo stato restituito non è STATUS_BUFFER_TOO_SMALL.

È consigliabile usare WdfFdoInitQueryProperty solo se la dimensione del buffer necessaria è nota e non modificabile, perché in questo caso il driver deve chiamare WdfFdoInitQueryProperty una sola volta. Se le dimensioni del buffer necessarie sono sconosciute o variano, il driver deve chiamare WdfFdoInitAllocAndQueryProperty.

Il driver può chiamare WdfFdoInitQueryProperty solo prima di chiamare WdfDeviceCreate. Per altre informazioni sulla chiamata a WdfDeviceCreate, vedere Creazione di un oggetto dispositivo framework.

Dopo aver chiamato WdfDeviceCreate, un driver può ottenere informazioni sulle proprietà del dispositivo chiamando WdfDeviceQueryProperty.

Per altre informazioni sul metodo WdfFdoInitQueryProperty , vedere Creazione di oggetti dispositivo in un driver di funzione.

In alternativa, è possibile usare WdfFdoInitQueryPropertyEx per accedere alle proprietà del dispositivo esposte tramite il modello di proprietà Unified.

Esempio

Nell'esempio di codice seguente viene ottenuta una stringa Unicode che rappresenta il nome dell'enumeratore di un dispositivo e restituisce TRUE se la stringa è "PCI".

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;
}

Requisiti

   
Piattaforma di destinazione Universale
Versione KMDF minima 1,0
Versione UMDF minima 2,0
Intestazione wdffdo.h (include Wdf.h)
Libreria Wdf01000.sys (KMDF); WUDFx02000.dll (UMDF)
IRQL PASSIVE_LEVEL
Regole di conformità DDI DeviceInitAPI(kmdf), DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf)

Vedi anche

WdfDeviceQueryProperty

WdfFdoInitAllocAndQueryProperty