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_CAPABILITIES 的 SurpriseRemovalOK 成员时,才使用此函数删除设备。 如果驱动程序已设置 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