Conjuntos de información del dispositivo

En el modo de usuario, los dispositivos que pertenecen a clases de configuración de dispositivos o clases de interfaz de dispositivo se administran mediante elementos de información del dispositivo y conjuntos de información del dispositivo. Un conjunto de información de dispositivo consta de elementos de información del dispositivo para todos los dispositivos que pertenecen a alguna clase de configuración de dispositivo o clase de interfaz de dispositivo.

Cada elemento de información del dispositivo contiene un identificador para el nodo de desarrollo del dispositivo y un puntero a una lista vinculada de todas las interfaces de dispositivo asociadas al dispositivo descrito por ese elemento. Si un conjunto de información de dispositivo describe los miembros de una clase de instalación, es posible que el elemento no apunte a ninguna interfaz de dispositivo, ya que los miembros de la clase de instalación no están necesariamente asociados a una interfaz.

En el diagrama siguiente se muestra la estructura interna de un conjunto de información del dispositivo.

diagrama que ilustra un conjunto de información del dispositivo.

Crear un conjunto de información del dispositivo

Después de crear un conjunto de información de dispositivo con SetupDiCreateDeviceInfoList, se pueden crear y agregar elementos de información del dispositivo a la lista uno a uno mediante SetupDiCreateDeviceInfo. Como alternativa, se puede llamar a SetupDiGetClassDevs para crear un conjunto de información del dispositivo compuesto por todos los dispositivos asociados a una clase de configuración de dispositivo especificada o clase de interfaz de dispositivo.

Enumeración de la información del dispositivo

Una vez creado un conjunto de información de dispositivo, se pueden enumerar los dispositivos y las interfaces de dispositivo que pertenecen al conjunto, pero se requieren diferentes operaciones para cada tipo de enumeración. SetupDiEnumDeviceInfo enumera todos los dispositivos que pertenecen al conjunto de información que cumplen determinados criterios. Cada llamada a SetupDiEnumDeviceInfo extrae una estructura de SP_DEVINFO_DATA que se corresponde aproximadamente con un elemento de información del dispositivo. SP_DEVINFO_DATA contiene el GUID de la clase a la que pertenece el dispositivo y un identificador de instancia de dispositivo que apunta al nodo de desarrollo del dispositivo. La diferencia principal entre una estructura de SP_DEVINFO_DATA y un elemento de dispositivo completo es que SP_DEVINFO_DATA no contiene la lista vinculada de interfaces asociadas al dispositivo. Por lo tanto, SetupDiEnumDeviceInfo no se puede usar para enumerar las interfaces del conjunto de información del dispositivo.

Para enumerar las interfaces de dispositivo en un conjunto de información del dispositivo, llame a SetupDiEnumDeviceInterfaces. Esta rutina recorre todos los elementos de información del dispositivo del conjunto de información del dispositivo, extrae las interfaces de la lista de interfaces de cada elemento y devuelve una interfaz con cada llamada. Si SetupDiEnumDeviceInterfaces se pasa una estructura SP_DEVINFO_DATA como entrada en su segundo parámetro, restringe la enumeración solo a las interfaces asociadas al dispositivo indicados por SP_DEVINFO_DATA.

SetupDiEnumDeviceInterfaces devuelve una estructura SP_DEVICE_INTERFACE_DATA . SP_DEVICE_INTERFACE_DATA contiene el GUID de clase de interfaz y otra información sobre la interfaz, incluido un campo reservado que tiene información codificada que se puede usar para obtener el nombre de la interfaz. Para obtener el nombre de la interfaz, se requiere un paso adicional: se debe llamar a SetupDiGetDeviceInterfaceDetail . SetupDiGetDeviceInterfaceDetail devuelve una estructura de tipo SP_DEVICE_INTERFACE_DETAIL_DATA que contiene la ruta de acceso en el árbol de objetos del sistema que define la interfaz.