查看: 1438|回复: 5
收起左侧

[系统] 调用系统WMI 的API在dll中怎么找不到

[复制链接]
我在喝绿茶
发表于 2017-7-24 20:03:16 | 显示全部楼层 |阅读模式
程序调用WMI,但是相应的API在dll中找不到地址?有大神知道吗?好奇怪啊,感激不尽
hres = pLoc->ConnectServer(L"ROOT\\CimV2", NULL, NULL, 0, NULL, 0, 0, &pSvc);
services->lpVtbl->ExecQuery(SELECT * FROM Win32_Processor)

为啥这两个函数使用这样的查找方式找不到啊:
Handle = LoadLibraryA("Wbemdisp.dll");
printf("Wbemdisp.dll = 0x%x   \n", Handle);
Addr = (MYPROC)GetProcAddress(Handle, "ExecQuery");
我在喝绿茶
头像被屏蔽
 楼主| 发表于 2017-7-25 16:30:38 | 显示全部楼层
提示: 该帖被管理员或版主屏蔽
峪飞鹰
发表于 2017-7-25 16:51:02 | 显示全部楼层
因为这个Wbemdisp.dll是个COM Object DLL,它不通过ProcAddress输出API函数,而是通过Typed Library输出COM的IInterface对象。至于ExecQuery,是IWbemServices接口的成员方法。要想调用ExecQuery,你不能LoadLibrary,在保证Wbemdisp.dll已经注册的情况下,用CreateOleObject来创建IInterface接口,然后QueryInterface得到IWbemServices,再通过IWbemServices::ExecQuery调用执行。
我在喝绿茶
 楼主| 发表于 2017-7-25 19:06:03 | 显示全部楼层
峪飞鹰 发表于 2017-7-25 16:51
因为这个Wbemdisp.dll是个COM Object DLL,它不通过ProcAddress输出API函数,而是通过Typed Library输出COM ...

看了你解说理解了不少,但没有什么思路能拿那地址,请问下你有什么思路吗?
峪飞鹰
发表于 2017-7-25 19:30:17 | 显示全部楼层
我在喝绿茶 发表于 2017-7-25 19:06
看了你解说理解了不少,但没有什么思路能拿那地址,请问下你有什么思路吗?

微软 MSDN 上有技术指导和示例代码,详情参考这里
我在喝绿茶
 楼主| 发表于 2017-7-26 09:00:02 | 显示全部楼层
峪飞鹰 发表于 2017-7-25 19:30
微软 MSDN 上有技术指导和示例代码,详情参考这里。

这个好像是教如何使用,不是怎么获取方法的地址啊
您需要登录后才可以回帖 登录 | 快速注册

本版积分规则

手机版|杀毒软件|软件论坛| 卡饭论坛

Copyright © KaFan  KaFan.cn All Rights Reserved.

Powered by Discuz! X3.4( 沪ICP备2020031077号-2 ) GMT+8, 2024-4-19 06:02 , Processed in 0.112992 second(s), 16 queries .

卡饭网所发布的一切软件、样本、工具、文章等仅限用于学习和研究,不得将上述内容用于商业或者其他非法用途,否则产生的一切后果自负,本站信息来自网络,版权争议问题与本站无关,您必须在下载后的24小时之内从您的电脑中彻底删除上述信息,如有问题请通过邮件与我们联系。

快速回复 客服 返回顶部 返回列表