Partilhar via


Identificação de Hardware

Uma ID de hardware é uma cadeia de caracteres de identificação definida pelo fornecedor que o Windows usa para fazer a correspondência de um dispositivo com um pacote de driver. Um ID de hardware identifica um dispositivo. Isto indica que qualquer pacote de driver que declare estar apto a funcionar com um dispositivo que possua esse ID em algum grau de funcionalidade.

Na maioria dos casos, um dispositivo tem mais de um ID de hardware. Normalmente, uma lista de IDs de hardware é classificada do mais para o menos adequado para um dispositivo. Por exemplo, a lista de IDs conceituais de hardware para um dispositivo pode ter o seguinte aspeto:

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

Criar um ID de hardware para um dispositivo

Os IDs de hardware são reportados ao Gestor de Plug and Play (PnP) pelo enumerador de um dispositivo, ou seja, o seu driver de barramento. Normalmente, quando o autor de um controlador de barramento precisa criar uma nova ID de hardware para um dispositivo que relata ao PnP, ele usa um dos seguintes formatos genéricos:

<enumerator>\<enumerator-specific-device-ID>

Este formato é o mais comum para dispositivos PnP individuais reportados ao gestor Plug and Play por um único enumerador.

\*<generic-device-ID>

O asterisco indica que mais de um enumerador suporta o dispositivo, como ISAPNP e o 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 um ID de hardware, excluindo um terminador NULL, deve ser menor que MAX_DEVICE_ID_LEN. Esta restrição aplica-se à soma dos comprimentos de todos os campos e de quaisquer \\ separadores de campo num ID de hardware. Para obter mais informações, consulte a seção Operação do IRP_MN_QUERY_ID.

IDs de hardware para dispositivos enumerados-raiz

Os dispositivos enumerados raiz são especiais porque podem ser criados usando APIs onde uma ID de hardware pode ser fornecida. Dispositivos de raiz enumerados com IDs de hardware que compartilham namespaces genéricos, como ROOT\SYSTEM, podem apresentar conflitos. O resultado é um ícone de erro de exclamação amarela no Gestor 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 de 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.

Obter a lista de IDs de hardware para um dispositivo

Para localizar a lista de IDs de hardware para um dispositivo, siga estes passos:

  1. Na pesquisa do Windows, introduza e selecione Gestor de Dispositivos.
  2. No Gestor de dispositivos, localize o dispositivo na árvore.
  3. Selecione com o botão direito do mouse o dispositivo e selecione Propriedades.
  4. Selecione o separador Detalhes.
  5. Em Propriedade, selecione Ids de hardware ou Ids compatíveis.

Você também pode obter a lista de IDs de hardware 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