Dela via


Hämtar en enhetsinstansidentifierare

I Windows Vista och senare versioner av Windows stöder den enhetliga enhetsegenskapsmodellen en enhetsegenskap som representerar enhetsinstansidentifieraren. Den enhetliga enhetsegenskapsmodellen använder DEVPKEY_Device_InstanceIdegenskapsnyckel för att representera den här egenskapen.

Windows Server 2003, Windows XP och Windows 2000 stöder också den här egenskapen. Dessa tidigare Windows-versioner stöder dock inte egenskapsnyckeln för den enhetliga enhetsegenskapsmodellen. I stället kan du hämta en enhetsinstansidentifierare i dessa tidigare versioner av Windows genom att anropa CM_Get_Device_ID eller SetupDiGetDeviceInstanceId. För att upprätthålla kompatibiliteten med dessa tidigare versioner av Windows stöder Windows Vista och senare versioner även CM_Get_Device_ID och SetupDiGetDeviceInstanceId. Du bör dock använda motsvarande egenskapsnyckel för att komma åt den här egenskapen i Windows Vista och senare.

Information om hur du använder egenskapsnycklar för att komma åt egenskaper för enhetsdrivrutiner i Windows Vista och senare versioner finns i #B0 Åtkomst till egenskaper för enhetsinstanser (Windows Vista och senare) #A1 .

Information om hur du hämtar en enhetsinstansidentifierare på Windows Server 2003, Windows XP och Windows 2000 finns i följande exempel.

Enhetsinstansidentifierarsträngar måste vara mindre än MAX_DEVICE_ID_LEN tecken (inklusive NULL) som definieras i cfgmgr32.h. Du kan använda det antagandet för att fråga enhetsinstansidentifieraren med kod som:

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

eller om du vill att bufferten ska vara dynamiskt storleksanpassad:

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