Id. de hardware
Un identificador de hardware es una cadena de identificación definida por el proveedor que Windows usa para hacer coincidir un dispositivo con un paquete de controladores. Un identificador de hardware identifica un dispositivo e indica que cualquier paquete de controladores que lo declare puede funcionar con un dispositivo que tenga ese identificador para cierto grado de funcionalidad. En la mayoría de los casos, un dispositivo tiene más de un identificador de hardware asociado. Normalmente, una lista de identificadores de hardware se ordena de la mayoría a la mínima adecuada para un dispositivo. Por ejemplo, la lista de identificadores de hardware conceptuales para un dispositivo podría tener el siguiente aspecto:
<Product X made by company Y with firmware revision Z>
<Product X made by company Y that is a device of type W>
Donde los identificadores de hardware reales representarían esos conceptos mediante cadenas que siguen los requisitos de formato de un identificador de hardware.
Creación de un identificador de hardware para un dispositivo
Los identificadores de hardware se notifican al administrador de Plug and Play (PnP) mediante el enumerador de un dispositivo (su controlador de bus). Normalmente, cuando el autor de un controlador de bus necesita crear un nuevo identificador de hardware para un dispositivo, notificará a PnP, usará uno de los siguientes formatos genéricos:
<enumerator>\<enumerator-specific-device-ID>
Este es el formato más común para dispositivos PnP individuales notificados al administrador de Plug and Play (PnP) mediante un único enumerador.
\*<generic-device-ID>
El asterisco indica que el dispositivo es compatible con más de un enumerador, como ISAPNP y bios.
<device-class-specific-ID>
Para obtener más información, vea Identificadores genéricos.
Una clase de dispositivo existente que haya establecido su propia convención de nomenclatura podría usar un formato personalizado. Para obtener información sobre sus formatos de identificador de hardware, consulte la especificación de hardware de estos buses.
El número de caracteres de un identificador de hardware, excepto un terminador NULL, debe ser menor que MAX_DEVICE_ID_LEN
. Esta restricción se aplica a la suma de las longitudes de todos los campos y de los \\
separadores de campo de un identificador de hardware. Para obtener más información, consulte la sección Operaciones de IRP_MN_QUERY_ID.
Identificadores de hardware para dispositivos enumerados raíz
Los dispositivos enumerados raíz son especiales en que se pueden crear mediante las API en las que se puede proporcionar un identificador de hardware. Los dispositivos enumerados raíz con identificadores de hardware que comparten espacios de nombres genéricos, como ROOT\SYSTEM
pueden entrar en conflicto y provocar un icono de error amarillo-bang en Administrador de dispositivos al actualizar Windows.
Puede evitarlo mediante un espacio de nombres único para cada controlador que tenga un dispositivo enumerado raíz. Para un dispositivo USB o del sistema, en lugar de usar ROOT\USB
o ROOT\SYSTEM"
.ROOT\[COMPANYNAME]\[DEVICENAME]
Después, antes de instalar, compruebe si el devnode ya está presente.
Obtención de la lista de identificadores de hardware para un dispositivo
Para buscar la lista de identificadores de hardware de un dispositivo determinado, siga estos pasos:
Abra el Administrador de dispositivos.
Busque el dispositivo en el árbol.
Seleccione el dispositivo con el botón derecho y seleccione Propiedades.
Seleccione la pestaña Details (Detalles).
En la lista desplegable Propiedad , seleccione Identificadores de hardware o Identificadores compatibles.
La lista de identificadores de hardware también se puede obtener mediante programación recuperando la propiedad DEVPKEY_Device_HardwareIds en un dispositivo. Por ejemplo, esa propiedad se puede recuperar con API como IoGetDevicePropertyData, SetupDiGetDeviceProperty o CM_Get_DevNode_Property.
La lista de identificadores de hardware que recupera esta rutina es un valor REG_MULTI_SZ . El número máximo de caracteres de una lista de hardware, incluido un terminador NULL después de cada identificador de hardware y un terminador NULL final, es REGSTR_VAL_MAX_HCID_LEN
. El número máximo posible de identificadores en una lista de identificadores de hardware es 64.
Ejemplos de identificadores de hardware
Este es un ejemplo de un identificador genérico para un dispositivo PnP:
root\*PNP0F08
Este es un ejemplo de un identificador para un dispositivo PCI:
PCI\VEN_1000&DEV_0001&SUBSYS_00000000&REV_02