Función IoGetDeviceProperty (wdm.h)
La rutina IoGetDeviceProperty recupera información sobre un dispositivo, como la información de configuración y el nombre de su PDO.
Sintaxis
NTSTATUS IoGetDeviceProperty(
[in] PDEVICE_OBJECT DeviceObject,
[in] DEVICE_REGISTRY_PROPERTY DeviceProperty,
[in] ULONG BufferLength,
[out, optional] PVOID PropertyBuffer,
[out] PULONG ResultLength
);
Parámetros
[in] DeviceObject
Puntero al objeto de dispositivo físico (PDO) para el dispositivo que se está consultando.
[in] DeviceProperty
Enumerador con tipo DEVICE_REGISTRY_PROPERTYque identifica la propiedad del dispositivo que se va a recuperar.
[in] BufferLength
Especifica el tamaño, en bytes, del PropertyBuffer proporcionado por el autor de la llamada.
[out, optional] PropertyBuffer
Puntero a un búfer proporcionado por el autor de la llamada para recibir la información de la propiedad. El búfer se puede asignar desde la memoria paginable. El tipo del búfer viene determinado por el deviceProperty (consulte más arriba).
[out] ResultLength
Puntero a un ULONG para recibir el tamaño de la información de propiedad devuelta en PropertyBuffer. Si ioGetDeviceProperty devuelve STATUS_BUFFER_TOO_SMALL, establece este parámetro en la longitud del búfer necesaria.
Valor devuelto
ioGetDeviceProperty devuelve STATUS_SUCCESS si la llamada se realizó correctamente. Entre los posibles valores devueltos de error se incluyen los siguientes.
Código devuelto | Descripción |
---|---|
STATUS_BUFFER_TOO_SMALL | El búfer de PropertyBuffer era demasiado pequeño. ResultLength apunta a la longitud del búfer necesaria. |
STATUS_INVALID_PARAMETER_2 | La deviceProperty especificada no es una de las propiedades controladas por esta rutina. |
STATUS_INVALID_DEVICE_REQUEST | Posiblemente indica que el deviceObject especificado no era un puntero PDO válido. |
Observaciones
IoGetDeviceProperty recupera la información de configuración del dispositivo del registro. Use esta rutina, en lugar de acceder al registro directamente, para aislar a un controlador de las diferencias entre plataformas y de los posibles cambios en la estructura del Registro.
Para muchas solicitudes de DeviceProperty, puede tomar dos o más llamadas a IoGetDeviceProperty para determinar el BufferLength necesario. La primera llamada debe usar un valor de estimación más adecuado. Si el estado devuelto es STATUS_BUFFER_TOO_SMALL, el controlador debe liberar su búfer actual, asigne un búfer del tamaño devuelto en ResultLengthy llame a IoGetDeviceProperty de nuevo. Dado que algunas de las propiedades de configuración son dinámicas, el tamaño de los datos puede cambiar entre el momento en que se devuelve el tamaño necesario y el controlador vuelve a llamar a esta rutina. Por lo tanto, los controladores deben llamar a IoGetDeviceProperty dentro de un bucle que se ejecuta hasta que el estado de devolución no se STATUS_BUFFER_TOO_SMALL.
Los controladores de funciones que admiten dispositivos en un bus heredado y un bus PnP pueden usar las propiedades DevicePropertyBusNumber, DevicePropertyBusTypeGuidy DevicePropertyLegacyBusType para distinguir entre los buses.
Requisitos
Requisito | Valor |
---|---|
cliente mínimo admitido | Disponible a partir de Windows 2000. |
de la plataforma de destino de | Universal |
encabezado de | wdm.h (include Wdm.h, Ntddk.h, Ntifs.h) |
biblioteca de | NtosKrnl.lib |
DLL de | NtosKrnl.exe |
irQL | PASSIVE_LEVEL |
reglas de cumplimiento de DDI | HwStorPortProhibitedDIs(storport), PowerIrpDDis(wdm) |