Compartir vía


Acceso a las propiedades de la instancia de dispositivo

En Windows Vista y versiones posteriores de Windows, las aplicaciones e instaladores pueden tener acceso a las propiedades de instancia de dispositivo que forman parte del modelo de propiedades unificadas mediante una llamada a las siguientes funciones.

Nota

SetupApi no se admite en todas las ediciones de Windows. Cuando sea posible, debe usar las API de nivel inferior, como las disponibles a través de CfgMgr32.dll. Consulte Migración de SetupApi a CfgMgr32 para obtener sugerencias.

Para obtener información sobre cómo acceder a las propiedades del dispositivo en Windows Server 2003, Windows XP y Windows 2000, vea Usar SetupAPI y Configuration Manager para acceder a las propiedades del dispositivo.

Recuperación de propiedades

Las API de propiedad, como CM_Get_DevNode_Property o SetupDiGetDeviceProperty , se pueden usar para recuperar una propiedad de dispositivo establecida para una instancia de dispositivo. Por ejemplo, este es un ejemplo que recupera una propiedad que se espera que sea de tipo DEVPROP_TYPE_UINT32:

DEVPROPTYPE PropertyType = DEVPROP_TYPE_EMPTY;
ULONG PropertySize = 0;
ULONG SomeValue = 0;

PropertySize = sizeof(SomeValue);
cr = CM_Get_DevNode_Property(DevInst,
                             &DEVPKEY_CustomProperty,
                             &PropertyType,
                             (PBYTE)&SomeValue,
                             &PropertySize,
                             0);

if (cr == CR_NO_SUCH_VALUE) {
    printf("Property was not found\n");
} else if (cr != CR_SUCCESS) {
    printf("Error 0x%08x retrieving property.\n", cr);
} else if ((PropertyType != DEVPROP_TYPE_UINT32) || (PropertySize != sizeof(SomeValue))) {
    printf("Property data was not of the expected type or size\n");
} else {
    printf("Property value: 0x%08x\n", SomeValue);
}

Configurar propiedades

Las API de propiedad como CM_Set_DevNode_Property o SetupDiSetDeviceProperty se pueden usar para establecer una propiedad de dispositivo para una instancia de dispositivo. Por ejemplo, este es un ejemplo que establece una propiedad de tipo DEVPROP_TYPE_UINT32:

ULONG SomeValue = 5;
cr = CM_Set_DevNode_Property(DevInst,
                             &DEVPKEY_CustomProperty,
                             DEVPROP_TYPE_UINT32,
                             (PBYTE)&SomeValue,
                             sizeof(SomeValue),
                             0);

if (cr != CR_SUCCESS) {
    printf("Error 0x%08x setting property.\n", cr);
}

Obtención de una lista de propiedades disponibles

Las API de propiedad, como CM_Get_DevNode_Property_Keys o SetupDiGetDevicePropertyKeys , se pueden usar para recuperar una matriz de las claves de propiedad del dispositivo que identifican las propiedades del dispositivo que están establecidas actualmente para una instancia de dispositivo. Se puede usar para determinar el conjunto completo de propiedades establecidas en un dispositivo. Sin embargo, el uso de estas funciones, especialmente para recuperar posteriormente el valor de todas las propiedades que estas funciones indican se establecen en la instancia del dispositivo, se debe usar con moderación, ya que la recuperación de la lista de todas las propiedades y sus valores puede ser una operación costosa.