하드웨어 ID
하드웨어 ID는 Windows에서 디바이스를 드라이버 패키지에 일치시키는 데 사용하는 공급업체가 정의한 식별 문자열입니다. 하드웨어 ID는 디바이스를 식별하며, 해당 ID를 가진 디바이스에서 작동할 수 있다고 선언한 모든 드라이버 패키지가 어느 정도의 기능을 수행할 수 있음을 나타냅니다. 대부분의 경우 디바이스에는 둘 이상의 하드웨어 ID가 연결되어 있습니다. 일반적으로 하드웨어 ID 목록은 디바이스에 가장 적합하지 않은 항목으로 정렬됩니다. 예를 들어 디바이스의 개념적 하드웨어 ID 목록은 다음과 같습니다.
<Product X made by company Y with firmware revision Z>
<Product X made by company Y that is a device of type W>
여기서 실제 하드웨어 ID는 하드웨어 ID의 형식 요구 사항을 따르는 문자열을 사용하여 이러한 개념을 나타냅니다.
디바이스에 대한 하드웨어 ID 만들기
하드웨어 ID는 디바이스의 열거자(버스 드라이버)에 의해 PnP(플러그 앤 플레이 관리자)에 보고됩니다. 일반적으로 버스 드라이버 작성자가 PnP에 보고하는 디바이스에 대한 새 하드웨어 ID를 만들어야 하는 경우 다음 제네릭 형식 중 하나를 사용합니다.
<enumerator>\<enumerator-specific-device-ID>
이 형식은 단일 열거자가 PnP(플러그 앤 플레이) 관리자에 보고하는 개별 PnP 디바이스에 가장 일반적입니다.
\*<generic-device-ID>
별표는 둘 이상의 열거자가 ISAPNP 및 BIOS와 같은 디바이스를 지원한다는 것을 나타냅니다.
<device-class-specific-ID>
자체적으로 설정된 명명 규칙이 있는 기존 디바이스 클래스는 사용자 지정 형식을 사용할 수 있습니다. 해당 하드웨어 ID 형식에 대한 자세한 내용은 해당 버스의 하드웨어 사양을 참조하세요.
NULL 종결자를 제외한 하드웨어 ID의 문자 수는 MAX_DEVICE_ID_LEN
미만이어야 합니다. 이 제약 조건은 하드웨어 ID의 모든 필드 길이와 \\
필드 구분 기호의 합계에 적용됩니다. 자세한 내용은 Operations 섹션의 IRP_MN_QUERY_ID를 참조하세요.
루트 열거형 디바이스에 대한 하드웨어 ID
루트 열거형 디바이스는 하드웨어 ID를 제공할 수 있는 API를 사용하여 만들 수 있다는 측면에서 특별합니다.
ROOT\SYSTEM
같은 제네릭 네임스페이스를 공유하는 하드웨어 ID가 있는 루트 열거형 디바이스는 Windows를 업데이트할 때 디바이스 관리자에서 노란색 경고 아이콘이 나타날 수 있습니다.
루트 열거형 디바이스가 있는 각 드라이버에 대해 고유한 네임스페이스를 사용하여 이 오류를 방지할 수 있습니다. USB 또는 시스템 디바이스의 경우 ROOT\USB
이나 ROOT\SYSTEM"
대신 ROOT\[COMPANYNAME]\[DEVICENAME]
를 사용합니다. 그런 다음 설치하기 전에 devnode가 이미 있는지 확인합니다.
디바이스에 대한 하드웨어 ID 목록 가져오기
지정된 디바이스에 대한 하드웨어 ID 목록을 찾으려면 다음 단계를 수행합니다.
- 디바이스 관리자를 엽니다.
- 트리에서 디바이스를 찾습니다.
- 디바이스를 마우스 오른쪽 버튼으로 클릭하고 속성을 선택합니다.
- 세부 정보 탭을 선택합니다.
- 속성 목록에서 하드웨어 ID 또는 호환 가능한 ID를 선택하십시오.
디바이스에서 DEVPKEY_Device_HardwareIds 속성을 검색하여 하드웨어 ID 목록을 프로그래밍 방식으로 가져올 수도 있습니다. 예를 들어 해당 속성은 IoGetDevicePropertyData, SetupDiGetDeviceProperty또는 CM_Get_DevNode_Property같은 API를 사용하여 검색할 수 있습니다.
이 루틴에서 검색하는 하드웨어 ID 목록은 REG_MULTI_SZ 값입니다. 각 하드웨어 ID와 마지막 NULL 종결자를 포함하여, 하드웨어 목록의 최대 문자 수는 REGSTR_VAL_MAX_HCID_LEN
입니다. 하드웨어 ID 목록에서 가능한 최대 ID 수는 64개입니다.
하드웨어 ID의 예
다음은 PnP 디바이스에 대한 일반 식별자 예입니다.
root\*PNP0F08
다음은 PCI 디바이스대한
PCI\VEN_1000&DEV_0001&SUBSYS_00000000&REV_02