Поделиться через


Доступ к свойствам экземпляра устройства

В Windows Vista и более поздних версиях Windows приложения и установщики могут получать доступ к свойствам экземпляра устройства , которые являются частью единой модели свойств , вызывая следующие функции.

Примечание

SetupApi поддерживается не во всех выпусках Windows. По возможности следует использовать ИНТЕРФЕЙСы API нижнего уровня, например те, которые доступны через CfgMgr32.dll. Советы см. в разделе Перенос из SetupApi в CfgMgr32 .

Сведения о том, как получить доступ к свойствам устройств в Windows Server 2003, Windows XP и Windows 2000, см. в статье Использование программы установкиAPI и Configuration Manager для доступа к свойствам устройства.

Получение свойств

API свойств, такие как CM_Get_DevNode_Property или SetupDiGetDeviceProperty , можно использовать для получения свойства устройства, заданного для экземпляра устройства. Например, ниже приведен пример, который извлекается свойство, которое, как ожидается, имеет тип 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);
}

установка свойств.

API свойств, такие как CM_Set_DevNode_Property или SetupDiSetDeviceProperty , можно использовать для задания свойства устройства для экземпляра устройства. Например, ниже приведен пример, который задает свойство типа 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);
}

Получение списка доступных свойств

API свойств, такие как CM_Get_DevNode_Property_Keys или SetupDiGetDevicePropertyKeys , можно использовать для получения массива ключей свойств устройства, определяющих свойства устройства, которые в настоящее время заданы для экземпляра устройства. Его можно использовать для определения полного набора свойств, заданных на устройстве. Однако использовать эти функции, особенно для последующего получения значений всех свойств, которые эти функции указывают, что заданы на экземпляре устройства, следует использовать экономно, так как получение списка всех свойств и их значений может быть дорогостоящей операцией.