WMI获取远程计算机信息的问题

shootgoal911 2007-12-10 04:37:17
请问各位高手:
我在MSDN上copy了一段获得远程计算机信息的代码。其中

hres = CoInitializeSecurity(
NULL,
-1, // COM authentication
NULL, // Authentication services
NULL, // Reserved
RPC_C_AUTHN_LEVEL_DEFAULT, // Default authentication
RPC_C_IMP_LEVEL_IMPERSONATE, // Default Impersonation
NULL, // Authentication info
EOAC_NONE, // Additional capabilities
NULL // Reserved
);

然后ConnectServer也连接正确。

下面设置权限,同样返回值正确正确
hres = CoSetProxyBlanket(
pSvc, // Indicates the proxy to set
RPC_C_AUTHN_WINNT, // RPC_C_AUTHN_xxx
RPC_C_AUTHZ_NONE, // RPC_C_AUTHZ_xxx
NULL, // Server principal name
RPC_C_AUTHN_LEVEL_CALL, // RPC_C_AUTHN_LEVEL_xxx
RPC_C_IMP_LEVEL_IMPERSONATE, // RPC_C_IMP_LEVEL_xxx
NULL, // client identity
EOAC_NONE // proxy capabilities
);

但是在执行下面这段时,hres 为 0x80041003,大概权限有问题
IEnumWbemClassObject* pEnumerator = NULL;
cout << "Step 6" <<endl;
hres = pSvc->ExecQuery(
bstr_t("WQL"),
bstr_t("Select * from Win32_OperatingSystem"),
WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY,
NULL,
&pEnumerator
);

搞了一整天了,不知道怎么回事,焦急万分。

ps:有目标机器的用户名和密码,用下面的vbs脚本测试成功

strComputer = "192.168.1.xxx"
Set objSWbemLocator = CreateObject("WbemScripting.SWbemLocator")
Set objSWbemServices = objSWbemLocator.ConnectServer _
(strComputer, "root\cimv2", _
"mydomain\myuser", "mypassword")

Set colProcessList = objSWbemServices.ExecQuery( _
"Select * From Win32_Process")
For Each objProcess in colProcessList
Wscript.Echo "Process Name: " & objProcess.Name
Next

小弟谢谢大家了

...全文
132 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
shootgoal911 2007-12-11
  • 打赏
  • 举报
回复
大家帮帮忙,我着急死了
ljc007 2007-12-11
  • 打赏
  • 举报
回复
用批处理应该可以实现的,可惜我对WMIC命令还不够熟悉,爱莫能助了。
shootgoal911 2007-12-11
  • 打赏
  • 举报
回复
恩,谢啦
drifter250771 2007-12-11
  • 打赏
  • 举报
回复
转开发版吧

6,850

社区成员

发帖
与我相关
我的任务
社区描述
Windows 2016/2012/2008/2003/2000/NT
社区管理员
  • Windows Server社区
  • qishine
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧