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
STATUS_BUFFER_TOO_SMALL
El búfer proporcionado es demasiado pequeño para recibir la información.
STATUS_INVALID_PARAMETER_2
El valor deviceProperty especificado no es válido.
STATUS_INVALID_DEVICE_REQUEST
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)

Consulte también

WdfDeviceQueryProperty

WdfFdoInitAllocAndQueryProperty