- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 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
您可能关注的文档
最近下载
- (2025秋)人教版二年级数学上册全册教案(新教材).pdf
- 第二单元大单元教学设计 高一语文必修上册.docx VIP
- 2025年燃气安全生产管理人员模拟考试题库及答案.docx VIP
- 高中音乐 人音版 必修《音乐鉴赏》《舞动心弦——舞蹈音乐》 第四课时.pptx VIP
- 住院医师临床思维培养ppt模板.pptx VIP
- 反渗透纳滤组合工艺高盐废水深度处理及零排放预浓缩.pdf VIP
- 超声成像系统数字扫描变换器(参考).pptx VIP
- JTG3441-2024 公路工程无机结合料稳定材料试验规程.pdf VIP
- 腹腔镜下卵巢囊肿剥除术配合.pptx VIP
- 2026届高三语文一轮复习教学计划.docx
文档评论(0)