设置客户端应用程序进程安全性

调用 WMI 接口的客户端应用程序可以控制其进程的安全级别。 所有 WMI 应用程序都通过 COM 访问 WMI,可调用 COM 函数 CoInitializeSecurity 来设置进程的安全性。 对 WMI 进行异步调用的应用程序和注册为事件使用者的应用程序会在调用 WMI 时设置安全级别。

如果不显式调用 CoInitializeSecurity,COM 将使用注册表中的值对其进行隐式调用。 但是,注册表值可能具有较低的模拟和身份验证设置,这些设置不能提供 WMI 所需的安全性。 有关详细信息,请参阅使用 C++ 设置默认进程安全级别

建议不要异步访问 WMI。 异步回调会使未经身份验证的用户能够向接收器提供数据。 这会给脚本和应用程序带来安全风险。 若要消除这些风险,请使用半同步通信或同步通信,或者在客户端应用程序中执行适当的访问检查。 有关详细信息,请参阅调用方法

调用任何 WMI 代理(IWbemServicesIEnumWbemClassObjectIWbemCallResultIWbemRefresher)都使用进程外指针。 有关默认值和建议的详细信息,请参阅设置 IWbemServices 和其他代理的安全性

以下过程介绍了在应用程序进程上设置 WMI 安全性时必须执行的步骤。

在应用程序进程上设置 WMI 的安全性

  1. 确定运行客户端应用程序的 Windows 操作系统所需的安全级别。
  2. 调用 COM CoInitializeSecurity 函数,为运行客户端应用程序的进程设置默认安全性。 这声明了其他应用程序访问运行你的应用程序的进程所需的安全性。
  3. 如果需要更改单个代理的安全性(例如,在另一次调用 IWbemServices 时),请调用 CoSetProxyBlanket
  4. 如果需要控制远程硬件或需要更多权限的系统对象,请使用 AdjustTokenPrivileges 函数启用必要的权限。 请注意,无法启用进程尚未向其分配的权限。 有关详细信息,请参阅检查对专用对象的访问

若要进一步了解如何设置默认进程安全级别,请参阅使用 C++ 设置默认进程安全级别使用 VBScript 设置默认进程安全级别