擷取裝置實例識別碼
在 Windows Vista 和更新版本的 Windows 中, 統一裝置屬性模型 支援代表裝置實例識別碼的裝置屬性。 統一裝置屬性模型會使用 DEVPKEY_Device_InstanceId屬性索引鍵 來表示此屬性。
Windows Server 2003、Windows XP 和 Windows 2000 也支援此屬性。 不過,這些舊版的 Windows 不支援統一裝置屬性模型的屬性索引鍵。 相反地,您可以藉由呼叫 CM_Get_Device_ID 或 SetupDiGetDeviceInstanceId,來擷取這些舊版 Windows 上的裝置實例識別碼。 為了維持與這些舊版 Windows 的相容性,Windows Vista 和更新版本也支援 CM_Get_Device_ID 和 SetupDiGetDeviceInstanceId。 不過,您應該使用對應的屬性索引鍵,在 Windows Vista 和更新版本上存取此屬性。
如需如何使用屬性金鑰存取 Windows Vista 和更新版本上的設備磁碟機屬性的詳細資訊,請參閱 存取 Windows Vista 和更新版本的裝置實例屬性 (Windows Vista 和更新版本) 。
若要擷取 Windows Server 2003、Windows XP 和 Windows 2000 上的裝置實例識別碼,請參閱下列範例。
裝置實例識別碼字串必須小於 MAX_DEVICE_ID_LEN
字元, (包括 cfgmgr32.h中定義的 Null) 。 您可以使用該假設,使用下列程式碼來查詢裝置實例識別碼:
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);
}
}
}