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 funzione EvtDriverDeviceAdd callback.
[in] DeviceProperty
Valore enumeratore DEVICE_REGISTRY_PROPERTY tipizzato che identifica la proprietà del dispositivo da recuperare.
[in] BufferLength
Dimensioni, in byte, del buffer a cui fa riferimento PropertyBuffer.
[out] PropertyBuffer
Puntatore fornito dal chiamante a un buffer allocato dal chiamante che riceve la proprietà del dispositivo richiesto. Questo puntatore può essere NULL se il parametro BufferLength è zero.
[out] ResultLength
Percorso fornito 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 |
---|---|
|
Il buffer fornito è troppo piccolo per ricevere le informazioni. |
|
Il valore DeviceProperty specificato non è valido. |
|
La struttura WDFDEVICE_INIT non è stata ottenuta dalla funzione EvtDriverDevice del driverAggiungi il callback. |
Il metodo potrebbe restituire anche 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 il tempo 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 sulla 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
Requisito | Valore |
---|---|
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) |