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 |
---|---|
|
El valor deviceProperty especificado no es válido. |
|
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) |