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 Server 2003、Windows XP、Windows 2000 でデバイス インスタンス識別子を取得するには、次の例を参照してください。
デバイス インスタンス識別子の文字列は、MAX_DEVICE_ID_LEN で定義されている 文字 (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);
}
}
}