Sdílet prostřednictvím


Načtení identifikátoru instance zařízení

V systému Windows Vista a novějších verzích systému Windows podporuje jednotný model vlastností zařízení vlastnost zařízení, která představuje identifikátor instance zařízení. Model vlastností sjednoceného zařízení používá k reprezentaci této vlastnosti klíč vlastnostiDEVPKEY_Device_InstanceId.

Tuto vlastnost podporují také systémy Windows Server 2003, Windows XP a Windows 2000. Tyto starší verze Windows však nepodporují klíč vlastnosti modelu sjednocených vlastností zařízení. Místo toho můžete načíst identifikátor instance zařízení v těchto starších verzích Windows voláním CM_Get_Device_ID nebo SetupDiGetDeviceInstanceId. Kvůli zachování kompatibility s těmito staršími verzemi systému Windows podporují systém Windows Vista a novější verze také CM_Get_Device_ID a SetupDiGetDeviceInstanceId. Pro přístup k této vlastnosti v systému Windows Vista a novější byste však měli použít odpovídající klíč vlastnosti.

Informace o použití klíčů vlastností pro přístup k vlastnostem ovladače zařízení v systému Windows Vista a novějších verzích naleznete v tématu Přístup k vlastnostem instance zařízení (Windows Vista a novější).

Pokud chcete načíst identifikátor instance zařízení v systémech Windows Server 2003, Windows XP a Windows 2000, přečtěte si následující příklady.

Řetězce identifikátoru instance zařízení musí být menší než MAX_DEVICE_ID_LEN znaky (včetně null), které jsou definovány v cfgmgr32.h. Tento předpoklad můžete použít k dotazování identifikátoru instance zařízení s kódem, jako je:

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);
}

nebo případně pokud chcete, aby vaše vyrovnávací paměť byla dynamicky velká:

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);
        }
    }
}