Partager via


Récupération d’un identificateur d’instance d’appareil

Dans Windows Vista et les versions ultérieures de Windows, le modèle de propriété d’appareil unifié prend en charge une propriété d’appareil qui représente l’identificateur de instance de l’appareil. Le modèle de propriété d’appareil unifié utilise la clé depropriété DEVPKEY_Device_InstanceId pour représenter cette propriété.

Windows Server 2003, Windows XP et Windows 2000 prennent également en charge cette propriété. Toutefois, ces versions antérieures de Windows ne prennent pas en charge la clé de propriété du modèle de propriété d’appareil unifié. Au lieu de cela, vous pouvez récupérer un identificateur de instance d’appareil sur ces versions antérieures de Windows en appelant CM_Get_Device_ID ou SetupDiGetDeviceInstanceId. Pour maintenir la compatibilité avec ces versions antérieures de Windows, Windows Vista et les versions ultérieures prennent également en charge CM_Get_Device_ID et SetupDiGetDeviceInstanceId. Toutefois, vous devez utiliser la clé de propriété correspondante pour accéder à cette propriété sur Windows Vista et versions ultérieures.

Pour plus d’informations sur l’utilisation des clés de propriété pour accéder aux propriétés du pilote de périphérique sur Windows Vista et versions ultérieures, consultez Accès aux propriétés de l’instance de périphérique (Windows Vista et versions ultérieures).

Pour récupérer un identificateur de instance d’appareil sur Windows Server 2003, Windows XP et Windows 2000, consultez les exemples suivants.

Les chaînes d’identificateur de instance d’appareil doivent être inférieures à des MAX_DEVICE_ID_LEN caractères (y compris NULL) définis dans cfgmgr32.h. Vous pouvez utiliser cette hypothèse pour interroger l’identificateur de instance de l’appareil avec du code comme :

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

ou bien, si vous souhaitez que votre mémoire tampon soit dimensionnée dynamiquement :

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