获取进程句柄

获取进程句柄的方式有很多种,之前有说到CreateProcess函数,该函数在一个进程中打开另一个进程,并且得到子进程的句柄,不过有时候我们更想获得正在运行的进程的句柄。获取正在运行的进程句柄也有几种方式,下面介绍一下几个函数。

FindWindow

invoke    FindWindow,lpClassName,lpWindowName

该函数返回一个窗口句柄,第一个参数指向要取得句柄的窗口类的名称,第二个参数指向窗口的标题。

GetWindowThreadProcessId

invoke    GetWindowThreadProcessId,hWnd,lpdwProcessId

该函数获取创建窗口的进程的ID。第一个参数就是要获取ID的进程创建的窗口的句柄。第二个参数指向一个双字变量,函数会返回 进程的ID到里面。

OpenProcess

invoke    OpenProcess,dwDesireAccess,bInheritHandle,dwProcessId
.if       eaxmov    hProcess,eax
.endif

该函数通过进程ID获得进程的句柄。

  • dwDesiredAccess:指定需要对该进程进行的操作,指定操作需要操作代码,操作代码可以在MSDN中查看。
  • bInheritHandle:指明返回的句柄是否可以被当前进程的子进程继承,如果参数指定为TRUE,那么句柄可以被继承。
  • dwProcessId:指定目标进程的进程ID。

函数执行成功返回被打开的进程的句柄,如果失败则返回NULL,这个时候可能时因为权限不够。如果我们不需要再对该进程进行操作了,一定要用CloseHandle函数将获得的句柄关闭。

按照以上的顺序使用函数,就能获得一个已经打开的进程的句柄。

第二种方法就是通过快照函数获得进程的句柄。快照,也就是说该函数会像照相一样,获取一下当前系统这一刻的进程的状态。

通过快照函数可以获取一个进程的列表,还可以获取获取线程和模块等对象的列表。

CreateToolhelp32Snapshot

invoke    CreateToolhelp32Snapshot,dwFlags,th32ProcessID
.if       eaxmov    hSnapShot,eax
.endif

dwFlags参数用来指定快照中需要返回的对象,参数可以指定对进程中的堆进行枚举,对进程中的模块进行枚举,对系统范围内进程进行枚举,对系统范围内的线程进行枚举。

后面一个参数用来指定一个进程ID,当dwFlags参数指定为进行系统范围的枚举时,这个会自动忽略。

该函数执行成功后返回一个快照句柄,然后我们可以通过两个函数来获得系统里所有进程的信息。

Process32First

invoke    Process32First,hSnapShot,offset stProcess

该函数用来进行首次调用。第一个参数是之前获得的快照句柄。第二个参数指向一个结构。

PROCESSENTRY32结构

PROCESSENTRY32    STRUCTdwSize            DWORD    ?cntUsage          DWORD    ?    th32ProcessID     DWORD    ?        ;进程IDth32ModuleID      DWORD    ?        ;进程默认堆的IDcntThreads        DWORD    ?        ;进程模块的IDth32ParentProcessID    DWORD    ?   ;pcPriClassBase    DWORD    ?        ;进程的父进程的IDdwFlags           DWORD    ?szExeFile         db    MAX_PATH dup(?)    ;进程对应的可执行文件名
PROCESSENTRY32    ENDS

函数执行成功后进程的信息就会返回到这个结构中。但是在使用函数前要先将结构中的dwSize字段填写为结构的长度。

用该函数首次获取进程的信息后,后面再到循环中用Process32Next函数获取剩余的进程的信息。获取进程的顺序是按照26个英文字母的顺序来的。

这两个函数是通过快照获取进程的函数,前面讲过快照函数还可以获取线程,堆,模块的信息。对应的函数:Thread32First,Thread32Next,Heap32First,Heap32Next,Module32First,Module32Next。不同的函数对应的结构也不一样。

win32两种获取进程句柄的方式相关推荐

  1. 两种获取connectionString的方式

    两种获取connectionString的方式 1. public static string connectionString = ConfigurationManager.ConnectionSt ...

  2. Hibernate中两种获取Session的方式

    转自:https://www.jb51.net/article/130309.htm Session:是应用程序与数据库之间的一个会话,是hibernate运作的中心,持久层操作的基础.对象的生命周期 ...

  3. java获取项目中的路径_java中几种获取项目路径方式

    转自http://caodaoxi.iteye.com/blog/1234805 在jsp和class文件中调用的相对路径不同. 在jsp里,根目录是WebRoot 在class文件中,根目录是Web ...

  4. python用outlook自动发邮件_python使用两种发邮件的方式smtp和outlook示例

    smtp是直接调用163邮箱的smtp服务器,需要在163邮箱中设置一下.outlook发送就是Python直接调用win32方式.调用程序outlook直接发送邮件. import win32com ...

  5. python通过outlook发送邮件_python使用两种发邮件的方式smtp和outlook示例

    本篇文章主要介绍了python使用两种发邮件的方式smtp和outlook示例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下. smtp是直接调用163邮箱的smtp服务器,需要在163邮箱中设置 ...

  6. 二阶段补充:文件上传服务端处理,后端文件上传、前端两种文件上传方式

    1.文件上传 2.后端文件上传 两种方案: 兼容性较好的commons-fileupload,支持所有版本的Servlet,即所有版本的Tomcat 优点: 兼容性 缺点 需要外部jar,比较麻烦.代 ...

  7. 在计算机系统中有两种不同的图像编码方式,第二章计算机系统与计算原理.ppt...

    第二章计算机系统与计算原理 大学计算机基础 * 信息表示与处理 ----西文字符 ASCII 码是美国信息交换标准代码(American Standard Code for Information I ...

  8. TF之RNN:TF的RNN中的常用的两种定义scope的方式get_variable和Variable

    TF之RNN:TF的RNN中的常用的两种定义scope的方式get_variable和Variable 目录 输出结果 代码设计 输出结果 代码设计 # tensorflow中的两种定义scope(命 ...

  9. php怎么获取分类数,php 两种获取分类树的方法

    php 两种获取分类树的方法 1. /** * 获取分类树 * @param array $array 数据源 * @param int $pid 父级ID * @param int $level 分 ...

最新文章

  1. php新窗口打开链接,wordpress如何设置在新窗口打开链接
  2. 卢伟冰曝Redmi K50系列最新进展:天玑9000调校比较顺利
  3. C语言中结构体内存存储方式
  4. Python中fastapi构建的web项目进行docker部署
  5. 【细胞分割】基于matlab中值滤波+分水岭法细胞计数【含Matlab源码 640期】
  6. navicat执行.sql文件
  7. Linux抓包(wireshark+tcpdump)
  8. 统计学中p值计算公式_统计学中的p值怎么算,具体步骤
  9. 概率论 方差公式_数学提高方差的计算公式是什么
  10. arduino并口屏_74HC595等串口转并口芯片的Arduino实用封装
  11. 计算机硬盘如何制作成移动硬盘,电脑拆出来的闲置硬盘别扔 这么做帮你把它变成移动硬盘...
  12. node项目部署到云服务器
  13. javaFx(7)文本阅读器
  14. 201919102004张雪婷(第七次作业)
  15. 第二章 Spring MVC入门 —— 跟开涛学SpringMVC
  16. Python批量读取txt文件
  17. 有关联想拯救者Y7000重装window10系统
  18. PCB板区域裁剪及尺寸标注
  19. 攻防世界mfw解题wp
  20. 是什么原因让上海宝付感觉现在的钱越来越不经花?

热门文章

  1. matlab网格迭代,Matlab网格划分程序Distmesh讲解
  2. lims实验室管理系统试用版应该有哪些功能?都在这了
  3. 项目MFC总结(二)——读取CSV文件将数据转化为图像显示在图片控件
  4. 华中科技大学计算机acm,我校代表队在2018年ACM-ICPC世界总决赛中取得佳绩
  5. 谨以此文纪念逝去的SUN
  6. 游戏联运平台的运营模式是什么?
  7. 江西计算机信息科学,张光河 - 江西师范大学 - 计算机信息工程学院
  8. 让你的Python输出更好看
  9. 射频规范认证测试指南
  10. 多边形内部两两连线最多分出的区域数公式