设置客户端应用程序进程安全性
调用 WMI 接口的客户端应用程序可以控制其进程的安全级别。 所有 WMI 应用程序都通过 COM 访问 WMI,可调用 COM 函数 CoInitializeSecurity 来设置进程的安全性。 对 WMI 进行异步调用的应用程序和注册为事件使用者的应用程序会在调用 WMI 时设置安全级别。
如果不显式调用 CoInitializeSecurity,COM 将使用注册表中的值对其进行隐式调用。 但是,注册表值可能具有较低的模拟和身份验证设置,这些设置不能提供 WMI 所需的安全性。 有关详细信息,请参阅使用 C++ 设置默认进程安全级别。
建议不要异步访问 WMI。 异步回调会使未经身份验证的用户能够向接收器提供数据。 这会给脚本和应用程序带来安全风险。 若要消除这些风险,请使用半同步通信或同步通信,或者在客户端应用程序中执行适当的访问检查。 有关详细信息,请参阅调用方法。
调用任何 WMI 代理(IWbemServices、IEnumWbemClassObject、IWbemCallResult 或 IWbemRefresher)都使用进程外指针。 有关默认值和建议的详细信息,请参阅设置 IWbemServices 和其他代理的安全性。
以下过程介绍了在应用程序进程上设置 WMI 安全性时必须执行的步骤。
在应用程序进程上设置 WMI 的安全性
- 确定运行客户端应用程序的 Windows 操作系统所需的安全级别。
- 调用 COM CoInitializeSecurity 函数,为运行客户端应用程序的进程设置默认安全性。 这声明了其他应用程序访问运行你的应用程序的进程所需的安全性。
- 如果需要更改单个代理的安全性(例如,在另一次调用 IWbemServices 时),请调用 CoSetProxyBlanket。
- 如果需要控制远程硬件或需要更多权限的系统对象,请使用 AdjustTokenPrivileges 函数启用必要的权限。 请注意,无法启用进程尚未向其分配的权限。 有关详细信息,请参阅检查对专用对象的访问。
若要进一步了解如何设置默认进程安全级别,请参阅使用 C++ 设置默认进程安全级别和使用 VBScript 设置默认进程安全级别。