纵谈进程的枚举.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
纵谈进程的枚举

纵谈进程枚举 进程与DLL的基础知识 大家知道,Windows 98/2000/XP都是多任务操作系统。所谓多任务,就是系统中可以同时运行多个进程。而所谓进程,就是应用程序的运行实例。通俗地讲,进程就是一个运行起来的.EXE程序。 系统中的进程都用一个DWORD类型的数据来唯一标识,我们称之为PID。即使同一个应用程序运行多个实例,它们的PID也是不一样的。另外,进程拥有自己私有的虚拟地址空间,进程与进程之间不会相互干扰;每个进程都至少包含一条线程。 那么,DLL与进程又有什么关系呢?大家知道,自Windows诞生之日起,Windows操作系统就使用DLL来支持公共函数调用。DLL中实现的函数代码不出现在.EXE文件中,但可以被各个进程所使用。 使用DLL的好处包括: 1) 可以显著地减小每个组件的大小(特别是对于一些大型软件系统)。 2) 使升级更为简单。如果我们想要使用新版本的函数,改变DLL中的函数后,只需重新编译DLL项目,然后再连接使用该函数的各个应用程序;而应用程序本身不需要重新编译。 3) 便于功能模块化,乃至开发任务的团队协作。 一般来说,一个进程总是调用这个或那个DLL中的函数。进程与DLL是一种依赖关系。在我们的演示程序中,我们不仅要做进程枚举,我们还要来揭示进程与DLL的这种依赖关系。演示程序的用户界面如下: 图1 演示程序之用户界面 好了,言归正转,我们直奔主题。接下去,我们就来逐一介绍各种进程枚举方法。 方法一:使用工具库(Tool Help Library)函数 这是一种历史最悠久、也是最基本的方法(从Windows 95开始就支持这种方法)。这些API函数中,最重要的当属CreateToolhelp32Snapshot,它的函数原型如下: HANDLE WINAPI CreateToolhelp32Snapshot( DWORD dwFlags, DWORD th32ProcessID ); 这个函数的功能就是给系统拍快照。拍照的对象由参数dwFlags决定,比如dwFlags值为TH32CS_SNAPPROCESS表示对象为系统中的所有进程,值为TH32CS_SNAPMODULE表示对象为由th32ProcessID参数指定的进程调用的所有模块(也就是DLL)。 当调用CreateToolhelp32Snapshot函数给指定的对象拍完快照之后,我们就可以使用Process32First、Process32Next、Module32First、Module32Next等函数进行取片工作了,就是遍历刚才拍下来的所有进程、进程调用的所有模块。 我们的演示程序提供了完整的代码实现: BOOL CToolHelpSpy::BuildProcessList(void) { // 给系统中所有进程拍快照 HANDLE hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); if (hProcessSnap == INVALID_HANDLE_VALUE) { return FALSE; } PROCESSENTRY32 pe32 = {0}; pe32.dwSize = sizeof(PROCESSENTRY32); // 遍历拍下来的所有进程 if (Process32First(hProcessSnap, pe32)) { do { if (pe32.th32ProcessID strcmp(pe32.szExeFile, System)) { // 保存进程的名字、PID CProcessItem processItem; processItem.SetProcessName(pe32.szExeFile); processItem.SetProcessId(pe32.th32ProcessID); // 加入列表保存 mProcList.AddTail(processItem); } } while (Process32Next(hProcessSnap, pe32)); } CloseHandle(hProcessSnap

文档评论(0)

liwenhua00 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档