ID do hardware
Uma ID de hardware é uma cadeia de caracteres de identificação definida pelo fornecedor que o Windows usa para corresponder um dispositivo a um pacote de driver . Uma ID de hardware identifica um dispositivo e indica que qualquer pacote de driver que o declare pode funcionar com um dispositivo que tenha essa ID para algum grau de funcionalidade. Na maioria dos casos, um dispositivo tem mais de uma ID de hardware associada a ele. Normalmente, uma lista de IDs de hardware é classificada da maioria para a menos adequada para um dispositivo. Por exemplo, a lista de IDs de hardware conceitual para um dispositivo pode ser semelhante a:
<Product X made by company Y with firmware revision Z>
<Product X made by company Y that is a device of type W>
Em que as IDs de hardware reais representariam esses conceitos usando cadeias de caracteres que seguem os requisitos de formato de uma ID de hardware.
Criando uma ID de hardware para um dispositivo
As IDs de hardware são relatadas ao PnP (Plug and Play Manager) pelo enumerador do dispositivo (seu driver de barramento). Normalmente, quando o criador de um driver de barramento precisa criar uma nova ID de hardware para um dispositivo que será reportada ao PnP, ele usa um dos seguintes formatos genéricos:
<enumerator>\<enumerator-specific-device-ID>
Esse formato é o mais comum para dispositivos PnP individuais relatados ao gerenciador de PnP (Plug and Play) por um único enumerador.
\*<generic-device-ID>
O asterisco indica que mais de um enumerador dá suporte ao dispositivo, como ISAPNP e BIOS.
<device-class-specific-ID>
Para obter mais informações, consulte Identificadores Genéricos .
Uma classe de dispositivo existente com sua própria convenção de nomenclatura estabelecida pode usar um formato personalizado. Para obter informações sobre seus formatos de ID de hardware, consulte a especificação de hardware para esses barramentos.
O número de caracteres de uma ID de hardware, excluindo um terminador NULL, deve ser menor que MAX_DEVICE_ID_LEN
. Essa restrição se aplica à soma dos comprimentos de todos os campos e quaisquer separadores de campo \\
em uma ID de hardware. Para obter mais informações, consulte a seção Operações do IRP_MN_QUERY_ID.
IDs de hardware para dispositivos enumerados na raiz
Os dispositivos enumerados raiz são especiais, pois podem ser criados usando APIs em que uma ID de hardware pode ser fornecida. Dispositivos enumerados raiz com IDs de hardware compartilhando namespaces genéricos, como ROOT\SYSTEM
, podem entrar em conflito e resultar em um ícone de erro de bang amarelo no Gerenciador de Dispositivos ao atualizar o Windows.
Você pode evitar esse erro usando um namespace exclusivo para cada driver que tem um dispositivo enumerado raiz. Para um dispositivo USB ou sistema, em vez de usar ROOT\USB
ou ROOT\SYSTEM"
use ROOT\[COMPANYNAME]\[DEVICENAME]
. Em seguida, antes de instalar, verifique se o devnode já está presente.
Obtendo a lista de IDs de hardware para um dispositivo
Para localizar a lista de IDs de hardware de um determinado dispositivo, siga estas etapas:
- Abra o Gerenciador de Dispositivos.
- Localize o dispositivo na árvore.
- Clique com o botão direito do mouse no dispositivo e escolha Propriedades.
- Selecione a guia Detalhes.
- Na lista suspensa Propriedade selecione IDs de Hardware ou IDs Compatíveis.
A lista de IDs de hardware também pode ser obtida programaticamente recuperando a propriedade DEVPKEY_Device_HardwareIds em um dispositivo. Por exemplo, essa propriedade pode ser recuperada com APIs como IoGetDevicePropertyData, SetupDiGetDevicePropertyou CM_Get_DevNode_Property.
A lista de IDs de hardware que essa rotina recupera é um valor REG_MULTI_SZ. O número máximo de caracteres em uma lista de hardware, incluindo um terminador NULL após cada ID de hardware e um terminador NULL final, é REGSTR_VAL_MAX_HCID_LEN
. O número máximo possível de IDs em uma lista de IDs de hardware é 64.
Exemplos de IDs de hardware
Aqui está um exemplo de um identificador genérico para um dispositivo PnP:
root\*PNP0F08
Aqui está um exemplo de um identificador de para um dispositivo PCI:
PCI\VEN_1000&DEV_0001&SUBSYS_00000000&REV_02