作为服务运行时连接到远程计算机的 WMI
Connect to WMI of remote machine when running as a service
我正在编写一些代码来在远程计算机上执行 wmi 查询和方法执行。我的登录凭据是域管理员。当我在应用程序模式下运行时,一切正常。当我作为服务运行时,它将无法正常工作,这是预期的,因为默认帐户服务使用 isLocal System。当我将服务设置为作为我的凭据运行时,远程 wmi 也工作正常。
但是,这是不可取的,因此我尝试通过在IWbemLocator.ConnectServer上提供用户名和密码来连接到服务中的远程wmi。我能够成功取回 IWbemServices 对象。但是,当我尝试从 IWbemServices 对象获取类对象时,出现错误:
//IWbemServices *pSvc
const bstr_t objectPath("stdRegProv");
const bstr_t methodName("GetStringValue");
IWbemClassObject *pClass = NULL;
HRESULT hr = pSvc->GetObject(objectPath, 0, NULL, &pClass, NULL);
返回的 hr 0x80041003,即"访问被拒绝",来自以下链接:http://msdn.microsoft.com/en-us/library/windows/desktop/aa394559%28v=vs.85%29.aspx。
通常,如果我提供了错误的用户名和密码,我将在IWbemLocator.ConnectServer上被拒绝访问。所以我在这里有点困惑为什么连接很好,但我无法获得 IWbemClassObject 对象。由于如果我使用我的域凭据作为服务帐户,它就可以工作,因此必须存在一些安全差异。我的 WMI 连接代码基于 MSDN 中的此示例代码:http://msdn.microsoft.com/en-us/library/windows/desktop/aa390418%28v=vs.85%29.aspx
WMI 会剥离一些安全权限;您需要将您的帐户设置为"受信任的委派",这非常强大且不推荐使用,或者对您的代码进行签名。或者,您可以将显式权限传递给进程。
- 为什么使用 P/Invoke 调用 dll 时,某些计算机中的 LoadLibrary 失败?
- WMI检测进程创建事件-c++
- EvtExportLogneneneba API正在将远程计算机的事件日志保存到远程PC本身.如何将其保存到主机
- 为什么我能够为阵列分配比计算机实际拥有的内存更多的内存
- 我可以使用任何好的逻辑来阻止计算机将 O 放在井字游戏中的现有 X 上
- 为什么当我有风扇时,Win32_Fan没有 WMI 实例?
- C++ 计算机猜测用户数量在 7 次猜测以内
- C++为什么我的编译器成功了,但我的计算机给出了调试错误?
- 在 c++ 中连接字符串和整数,以便在 C++ 11 不支持计算机的情况下读取多个文件
- 我的 SDL2 程序需要哪些二进制文件,以便它在另一台未安装 SDL2 的计算机中工作
- 将非常大的 int 转换为双倍,在某些计算机上会损失精度
- 如何在个人计算机和群集 (c++) 上生成相同的随机数
- 系统错误:程序无法启动,因为您的计算机中缺少MSVCP140D.DLL。尝试重新安装该程序以解决此问题
- 预处理的 C/C++ 文件是否特定于计算机?
- C++ 和 WMI:在 IWbemClassObject::P ut 方法中传递对 CIM 类的引用
- Windows桌面程序保存您的计算机会话 - 基于程序崩溃时的恢复会话
- Windows WMI - Win32_ProcessStartTrace 和 __InstanceCreationEv
- 作为服务运行时连接到远程计算机的 WMI
- 快速替换Win32_NetworkAdapter WMI类以获取本地计算机的MAC地址
- c++从本地计算机获取WMI数组数据