ID de 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 conceituais de 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>
Onde 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 (Gerenciador de Plug and Play) pelo enumerador de um dispositivo (seu driver de barramento). Normalmente, quando o autor de um driver de barramento precisa criar uma nova ID de hardware para um dispositivo que ele relatará ao PnP, ele usará um dos seguintes formatos genéricos:
<enumerator>\<enumerator-specific-device-ID>
Esse é o formato mais comum para dispositivos PnP individuais relatados ao gerenciador de Plug and Play (PnP) por um único enumerador.
\*<generic-device-ID>
O asterisco indica que o dispositivo tem suporte em mais de um enumerador, como ISAPNP e BIOS.
<device-class-specific-ID>
Para obter mais informações, consulte Identificadores genéricos.
Uma classe de dispositivo existente que estabeleceu sua própria convenção de nomenclatura 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 de todos \\
os 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 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 yellow-bang em Gerenciador de Dispositivos ao atualizar o Windows.
Você pode evitar isso 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"
usar ROOT\[COMPANYNAME]\[DEVICENAME]
. Em seguida, antes de instalar, marcar para ver se o devnode já está presente.
Obtendo a lista de IDs de hardware para um dispositivo
Para encontrar a lista de IDs de hardware de um determinado dispositivo, siga estas etapas:
Abra o Gerenciador de Dispositivos.
Localize o dispositivo na árvore.
Selecione o dispositivo com o botão direito do mouse e selecione 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, SetupDiGetDeviceProperty ou 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 para um dispositivo PCI:
PCI\VEN_1000&DEV_0001&SUBSYS_00000000&REV_02