Condividi tramite


Recupero di un identificatore di istanza del dispositivo

In Windows Vista e versioni successive di Windows, il modello di proprietà dispositivo unificato supporta una proprietà del dispositivo che rappresenta l'identificatore dell'istanza del dispositivo. Il modello di proprietà del dispositivo unificato usa la chiave della proprietàDEVPKEY_Device_InstanceId per rappresentare questa proprietà.

Anche Windows Server 2003, Windows XP e Windows 2000 supportano questa proprietà. Tuttavia, queste versioni precedenti di Windows non supportano la chiave di proprietà del modello di proprietà del dispositivo unificato. È invece possibile recuperare un identificatore di istanza del dispositivo in queste versioni precedenti di Windows chiamando CM_Get_Device_ID o SetupDiGetDeviceInstanceId. Per mantenere la compatibilità con queste versioni precedenti di Windows, Windows Vista e versioni successive supportano anche CM_Get_Device_ID e SetupDiGetDeviceInstanceId. È tuttavia consigliabile usare la chiave della proprietà corrispondente per accedere a questa proprietà in Windows Vista e versioni successive.

Per informazioni su come usare le chiavi delle proprietà per accedere alle proprietà del driver di dispositivo in Windows Vista e versioni successive, vedere Accesso alle proprietà dell'istanza del dispositivo (Windows Vista e versioni successive).For information about how to use property keys to access device driver properties on Windows Vista and later versions, see Access Device Instance Properties (Windows Vista and Later).

Per recuperare un identificatore di istanza del dispositivo in Windows Server 2003, Windows XP e Windows 2000, vedere gli esempi seguenti.

Le stringhe dell'identificatore dell'istanza del dispositivo devono essere minori di MAX_DEVICE_ID_LEN caratteri (incluso NULL), definito in cfgmgr32.h. È possibile usare tale presupposto per eseguire una query sull'identificatore dell'istanza del dispositivo con codice simile al seguente:

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

in alternativa, se si desidera che il buffer venga ridimensionato in modo dinamico:

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