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


функция CM_Query_And_Remove_SubTreeA (cfgmgr32.h)

Функция CM_Query_And_Remove_SubTree проверяет, можно ли удалить экземпляр устройства и его дочерние элементы, и, если да, она удаляет их.

Синтаксис

CMAPI CONFIGRET CM_Query_And_Remove_SubTreeA(
  [in]            DEVINST        dnAncestor,
  [out, optional] PPNP_VETO_TYPE pVetoType,
  [out, optional] LPSTR          pszVetoName,
  [in]            ULONG          ulNameLength,
  [in]            ULONG          ulFlags
);

Параметры

[in] dnAncestor

Дескриптор экземпляра устройства, предоставленного вызывающим, к устройству в корне удаляемого поддеревья. Этот дескриптор экземпляра устройства привязан к локальному компьютеру.

[out, optional] pVetoType

(Необязательно) Если вызывающий объект не передает значение NULL и запрос на удаление наложен вето (то есть функция возвращает CR_REMOVE_VETOED), при возврате это указывает на PNP_VETO_TYPE типизированное значение, указывающее причину вето.

[out, optional] pszVetoName

(Необязательно) Если вызывающий объект не передает значение NULL и запрос на удаление наложен вето (то есть функция возвращает CR_REMOVE_VETOED), при возврате это указывает на текстовую строку, связанную с типом вето. Тип сведений, предоставляемых этой строкой, зависит от значения, полученного pVetoType. Сведения об этих строках см. в разделе PNP_VETO_TYPE.

[in] ulNameLength

Указанное вызывающим объектом значение, представляющее длину (количество символов) строкового буфера, предоставленного pszVetoName. Для этого параметра должно быть задано значение MAX_PATH.

[in] ulFlags

Побитовое ИЛИ констант флага, предоставленных вызывающей стороны, которые описаны в разделе Примечания .

Возвращаемое значение

Если операция выполнена успешно, функция возвращает CR_SUCCESS. В противном случае он возвращает один из других кодов ошибок с CR_ префиксом, определенных в Cfgmgr32.h.

Комментарии

Функция CM_Query_And_Remove_SubTree позволяет приложению подготовить устройство к безопасному удалению с локального компьютера. Используйте эту функцию для удаления устройств, только если драйвер не настроил элемент SurpriseRemovalOKDEVICE_CAPABILITIES. Если драйвер установил параметр SurpriseRemovalOK, приложение должно вызывать CM_Request_Device_Eject вместо CM_Query_And_Remove_SubTree.

CM_Query_And_Remove_SubTree поддерживает настройку параметра флагов ulFlags с помощью одного из следующих двух флагов; Эти флаги применяются только в том случае, если Windows или установщик накладывает вето на удаление устройства:

Flag Описание
CM_REMOVE_UI_OK Функция позволяет отобразить диалоговое окно пользователя, указывающее причину вето. Это параметр флага по умолчанию.
CM_REMOVE_UI_NOT_OK Функция подавляет отображение диалогового окна пользователя, указывающего причину вето.

Начиная с Windows XP , CM_Query_And_Remove_SubTree также поддерживает установку следующего дополнительного флага: Этот флаг применяется только в том случае, если функция успешно удаляет экземпляр устройства:

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

Состояние устройства сбрасывается одним из следующих элементов:

  • Вызов CM_Setup_DevNode для устройства и указание CM_SETUP_DEVNODE_RESET. После сброса состояния устройства таким образом можно перезапустить устройство, вызвав CM_Reenumerate_DevNode для экземпляра устройства. После сброса состояния устройства любая другая операция, которая перечисляет устройство, также перезапустит устройство, например, если для повторной регистрации устройств используется диспетчер устройств.
  • Устройство отсоединяется и повторно подключено либо компьютер перезагружается. В этом случае состояние устройства будет сброшено, а устройство будет перезапущено.
  • Если этот флаг не установлен, состояние устройства не нужно сбрасывать. Вы можете перезапустить удаленное устройство, вызвав CM_Setup_DevNode для устройства и указав CM_SETUP_DEVNODE_READY. Любая другая операция, которая повторно использует устройство, также перезапустит устройство. Примером операции повторной регистрации устройства является вызов CM_Reenumerate_DevNode для устройства, отсоединение и повторное подключение устройства или перезагрузка компьютера. |

Приложения Windows, которые не требуют низкоуровневой операции CM_Query_And_Remove_SubTree , должны использовать запрос DIF_PROPERTYCHANGE на отключение устройства вместо использования CM_Query_And_Remove_SubTree для удаления устройства. Запрос DIF_PROPERTYCHANGE можно использовать для включения, отключения, перезапуска, остановки или изменения свойств устройства.

Вызывающие функции должны иметь SeLoadDriverPrivilege. (Привилегии описаны в документации по Microsoft Windows SDK.)

Сведения об использовании дескрипторов экземпляров устройства, привязанных к локальному компьютеру, см. в разделе CM_Get_Child.

Требования

Требование Значение
Минимальная версия клиента Доступно в Microsoft Windows 2000 и более поздних версиях Windows.
Целевая платформа Универсальное
Верхняя часть cfgmgr32.h (включая Cfgmgr32.h)
Библиотека Cfgmgr32.lib

См. также раздел

CM_Get_Child
CM_Query_And_Remove_SubTree_Ex
CM_Reenumerate_DevNode
CM_Request_Device_Eject
CM_Setup_DevNode
DIF_PROPERTYCHANGE