Conjuntos de informações do dispositivo

No modo de usuário, os dispositivos que pertencem a classes de configuração de dispositivo ou classes de interface do dispositivo são gerenciados usando elementos de informações do dispositivo e conjuntos de informações do dispositivo. Um conjunto de informações do dispositivo consiste em elementos de informações do dispositivo para todos os dispositivos que pertencem a alguma classe de configuração de dispositivo ou classe de interface do dispositivo.

Cada elemento de informações do dispositivo contém um identificador para o devnode do dispositivo e um ponteiro para uma lista vinculada de todas as interfaces de dispositivo associadas ao dispositivo descrito por esse elemento. Se um conjunto de informações do dispositivo descreve os membros de uma classe de instalação, o elemento pode não apontar para nenhuma interface de dispositivo, pois os membros da classe de instalação não estão necessariamente associados a uma interface.

O diagrama a seguir mostra a estrutura interna de um conjunto de informações do dispositivo.

diagrama ilustrando um conjunto de informações do dispositivo.

Criando um conjunto de informações do dispositivo

Depois de criar um conjunto de informações do dispositivo com SetupDiCreateDeviceInfoList, os elementos de informações do dispositivo podem ser criados e adicionados à lista um de cada vez usando SetupDiCreateDeviceInfo. Como alternativa, SetupDiGetClassDevs pode ser chamado para criar um conjunto de informações do dispositivo composto por todos os dispositivos associados a uma classe de configuração de dispositivo especificada ou classe de interface do dispositivo.

Enumerando informações do dispositivo

Depois que um conjunto de informações do dispositivo é criado, os dispositivos e as interfaces de dispositivo que pertencem ao conjunto podem ser enumerados, mas operações diferentes são necessárias para cada tipo de enumeração. SetupDiEnumDeviceInfo enumera todos os dispositivos que pertencem ao conjunto de informações que atendem a determinados critérios. Cada chamada para SetupDiEnumDeviceInfo extrai uma estrutura SP_DEVINFO_DATA que corresponde aproximadamente a um elemento de informações do dispositivo. SP_DEVINFO_DATA contém o GUID da classe à qual o dispositivo pertence e um identificador de instância de dispositivo que aponta para o devnode para o dispositivo. A principal diferença entre uma estrutura SP_DEVINFO_DATA e um elemento de dispositivo completo é que SP_DEVINFO_DATA não contém a lista vinculada de interfaces associadas ao dispositivo. Portanto, SetupDiEnumDeviceInfo não pode ser usado para enumerar as interfaces no conjunto de informações do dispositivo.

Para enumerar as interfaces do dispositivo em um conjunto de informações do dispositivo, chame SetupDiEnumDeviceInterfaces. Essa rotina percorre todos os elementos de informações do dispositivo no conjunto de informações do dispositivo, extrai as interfaces na lista de interfaces de cada elemento e retorna uma interface com cada chamada. Se SetupDiEnumDeviceInterfaces for passada uma estrutura SP_DEVINFO_DATA como entrada em seu segundo parâmetro, ela restringirá a enumeração somente às interfaces associadas ao dispositivo indicado por SP_DEVINFO_DATA.

SetupDiEnumDeviceInterfaces retorna uma estrutura SP_DEVICE_INTERFACE_DATA . SP_DEVICE_INTERFACE_DATA contém o GUID da classe de interface e outras informações sobre a interface, incluindo um campo reservado que tem informações codificadas que podem ser usadas para obter o nome da interface. Para obter o nome da interface, uma etapa adicional é necessária: SetupDiGetDeviceInterfaceDetail deve ser chamado. SetupDiGetDeviceInterfaceDetail retorna uma estrutura do tipo SP_DEVICE_INTERFACE_DETAIL_DATA que contém o caminho na árvore de objetos do sistema que define a interface.