Compartir a través de


Recuperación de un identificador de instancia de dispositivo

En Windows Vista y versiones posteriores de Windows, el modelo de propiedades de dispositivo unificado admite una propiedad de dispositivo que representa el identificador de instancia del dispositivo. El modelo de propiedades de dispositivo unificado usa la clave de propiedadDEVPKEY_Device_InstanceId para representar esta propiedad.

Windows Server 2003, Windows XP y Windows 2000 también admiten esta propiedad. Sin embargo, estas versiones anteriores de Windows no admiten la clave de propiedad del modelo de propiedades de dispositivo unificado. En su lugar, puede recuperar un identificador de instancia de dispositivo en estas versiones anteriores de Windows llamando a CM_Get_Device_ID o SetupDiGetDeviceInstanceId. Para mantener la compatibilidad con estas versiones anteriores de Windows, Windows Vista y versiones posteriores también admiten CM_Get_Device_ID y SetupDiGetDeviceInstanceId. Sin embargo, debe usar la clave de propiedad correspondiente para tener acceso a esta propiedad en Windows Vista y versiones posteriores.

Para obtener información sobre cómo usar las claves de propiedad para acceder a las propiedades del controlador de dispositivo en Windows Vista y versiones posteriores, vea Obtener acceso a las propiedades de la instancia de dispositivo (Windows Vista y versiones posteriores).

Para recuperar un identificador de instancia de dispositivo en Windows Server 2003, Windows XP y Windows 2000, consulte los ejemplos siguientes.

Las cadenas de identificador de instancia de dispositivo deben ser menores que MAX_DEVICE_ID_LEN los caracteres (incluido NULL), que se definen en cfgmgr32.h. Puede usar esa suposición para consultar el identificador de instancia de dispositivo con código como:

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

o bien, si desea que el búfer tenga un tamaño dinámico:

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