다음을 통해 공유


디바이스 인스턴스 식별자 검색

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_IDSetupDiGetDeviceInstanceId를 지원합니다. 그러나 해당 속성 키를 사용하여 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);
        }
    }
}