Abrufen eines Geräteinstanzbezeichners

In Windows Vista und höheren Versionen von Windows unterstützt das einheitliche Geräteeigenschaftenmodell eine Geräteeigenschaft, die das Gerät instance Bezeichner darstellt. Das einheitliche Geräteeigenschaftenmodell verwendet den DEVPKEY_Device_InstanceId-Eigenschaftsschlüssel, um diese Eigenschaft darzustellen.

Windows Server 2003, Windows XP und Windows 2000 unterstützen diese Eigenschaft ebenfalls. Diese früheren Windows-Versionen unterstützen jedoch nicht den Eigenschaftenschlüssel des einheitlichen Geräteeigenschaftenmodells. Stattdessen können Sie ein Gerät instance Bezeichner in diesen früheren Versionen von Windows abrufen, indem Sie CM_Get_Device_ID oder SetupDiGetDeviceInstanceId aufrufen. Um die Kompatibilität mit diesen früheren Versionen von Windows zu gewährleisten, unterstützen Windows Vista und höhere Versionen auch CM_Get_Device_ID und SetupDiGetDeviceInstanceId. Sie sollten jedoch den entsprechenden Eigenschaftenschlüssel verwenden, um auf diese Eigenschaft unter Windows Vista und höher zuzugreifen.

Informationen zur Verwendung von Eigenschaftenschlüsseln zum Zugreifen auf Gerätetreibereigenschaften unter Windows Vista und höheren Versionen finden Sie unter Zugreifen auf Geräteinstanzeigenschaften (Windows Vista und höher).

Informationen zum Abrufen eines Geräte-instance-Bezeichners unter Windows Server 2003, Windows XP und Windows 2000 finden Sie in den folgenden Beispielen.

Geräte instance-Bezeichnerzeichenfolgen müssen kleiner als MAX_DEVICE_ID_LEN Zeichen (einschließlich NULL) sein, die in cfgmgr32.h definiert sind. Sie können diese Annahme verwenden, um das Gerät instance Bezeichner mit Code wie:

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

oder alternativ, wenn Ihr Puffer dynamisch dimensionieren soll:

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