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 consulta.

[in] DeviceProperty

Especifica la propiedad del dispositivo que se solicita. Debe ser uno de los siguientes valores de enumeración DEVICE_REGISTRY_PROPERTY:

DevicePropertyAddress

Solicita la dirección del dispositivo en el bus. PropertyBuffer apunta a un ULONG.

La interpretación de esta dirección es específica del bus. El autor de la llamada de esta rutina debe llamar de nuevo a la rutina para solicitar DevicePropertyBusTypeGuid, o posiblemente devicePropertyLegacyBusType, para que pueda interpretar la dirección. Un valor de dirección de 0xFFFFFFFF indica que el controlador de bus subyacente no ha proporcionado una dirección de bus para el dispositivo.

En la lista siguiente se describe la información que ciertos controladores de autobús almacenan en PropertyBuffer para sus dispositivos secundarios:

En bus Descripción
1394 No proporciona una dirección porque las direcciones son volátiles. El valor predeterminado es 0xFFFFFFFF.
EISA Número de ranura (0-F).
IDE Para un dispositivo IDE, la dirección contiene el identificador de destino y el LUN. Para un canal IDE, la dirección es cero o una (0 = canal principal y 1 = canal secundario).
Isapnp No proporciona una dirección. El valor predeterminado es 0xFFFFFFFF.
Tarjeta PC (PCMCIA) Número de socket (normalmente 0x00 o 0x40).
PCI Número de dispositivo en la palabra alta y el número de función en la palabra baja.
SCSI Identificador de destino.
USB Número del puerto.

DevicePropertyBootConfiguration

Solicita los recursos de hardware asignados al dispositivo por el firmware, en formato sin procesar. PropertyBuffer apunta a una estructura CM_RESOURCE_LIST .

DevicePropertyBootConfigurationTranslated

Los recursos de hardware asignados al dispositivo por el firmware, en formato traducido. PropertyBuffer apunta a una estructura CM_RESOURCE_LIST .

DevicePropertyBusNumber

Solicita el número de bus heredado del bus al que está conectado el dispositivo. PropertyBuffer apunta a un ULONG.

DevicePropertyBusTypeGuid

Solicita el GUID del bus al que está conectado el dispositivo. Los GUID de tipo de bus definidos por el sistema se enumeran en el archivo de encabezado Wdmguid.h. PropertyBuffer apunta a un GUID, que es una estructura de 16 bytes que contiene el GUID en formato binario.

DevicePropertyClassGuid

Solicita el GUID para la clase de instalación del dispositivo. PropertyBuffer apunta a una matriz terminada en NULL de WCHAR. Esta rutina devuelve el GUID en un formato de cadena como se indica a continuación, donde cada "c" representa un carácter hexadecimal: {cccccccc-cccc-cccc-cccc-cccccccccc}

DevicePropertyClassName

Solicita el nombre de la clase de instalación del dispositivo, en formato de texto. PropertyBuffer apunta a una cadena WCHAR terminada en NULL.

DevicePropertyCompatibleIDs

Solicita los identificadores compatibles notificados por el dispositivo. PropertyBuffer apunta a un valor de REG_MULTI_SZ.

DevicePropertyDeviceDescription

Solicita una cadena que describe el dispositivo, como "Microsoft PS/2 Port Mouse", normalmente definido por el fabricante. PropertyBuffer apunta a una cadena WCHAR terminada en NULL.

DevicePropertyDriverKeyName

Solicita el nombre de la clave del Registro específica del controlador. PropertyBuffer apunta a una cadena WCHAR terminada en NULL.

DevicePropertyEnumeratorName

Solicita el nombre del enumerador para el dispositivo, como "PCI" o "root". PropertyBuffer apunta a una cadena WCHAR terminada en NULL.

DevicePropertyFriendlyName

Solicita una cadena que se puede usar para distinguir entre dos dispositivos similares, normalmente definidos por el instalador de clase. PropertyBuffer apunta a una cadena WCHAR terminada en NULL.

DevicePropertyHardwareID

Solicita los identificadores de hardware proporcionados por el dispositivo que identifican el dispositivo. PropertyBuffer apunta a un valor de REG_MULTI_SZ.

DevicePropertyInstallState

Solicita el estado de instalación del dispositivo. El estado de instalación se devuelve como un valor de enumeración DEVICE_INSTALL_STATE .

DevicePropertyLegacyBusType

Solicita el tipo de bus, como PCIBus o PCMCIABus. PropertyBuffer apunta a un valor de enumeración INTERFACE_TYPE .

DevicePropertyLocationInformation

Solicita información sobre la ubicación del dispositivo en el bus; la interpretación de esta información es específica del bus. PropertyBuffer apunta a una cadena WCHAR terminada en NULL.

DevicePropertyManufacturer

Solicita una cadena que identifica al fabricante del dispositivo. PropertyBuffer apunta a una cadena WCHAR terminada en NULL.

DevicePropertyPhysicalDeviceObjectName

Solicita el nombre del PDO para este dispositivo. PropertyBuffer apunta a una cadena WCHAR terminada en NULL.

DevicePropertyRemovalPolicy

Solicita la directiva de eliminación actual del dispositivo. El sistema operativo usa este valor como sugerencia para determinar cómo se quita normalmente el dispositivo. El parámetro PropertyBuffer apunta a un valor de enumeración DEVICE_REMOVAL_POLICY .

DevicePropertyUINumber

Solicita un número asociado al dispositivo que se puede mostrar en la interfaz de usuario. PropertyBuffer apunta a un valor de ULONG.

Este número suele ser un número de ranura percibido por el usuario, como un número impreso junto a la ranura en la placa, o algún otro número que facilita la localización del dispositivo físico para el usuario. Si el dispositivo está en un bus que no tiene ninguna convención de número de interfaz de usuario o si el controlador de bus del dispositivo no puede determinar el número de interfaz de usuario, este valor es 0xFFFFFFFF.

[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 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 de búfer necesaria.
STATUS_INVALID_PARAMETER_2 La propiedad DeviceProperty especificada no es una de las propiedades que controla esta rutina.
STATUS_INVALID_DEVICE_REQUEST Posiblemente indica que deviceObject dado no era un puntero PDO válido.

Comentarios

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 deviceProperty , puede tomar dos o más llamadas a IoGetDeviceProperty para determinar el bufferLength necesario. La primera llamada debe usar un valor de mejor estimación. Si el estado devuelto es STATUS_BUFFER_TOO_SMALL, el controlador debe liberar su búfer actual, asignar un búfer del tamaño devuelto en ResultLength y volver a llamar a IoGetDeviceProperty . 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 llama a esta rutina de nuevo. Por lo tanto, los controladores deben llamar a IoGetDeviceProperty dentro de un bucle que se ejecute hasta que el estado devuelto no sea STATUS_BUFFER_TOO_SMALL.

Los controladores de funciones que admiten dispositivos en un bus heredado y un bus PnP pueden usar las propiedades DevicePropertyBusNumber, DevicePropertyBusTypeGuid y DevicePropertyLegacyBusType para distinguir entre los buses.

Requisitos

Requisito Value
Cliente mínimo compatible Disponible a partir de Windows 2000.
Plataforma de destino Universal
Encabezado wdm.h (incluya Wdm.h, Ntddk.h, Ntifs.h)
Library NtosKrnl.lib
Archivo DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL
Reglas de cumplimiento de DDI HwStorPortProhibitedDIs(storport), PowerIrpDDis(wdm)

Consulte también

CM_RESOURCE_LIST

DEVICE_REMOVAL_POLICY

ExAllocatePoolWithTag

GUID

INTERFACE_TYPE

IO_RESOURCE_REQUIREMENTS_LIST