Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В Windows Vista и более поздних версиях Windows модель унифицированных свойств устройства поддерживает свойство устройства, представляющее идентификатор экземпляра устройства. Модель унифицированного свойства устройства использует ключ свойстваDEVPKEY_Device_InstanceId для представления этого свойства.
Windows Server 2003, Windows XP и Windows 2000 также поддерживают это свойство. Однако эти более ранние версии Windows не поддерживают ключ свойств модели унифицированных свойств устройства. Вместо этого можно получить идентификатор экземпляра устройства в этих предыдущих версиях Windows, вызвав CM_Get_Device_ID или SetupDiGetDeviceInstanceId. Для обеспечения совместимости с этими более ранними версиями Windows в Windows Vista и более поздних версиях также поддерживаются CM_Get_Device_ID и SetupDiGetDeviceInstanceId. Однако для доступа к этому свойству в Windows Vista и более поздних версиях следует использовать соответствующий ключ свойства.
Сведения об использовании ключей свойств для доступа к свойствам драйвера устройства в Windows Vista и более поздних версиях см. в разделе "Доступ к свойствам экземпляра устройства" (Windows Vista и более поздних версий).
Сведения о получении идентификатора экземпляра устройства в Windows Server 2003, Windows XP и Windows 2000 см. в следующих примерах.
Строки идентификатора экземпляра устройства должны быть меньше MAX_DEVICE_ID_LEN символов (включая NULL), определенных в cfgmgr32.h. Это предположение можно использовать для запроса идентификатора экземпляра устройства с помощью кода, например:
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);
}
}
}