调用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.CoInitializeSecurity
2.CoCreateInstance
3.ConnectServer
4.CoSetProxyBlanket
5.GetObject
6.GetMethod
7.SpawnInstance
8.ExecMethod 就是在这里返回访问拒绝...我关了UAC或者admin登陆是可以,但当前用户就是不行!!!怎么提升这个权限??我提升了进程的权限,也用了GetTokenInformation和AdjustTokenPrivileges方法,就是TMD不行!!
这个到底怎么回事??!要用SetSecurityDescriptor么?怎么用?看了很多说明,微软文档翻烂了,都没找到解决方法难道就没有人知道么???高手呢??
回答正确的人我把所有分都给了!!!
用微软自己的WMI Tools工具都不能ExecMethod方法!
说明一下,这个exe是个COM,进程外的,我要通过远程调用它,但是如果它要求admin,就没办法让它launch起来。于是我改成asInvoker了。
你用命令行的方式手动提升权限,这样当然是可以的了。但我要在代码里实现。
查查 应该可以找到例子代码
看来你的情况基本上只有绕过微软UAC的限制了,简单的代码似乎是不能提升这个权限的。这就是Vista系统。也许你可以考虑将这EXE其中的功能分割为两个不同的EXE,一个EXE是asInvoker,一个是requireAdministrator. 仅供参考. :-)