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

“备注”部分中介绍的调用方提供的标志常量按位 OR。

返回值

如果操作成功,函数将返回CR_SUCCESS。 否则,它将返回 Cfgmgr32.h 中定义的其他CR_前缀错误代码之一。

注解

CM_Query_And_Remove_SubTree函数的目的是允许应用程序准备设备,以便从本地计算机安全删除。 仅当驱动程序未设置 DEVICE_CAPABILITIESSurpriseRemovalOK 成员时,才使用此函数删除设备。 如果驱动程序已设置 SurpriseRemovalOK,则应用程序应调用 CM_Request_Device_Eject 而不是 CM_Query_And_Remove_SubTree

CM_Query_And_Remove_SubTree 支持使用以下两个标志之一设置 flags 参数 ulFlags :仅当 Windows 或安装程序否决删除设备时,这些标志才适用:

标志 描述
CM_REMOVE_UI_OK 函数允许显示一个用户对话框,以指示否决的原因。 这是默认标志设置。
CM_REMOVE_UI_NOT_OK 函数禁止显示指示否决原因的用户对话框。

从 Windows XP 开始, CM_Query_And_Remove_SubTree 还支持设置以下附加标志:仅当函数成功删除设备实例时,此标志才适用:

标志 描述
CM_REMOVE_NO_RESTART 如果设置了此标志,函数将配置设备状态,以便设备在重置设备状态之前无法重启。

设备状态由以下项之一重置:

  • 为设备调用 CM_Setup_DevNode 并指定CM_SETUP_DEVNODE_RESET。 以这种方式重置设备状态后,可以通过为设备实例调用 CM_Reenumerate_DevNode 来重启设备。 重置设备状态后,枚举设备的任何其他操作也将重启设备,例如,如果使用设备管理器来重新运行设备。
  • 设备已分离并重新附加,或者计算机已重启。 在这种情况下,设备状态将重置,设备将重启。
  • 如果未设置此标志,则无需重置设备状态。 可以通过为设备调用CM_Setup_DevNode并指定 CM_SETUP_DEVNODE_READY 来重启已删除的设备。 恢复设备的任何其他操作也将重启设备。 重启设备的一个操作示例是调用设备的 CM_Reenumerate_DevNode 、分离并重新附加设备或重新启动计算机。 |

不需要低级别操作 CM_Query_And_Remove_SubTree 的 Windows 应用程序应使用 DIF_PROPERTYCHANGE 请求来禁用设备,而不是使用 CM_Query_And_Remove_SubTree 删除设备。 DIF_PROPERTYCHANGE请求可用于启用、禁用、重启、停止或更改设备的属性。

此函数的调用方必须具有 SeLoadDriverPrivilege。 Microsoft Windows SDK 文档中介绍了 (特权。)

有关使用绑定到本地计算机的设备实例句柄的信息,请参阅 CM_Get_Child

要求

要求
最低受支持的客户端 在 Microsoft Windows 2000 及更高版本的 Windows 中可用。
目标平台 通用
标头 cfgmgr32.h (包括 Cfgmgr32.h)
Library Cfgmgr32.lib

另请参阅

CM_Get_Child
CM_Query_And_Remove_SubTree_Ex
CM_Reenumerate_DevNode
CM_Request_Device_Eject
CM_Setup_DevNode
DIF_PROPERTYCHANGE