Función WdfDeviceAllocAndQueryProperty (wdfdevice.h)

[Se aplica a KMDF y UMDF]

El método WdfDeviceAllocAndQueryProperty asigna un búfer y recupera una propiedad de dispositivo especificada.

Sintaxis

NTSTATUS WdfDeviceAllocAndQueryProperty(
  [in]           WDFDEVICE                Device,
  [in]           DEVICE_REGISTRY_PROPERTY DeviceProperty,
  [in]           POOL_TYPE                PoolType,
  [in, optional] PWDF_OBJECT_ATTRIBUTES   PropertyMemoryAttributes,
  [out]          WDFMEMORY                *PropertyMemory
);

Parámetros

[in] Device

Identificador de un objeto de dispositivo de marco.

[in] DeviceProperty

Enumerador con tipo DEVICE_REGISTRY_PROPERTY que identifica la propiedad del dispositivo que se va a recuperar.

[in] PoolType

Enumerador de tipo POOL_TYPE que especifica el tipo de memoria que se va a asignar.

[in, optional] PropertyMemoryAttributes

Puntero a una estructura de WDF_OBJECT_ATTRIBUTES asignada por el autor de la llamada que describe los atributos de objeto para el objeto de memoria que asignará la función. Este parámetro es opcional y puede ser WDF_NO_OBJECT_ATTRIBUTES.

[out] PropertyMemory

Puntero a una ubicación con tipo WDFMEMORY que recibe un identificador de un objeto de memoria de marco.

Valor devuelto

Si la operación se realiza correctamente, WdfDeviceAllocAndQueryProperty devuelve STATUS_SUCCESS. Entre los valores devueltos adicionales se incluyen:

Código devuelto Descripción
STATUS_INVALID_PARAMETER o STATUS_INVALID_PARAMETER_2
El valor deviceProperty especificado no es válido.
STATUS_INVALID_DEVICE_REQUEST
Los controladores del dispositivo aún no han notificado las propiedades del dispositivo.
 

El método podría devolver otros valores NTSTATUS.

Se produce una comprobación de errores si el controlador proporciona un identificador de objeto no válido.

Comentarios

El método WdfDeviceAllocAndQueryProperty determina la cantidad de memoria necesaria para contener la propiedad del dispositivo solicitada. Asigna suficiente memoria para contener los datos y devuelve un identificador a un objeto de memoria de marco que describe la memoria asignada. Para acceder a los datos, el controlador puede llamar a WdfMemoryGetBuffer.

Como alternativa, puede usar WdfDeviceAllocAndQueryPropertyEx 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 inicializa una estructura de WDF_OBJECT_ATTRIBUTES con atributos para el objeto de memoria del marco que el marco creará para la propiedad solicitada. A continuación, el ejemplo llama a WdfDeviceAllocAndQueryProperty para obtener la propiedad DevicePropertyPhysicalDeviceObjectName . Después de que WdfDeviceAllocAndQueryProperty vuelva, el controlador puede llamar a WdfMemoryGetBuffer para obtener un puntero al búfer que contiene la cadena de nombre.

WDF_OBJECT_ATTRIBUTES  attributes;
NTSTATUS  status;
WDFDEVICE  device;
WDFMEMORY  memory;

WDF_OBJECT_ATTRIBUTES_INIT(&attributes);
attributes.ParentObject = device;

status = WdfDeviceAllocAndQueryProperty(device,
                                        DevicePropertyPhysicalDeviceObjectName,
                                        NonPagedPool,
                                        &attributes,
                                        &memory
                                        );
if (!NT_SUCCESS(status)) {
    return STATUS_UNSUCCESSFUL;
}

Requisitos

Requisito Value
Plataforma de destino Universal
Versión mínima de KMDF 1.0
Versión mínima de UMDF 2.0
Encabezado wdfdevice.h (incluir Wdf.h)
Library Wdf01000.sys (KMDF); WUDFx02000.dll (UMDF)
IRQL PASSIVE_LEVEL
Reglas de cumplimiento de DDI DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf)

Consulte también

WdfDeviceQueryProperty