调用Vista WMI的类,在执行方法的时候总是返回0x80041003,就是WBEM_E_ACCESS_DENIED。很明显是因为权限不够,我关掉UAC或者Admin登陆是可以调用的
主要过程是:
1.CoInitializeSecurity
2.CoCreateInstance
3.ConnectServer
4.CoSetProxyBlanket
5.GetObject
6.GetMethod
7.SpawnInstance
8.ExecMethod 就是在这里返回访问拒绝...我关了UAC或者admin登陆是可以,但当前用户就是不行!!!怎么提升这个权限??我提升了进程的权限,也用了GetTokenInformation和AdjustTokenPrivileges方法,就是TMD不行!!
这个到底怎么回事??!要用SetSecurityDescriptor么?怎么用?看了很多说明,微软文档翻烂了,都没找到解决方法难道就没有人知道么???高手呢??
回答正确的人我把所有分都给了!!!

解决方案 »

  1.   

    不得不说微软真TM差!就这么个简单问题,一个文档都没有!
    用微软自己的WMI Tools工具都不能ExecMethod方法!
      

  2.   

    给你的exe增加manifest,添加requireAdministrator属性,这样当你运行时,会弹出UAC的对话框,让用户提升,用户点击ok后,就获得了admin的权限了
      

  3.   

    微软的WMI tools,你右键cmd.exe,run as administrator, 然后再执行wbemtest.exe..应该就可以了
      

  4.   

    以前我的exe是自带manifest的,后来就是因为这个requireAdministrator属性,结果没办法调用它,所以就改成了asInvoker。现在再盖改回来,岂不是又不能调用这个exe了???
    说明一下,这个exe是个COM,进程外的,我要通过远程调用它,但是如果它要求admin,就没办法让它launch起来。于是我改成asInvoker了。
      

  5.   

    谢谢,你没理解我的意思。我是说我用WMI CIM Studio,在这里面执行execmethod,这样就会报错,access is denied。
    你用命令行的方式手动提升权限,这样当然是可以的了。但我要在代码里实现。
      

  6.   

    在代码中可采取ShellExecute 创建新进程 runas admin 显示要求管理员权限
    查查 应该可以找到例子代码
      

  7.   


    看来你的情况基本上只有绕过微软UAC的限制了,简单的代码似乎是不能提升这个权限的。这就是Vista系统。也许你可以考虑将这EXE其中的功能分割为两个不同的EXE,一个EXE是asInvoker,一个是requireAdministrator. 仅供参考. :-)