c++ - 作为服务运行时连接到远程机器的 WMI

标签 c++ wmi

我正在编写一些代码来在远程机器上执行 wmi 查询和方法执行。我的登录凭据是域管理员。当我在应用程序模式下运行时,一切正常。当我作为服务运行时,它不会像预期的那样工作,因为默认帐户服务使用 isLocal 系统。当我将服务设置为作为我的凭据运行时,远程 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 有点剥夺了一些安全权限;您需要将您的帐户设置为“受信任的委派”(非常但不推荐),或者签署您的代码。或者,您可以向进程传递显式权限。

关于c++ - 作为服务运行时连接到远程机器的 WMI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10620554/

相关文章:

c++ - 在 C++ 中对对象的输入数组进行排序

c# - 从 USB 打印机获取信息

c# - 从 Win32_TCPIPPrinterPort 检索主机地址时出现问题

c# - 系统启动/重新启动时 WMI 调用花费太多时间

c++ - Box2d反重力问题

c++ - Qt Designer .ui 和 Visual Studio 事件处理

c++ - 32 位与 64 位库修饰

c++ - sqlite3中使用汉字

windows - 使用 wmic 作为不同的用户在本地主机上创建进程

c# - .Net GetProcesses 的访问被拒绝