디바이스 인스턴스 식별자 검색
Windows Vista 이상 버전의 Windows에서 통합 디바이스 속성 모델은 디바이스 instance 식별자를 나타내는 디바이스 속성을 지원합니다. 통합 디바이스 속성 모델은 DEVPKEY_Device_InstanceId속성 키를 사용하여 이 속성을 나타냅니다.
Windows Server 2003, Windows XP 및 Windows 2000도 이 속성을 지원합니다. 그러나 이러한 이전 Windows 버전은 통합 디바이스 속성 모델의 속성 키를 지원하지 않습니다. 대신 CM_Get_Device_ID 또는 SetupDiGetDeviceInstanceId를 호출하여 이전 버전의 Windows에서 디바이스 instance 식별자를 검색할 수 있습니다. 이러한 이전 버전의 Windows와 호환성을 유지하기 위해 Windows Vista 이상 버전도 CM_Get_Device_ID 및 SetupDiGetDeviceInstanceId를 지원합니다. 그러나 해당 속성 키를 사용하여 Windows Vista 이상에서 이 속성에 액세스해야 합니다.
속성 키를 사용하여 Windows Vista 이상 버전의 디바이스 드라이버 속성에 액세스하는 방법에 대한 자세한 내용은 디바이스 인스턴스 속성 액세스(Windows Vista 이상)를 참조하세요.
Windows Server 2003, Windows XP 및 Windows 2000에서 디바이스 instance 식별자를 검색하려면 다음 예제를 참조하세요.
디바이스 instance 식별자 문자열은 cfgmgr32.h에 정의된 문자(NULL 포함)보다 MAX_DEVICE_ID_LEN
작아야 합니다. 이러한 가정을 사용하여 다음과 같은 코드를 사용하여 디바이스 instance 식별자를 쿼리할 수 있습니다.
WCHAR DeviceInstancePath[MAX_DEVICE_ID_LEN];
cr = CM_Get_Device_ID(DevInst,
DeviceInstancePath,
sizeof(DeviceInstancePath)/sizeof(DeviceInstancePath[0]),
0);
if (cr != CR_SUCCESS) {
printf("Error 0x%08x retrieving device instance path.\n", cr);
} else {
printf("Device instance path is %ws.\n", DeviceInstancePath);
}
또는 버퍼 크기를 동적으로 조정하려는 경우 다음을 수행합니다.
ULONG DeviceInstancePathLength = 0;
PWSTR DeviceInstancePath = NULL;
cr = CM_Get_Device_ID_Size(&DeviceInstancePathLength,
DevInst,
0);
if (cr != CR_SUCCESS) {
printf("Error 0x%08x retrieving device instance path size.\n", cr);
} else {
DeviceInstancePath = (PWSTR)malloc(DeviceInstancePathLength * sizeof(WCHAR));
if (DeviceInstancePath != NULL) {
cr = CM_Get_Device_ID(DevInst,
DeviceInstancePath,
DeviceInstancePathLength,
0);
if (cr != CR_SUCCESS) {
printf("Error 0x%08x retrieving device instance path.\n", cr);
} else {
printf("Device instance path is %ws.\n", DeviceInstancePath);
}
}
}