Bagikan melalui


Mengambil Pengenal Instans Perangkat

Di Windows Vista dan versi Windows yang lebih baru, model properti perangkat terpadu mendukung properti perangkat yang mewakili pengidentifikasi instans perangkat. Model properti perangkat terpadu menggunakan kunci propertiDEVPKEY_Device_InstanceId untuk mewakili properti ini.

Windows Server 2003, Windows XP, dan Windows 2000 juga mendukung properti ini. Namun, versi Windows yang lebih lama ini tidak mendukung kunci atribut dari model atribut perangkat terpadu. Sebagai gantinya, Anda dapat mengambil pengidentifikasi instans perangkat pada versi Windows sebelumnya ini dengan memanggil CM_Get_Device_ID atau SetupDiGetDeviceInstanceId. Untuk mempertahankan kompatibilitas dengan versi Windows yang lebih lama ini, Windows Vista dan versi yang lebih baru juga mendukung CM_Get_Device_ID dan SetupDiGetDeviceInstanceId. Namun, Anda harus menggunakan kunci properti yang sesuai untuk mengakses properti ini di Windows Vista dan yang lebih baru.

Untuk informasi tentang cara menggunakan kunci properti untuk mengakses properti driver perangkat pada Windows Vista dan versi yang lebih baru, lihat Mengakses Properti Instans Perangkat (Windows Vista dan Yang Lebih Baru).

Untuk mengambil pengidentifikasi instans perangkat di Windows Server 2003, Windows XP, dan Windows 2000, lihat contoh berikut.

String pengidentifikasi instans perangkat harus kurang dari MAX_DEVICE_ID_LEN karakter (termasuk NULL) yang ditentukan dalam cfgmgr32.h. Anda dapat menggunakan asumsi tersebut untuk mengkueri pengidentifikasi instans perangkat dengan kode seperti:

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

atau atau, jika Anda ingin buffer Anda berukuran dinamis:

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