Windows平台监控目标进程及需注意的问题

2024-02-21 02:08

本文主要是介绍Windows平台监控目标进程及需注意的问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

最近项目中需要监控目标进程并抓取其信息,定位对方进程一般有两种方式:1、Hook系统函数CreateProcess;2、抓取进程快照,采用轮询的方式获取目标进程;

此处采用第二种方式,代码如下(有简单注释):


TMyProcess = classprivateFhandle: Cardinal;Fprocessid: Cardinal;Fpath :string;publicproperty processid:Cardinal  read Fprocessid write Fprocessid;property handle:Cardinal  read Fhandle write Fhandle;property path:string  read Fpath write Fpath;end;

function FindProcess(pname: string;var processInfo: TMyProcess): BOOL;
varhnd : hwnd;//句柄AhProcess :Cardinal;fprocessentry32 : TProcessEntry32; //结构类型的变量flag,included: Boolean;   //返回一个布尔值(用来判断是否找到进程信息)processid : dword; //储存找到的进程IDname,szProcessName: string; //储存找到的进程名称 end;i,index:Integer;Info: TMyProcess ;
beginResult := False;tryDebug.debug('监控线程打开');{此处增加一个事件 用来同步 遍历完进程后 如果需要在其他线程(如主进程中处理) 可用于同步 }hnd := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);   //获得进程快照句柄fprocessentry32.dwSize := sizeof(fprocessentry32); //给TProcessEntry32结构的第一个参数赋值(也可以理解为把这个结构的第一个参数初始化)Flag := Process32First(hnd,fprocessentry32); //使用 Process32First函数取得第一个进程的信息while Flag = true do //如果 Process32First函数执行成功也就是说找到进程列表里的第一个进程时开始循环beginFlag := Process32Next(hnd,FprocessEntry32); //取得第下一个进程信息name := fprocessentry32.szExeFile; //取得一个进程的名称//设置string对象的长度,否则会写错误if name = pname then //如果进程名等于这个字符串begin//打开已经存在的线程,并返回线程句柄AhProcess := OpenProcess(PROCESS_ALL_ACCESS, false, FprocessEntry32.th32ProcessID);SetLength(szProcessName, MAX_PATH);//获取进程IP对应的应用程序的路径GetModuleFileNameEx(AhProcess,0,PAnsiChar(szProcessName),MAX_PATH);if processList.Existed(FprocessEntry32.th32ProcessID) <0 thenbeginInfo := TMyProcess.Create;processInfo := Info;processInfo.processid := FprocessEntry32.th32ProcessID;processInfo.handle :=  AhProcess;processInfo.state := stNew ;processInfo.path :=  szProcessName ;Result := True;Exit;end;end;CheckExitProcess;ClearExitProcess;end;finally<span style="color:#ff6666;">CloseHandle(hnd);</span>end;
end;


以上代码使用过程中,内存很快被消耗完,净查阅MSDN文档后发现,使用CreateToolhelp32Snapshot创建进程快照后,需使用CloseHandle关闭其句柄,以释放内存。需要注意的是在WinNT中使用CloseHandle释放内存,而在WinCE(还有人用吗,哈哈)中要使用 CloseToolhelp32Snapshot关闭快照释放内存。

祝好!

欢迎斧正,望您不吝赐教!


这篇关于Windows平台监控目标进程及需注意的问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/730268

相关文章

使用Python创建一个功能完整的Windows风格计算器程序

《使用Python创建一个功能完整的Windows风格计算器程序》:本文主要介绍如何使用Python和Tkinter创建一个功能完整的Windows风格计算器程序,包括基本运算、高级科学计算(如三... 目录python实现Windows系统计算器程序(含高级功能)1. 使用Tkinter实现基础计算器2.

MySQL主从同步延迟问题的全面解决方案

《MySQL主从同步延迟问题的全面解决方案》MySQL主从同步延迟是分布式数据库系统中的常见问题,会导致从库读取到过期数据,影响业务一致性,下面我将深入分析延迟原因并提供多层次的解决方案,需要的朋友可... 目录一、同步延迟原因深度分析1.1 主从复制原理回顾1.2 延迟产生的关键环节二、实时监控与诊断方案

在.NET平台使用C#为PDF添加各种类型的表单域的方法

《在.NET平台使用C#为PDF添加各种类型的表单域的方法》在日常办公系统开发中,涉及PDF处理相关的开发时,生成可填写的PDF表单是一种常见需求,与静态PDF不同,带有**表单域的文档支持用户直接在... 目录引言使用 PdfTextBoxField 添加文本输入域使用 PdfComboBoxField

SQLyog中DELIMITER执行存储过程时出现前置缩进问题的解决方法

《SQLyog中DELIMITER执行存储过程时出现前置缩进问题的解决方法》在SQLyog中执行存储过程时出现的前置缩进问题,实际上反映了SQLyog对SQL语句解析的一个特殊行为,本文给大家介绍了详... 目录问题根源正确写法示例永久解决方案为什么命令行不受影响?最佳实践建议问题根源SQLyog的语句分

Windows系统宽带限制如何解除?

《Windows系统宽带限制如何解除?》有不少用户反映电脑网速慢得情况,可能是宽带速度被限制的原因,只需解除限制即可,具体该如何操作呢?本文就跟大家一起来看看Windows系统解除网络限制的操作方法吧... 有不少用户反映电脑网速慢得情况,可能是宽带速度被限制的原因,只需解除限制即可,具体该如何操作呢?本文

windows和Linux使用命令行计算文件的MD5值

《windows和Linux使用命令行计算文件的MD5值》在Windows和Linux系统中,您可以使用命令行(终端或命令提示符)来计算文件的MD5值,文章介绍了在Windows和Linux/macO... 目录在Windows上:在linux或MACOS上:总结在Windows上:可以使用certuti

使用Python实现IP地址和端口状态检测与监控

《使用Python实现IP地址和端口状态检测与监控》在网络运维和服务器管理中,IP地址和端口的可用性监控是保障业务连续性的基础需求,本文将带你用Python从零打造一个高可用IP监控系统,感兴趣的小伙... 目录概述:为什么需要IP监控系统使用步骤说明1. 环境准备2. 系统部署3. 核心功能配置系统效果展

解决IDEA报错:编码GBK的不可映射字符问题

《解决IDEA报错:编码GBK的不可映射字符问题》:本文主要介绍解决IDEA报错:编码GBK的不可映射字符问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录IDEA报错:编码GBK的不可映射字符终端软件问题描述原因分析解决方案方法1:将命令改为方法2:右下jav

MyBatis模糊查询报错:ParserException: not supported.pos 问题解决

《MyBatis模糊查询报错:ParserException:notsupported.pos问题解决》本文主要介绍了MyBatis模糊查询报错:ParserException:notsuppo... 目录问题描述问题根源错误SQL解析逻辑深层原因分析三种解决方案方案一:使用CONCAT函数(推荐)方案二:

Redis 热 key 和大 key 问题小结

《Redis热key和大key问题小结》:本文主要介绍Redis热key和大key问题小结,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录一、什么是 Redis 热 key?热 key(Hot Key)定义: 热 key 常见表现:热 key 的风险:二、