Función WdfFdoInitQueryProperty (wdffdo.h)
[Se aplica a KMDF y UMDF]
El método WdfFdoInitQueryProperty recupera una propiedad de dispositivo especificada.
Sintaxis
NTSTATUS WdfFdoInitQueryProperty(
[in] PWDFDEVICE_INIT DeviceInit,
[in] DEVICE_REGISTRY_PROPERTY DeviceProperty,
[in] ULONG BufferLength,
[out] PVOID PropertyBuffer,
[out] PULONG ResultLength
);
Parámetros
[in] DeviceInit
Puntero a una estructura WDFDEVICE_INIT que el controlador obtuvo de su función de devolución de llamada EvtDriverDeviceAdd .
[in] DeviceProperty
Valor de enumerador con tipo DEVICE_REGISTRY_PROPERTY que identifica la propiedad del dispositivo que se va a recuperar.
[in] BufferLength
Tamaño, en bytes, del búfer al que apunta PropertyBuffer.
[out] PropertyBuffer
Puntero proporcionado por el autor de la llamada a un búfer asignado por el autor de la llamada que recibe la propiedad del dispositivo solicitada. Este puntero puede ser NULL si el parámetro BufferLength es cero.
[out] ResultLength
Una ubicación proporcionada por el autor de la llamada que, a cambio, contiene el tamaño, en bytes, de la información que WdfFdoInitQueryProperty almacena en PropertyBuffer. Si el valor devuelto de este método es STATUS_BUFFER_TOO_SMALL, ResultLength recibe el tamaño de búfer necesario.
Valor devuelto
Si la operación se realiza correctamente, el método devuelve STATUS_SUCCESS. Entre los valores devueltos adicionales se incluyen:
Código devuelto | Descripción |
---|---|
|
El búfer proporcionado es demasiado pequeño para recibir la información. |
|
El valor deviceProperty especificado no es válido. |
|
La estructura WDFDEVICE_INIT no se obtuvo de la función de devolución de llamada EvtDriverDeviceAdd del controlador. |
El método también podría devolver otros valores NTSTATUS.
Comentarios
Antes de recibir datos de propiedad del dispositivo, los controladores normalmente deben realizar una llamada inicial a WdfFdoInitQueryProperty para obtener el tamaño de búfer necesario. Para algunas propiedades, el tamaño de los datos puede cambiar entre el momento en que se devuelve el tamaño necesario y el tiempo que el controlador llama a esta rutina de nuevo. Por lo tanto, los controladores deben llamar a WdfFdoInitQueryProperty dentro de un bucle que se ejecute hasta que el estado devuelto no sea STATUS_BUFFER_TOO_SMALL.
Es mejor usar WdfFdoInitQueryProperty solo si el tamaño de búfer necesario se conoce y no cambia, porque en ese caso el controlador tiene que llamar a WdfFdoInitQueryProperty solo una vez. Si el tamaño de búfer necesario es desconocido o varía, el controlador debe llamar a WdfFdoInitAllocAndQueryProperty.
El controlador puede llamar a WdfFdoInitQueryProperty solo antes de llamar a WdfDeviceCreate. Para obtener más información sobre cómo llamar a WdfDeviceCreate, vea Creating a Framework Device Object.
Después de llamar a WdfDeviceCreate, un controlador puede obtener información de propiedad del dispositivo llamando a WdfDeviceQueryProperty.
Para obtener más información sobre el método WdfFdoInitQueryProperty , vea Creating Device Objects in a Function Driver.
Como alternativa, puede usar WdfFdoInitQueryPropertyEx para acceder a las propiedades del dispositivo que se exponen a través del modelo de propiedades unificadas.
Ejemplos
En el ejemplo de código siguiente se obtiene una cadena Unicode que representa el nombre del enumerador de un dispositivo y devuelve TRUE si la cadena es "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;
}
Requisitos
Requisito | Value |
---|---|
Plataforma de destino | Universal |
Versión mínima de KMDF | 1.0 |
Versión mínima de UMDF | 2.0 |
Encabezado | wdffdo.h (incluir Wdf.h) |
Library | Wdf01000.sys (KMDF); WUDFx02000.dll (UMDF) |
IRQL | PASSIVE_LEVEL |
Reglas de cumplimiento de DDI | DeviceInitAPI(kmdf), DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf) |