Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En Windows Vista y versiones posteriores de Windows, el modelo unificado de propiedades de dispositivo admite una propiedad de dispositivo que representa el identificador de instancia del dispositivo. El modelo de propiedades de dispositivo unificado usa la DEVPKEY_Device_InstanceIdclave de propiedad 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 propiedad 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 claves de propiedad para acceder a las propiedades del controlador de dispositivo en Windows Vista y versiones posteriores, consulte Acceso a las propiedades de 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 tener menos de MAX_DEVICE_ID_LEN caracteres (incluido NULL), lo que se define 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 quiere 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);
}
}
}