首页 新闻 会员 周边 捐助

关于C#调用C++动态库和COM库安全机制的问题

0
[已解决问题] 解决于 2014-08-08 10:44

项目中用C#调用C++的动态库,C++那边会访问计算机的硬件信息,然后反应COM权限不够,问我们C#能不能调用CoInitialize和CoInitializeSecurity函数,想想以前也没用过这个,问了C#同事也无果,百度了后粘了一点代码在程序主入口点里调用CoInitializeSecurity,返回0x80010119,即重复调用,再找了下说CLR会先调用这块的函数,有没有大神能指点下

问题补充:

说是COM库相关其实这块基本没东西,涉及不到COM接口、服务什么的。

打个比方:比如我想获取计算机CPU信息,.NET有封好的方法,我直接调用就可以了;而用C++来做,就需要先调用CoInitialize等函数;现在的情况就是,.NET方面想要获取,C++方面将那块的函数封装成一个DLL给.NET调用,就出现这样的问题了。

现在问题已解决,C++那边说是换了一种方式调用初始化权限的函数,感谢大神们的回复!

ever_Young的主页 ever_Young | 初学一级 | 园豆:159
提问于:2014-08-08 10:03
< >
分享
最佳答案
0

这个 COM 是进程内的,还是进程外的?

奖励园豆:5
Launcher | 高人七级 |园豆:45050 | 2014-08-08 10:08

本人菜鸟一个,以前也没用过COM。。。这块还没有启动别的进程,应该是一个进程里

ever_Young | 园豆:159 (初学一级) | 2014-08-08 10:14

@ever_Young: 你应该先让他们写个 C++ 的可以正确执行的程序以验证他们的判断上是正确的。或者你使用管理员权限运行你的 C# 程序,测试下能否正确读取硬件信息。

Launcher | 园豆:45050 (高人七级) | 2014-08-08 10:19

@Launcher: 感谢回复,现在问题已解决

ever_Young | 园豆:159 (初学一级) | 2014-08-08 10:38
其他回答(1)
0

CoInitialize和CoInitializeSecurity是COM初始化程序,由系统调用,不能显式调用(鉴于不可控,所以限制只执行一次,而且,在COM初始化的时候一定会被执行,自然不能再调用了)。

 

你的问题不是通过调用这两个函数就能解决的,而是要从安全角度出发,否则,WINDOWS系统的安全体系早就崩溃了。

 

报告权限不够,首先可以对你的应用授权超级管理员,这个一般都不会有问题的。

519740105 | 园豆:5810 (大侠五级) | 2014-08-08 10:26

感谢回复,学习了。

支持(0) 反对(0) ever_Young | 园豆:159 (初学一级) | 2014-08-08 10:39
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册