Win32ASM-进程学习【2】
获取运行中的句柄
1.从窗口句柄中获取进程句柄
要对进程进行某种操作,就必须首先知道该进程的句柄或者进程ID
对于自己创建的子进程来说CreateProcess函数返回了子进程句柄和进程的ID
但是如果如果要对系统中运行的某个进程进行操作,那么首先获取他们的句柄才行
如果知道某个进程的ID
那么可以通过GetWindowThreadProcessID hWnd,lpdwProcessID
该函数可以从一个窗口句柄中获取创建该窗口的进程的进程ID
hWnd指明一个窗口句柄--可以通过FIndWindow来获得这个窗口句柄
lpdwProcessID指向一个双字节的变量,函数在这里返回创建窗口进程的ID
函数的返回值是目标进程中创建该窗口的线程的线程ID
得到进程ID后,就可以通过OpenProcess函数来获取该进程的句柄了
OpenProcess dwDesiredAccess,bInheritHandle,dwProcessID
dwDesireAccess 指定需要对该进程进行的操作,要对目标进程进行某种操作
一般来说,除了系统进程以外,可以对其他函数进行任何操作,操作码可以取以下取值的组合
PROCESS_ALL_ACCESS 等于下面全部操作的组合
PROCESS_CREATE_THREAD 允许创建远程线程
PROCESS_DUP_HANDLE 允许进程句柄被复制
PROCESS_QUERY_INFORMATION 允许使用GetExitCodeProcess查询进程退出码和使用GetPriorityClass函数查询进程的优先级
PROCESS_SET_INFORMATION 允许使用SetPriorityClass函数设置进程优先级
PROCESS_VM_OPERATION 允许使用WriteProcessMemory 和 VirtualProtectEx函数修改进程的地址空间
PROCESS_VM_READ 允许对进程空间进行读操作
PROCESS_WRITE 允许对进程地址空间进行写操作
bInheritHandle 指明返回的进程句柄是否可以被当前进程的子进程继承,如果参数指定为TRUE,则进程句柄可以被继承
dwProcessID指明目标进程的ID
如果函数成功执行,返回的是被打开的进程句柄,如果函数执行失败则返回NULL.一般打开失败的原因是由于权限不够引起的,当完成对目标进程的操作之后,必须使用CloseHandle将获得的句柄关闭
2.从快照函数获取进程句柄
(1)
使用GetWindowThreadProcessID获取进程的先决条件是必须创建了窗口,对于在后台运行的没有窗口的进程该如何处理呢?
这就可以通过枚举系统中运行的进程来解决了,这个功能可以由CreateToolHelp32Snapshot函数来实现
CreateToolHelp32Snapshot dwFlags,th32ProcessID
dwFlags 用来指定快照中需要返回的对象,本函数不仅可以获取进程列表,也可以用来获取线程和模块等对象的列表,参数可以指定的值是:
TH32CS_SNAPHEAPLIST 对指定进程中的堆进行枚举
TH32CS_SNAPMODULE 对指定进程中的模块进行枚举
TH32CS_SNAPPROCESS 对系统范围中的进程进行枚举
TH32CS_SNAPTHREAD 对系统范围中的线程进行枚举
th32ProcessID参数用来指定一个进程ID 对于TH32CS_SNAPPROCESS 和TH32CS_SNAPTHREAD这个参数可以为0
因为后2者是对系统范围内的枚举
如果函数执行成功返回一个快照句柄,否则返回-1
(2)从快照句柄中获取进程参数使用Process32First和Process32Next函数
Process32Next函数循环获取快照句柄中的进程信息,当不在有剩余信息时,函数返回FALSE
Process32First和Process32Next的第一参数指向一个快照句柄,第2个参数指向一个PROCESSENTRY32结构
Process32Next hSnapshot,lpProcessEntry32
结构定义如下
<span style="font-family:Microsoft YaHei;font-size:13px;">typedef struct tagPROCESSENTRY32
{
DWORD dwSize; 结构的长度
DWORD cntUsage; 进程的引用计数
DWORD th32ProcessID; 进程ID
ULONG_PTR th32DefaultHeapID; 进程默认堆的ID
DWORD th32ModuleID; 进程模块的ID
DWORD cntThreads; 被进程创建的线程数
DWORD th32ParentProcessID; 进程的父进程ID
LONG pcPriClassBase; 被进程创建的线程的基本优先级
DWORD dwFlags; 内部使用
TCHAR szExeFile[MAX_PATH]; 进程对应的可执行文件名称
} PROCESSENTRY32,
*PPROCESSENTRY32;</span>
在返回所有进程信息之后,需要使用CloseHandle将快照句柄关闭
在结构体中返回的进程ID(th32ProcessID)和可执行的文件名(szExeFile)是我们最关心的
这样我们就可以通过OpenProcess来对进程进行各种操作了
另外在ListBox能够为每一项自定义一个32位的自定义数据
LB_SETITEMDATA 和 LB_GETITEMDATA可以设置和获取自定义数据
正好可以把th32ProcessID设置进去......
Win32ASM-进程学习【2】相关推荐
- linux pipe 命名管道,linux 进程学习笔记-named pipe (FIFO)命名管道
与"无名管道"不同的是,FIFO拥有一个名称来标志它,所谓的名称实际上就是一个路径,比如"/tmp/my_fifo",其对应到磁盘上的一个管道文件,如果我们用f ...
- 在Linux系统下实现进程,Linux进程学习(一)之Linux进程的基本知识和实现
最近一周学习了Linux 进程编程的知识,现对其总结如下. 在第一部分中我们先对进程的基本概念以及在Linux 中是如何来现实进程的进行介绍 Tiger-John说明 : 许多人在学习中只注重如何编程 ...
- Linux进程学习(孤儿进程和守护进程)
孤儿进程和守护进程 通过前面的学习我们了解了如何通过fork()函数和vfork()函数来创建一个进程.现在 我们继续深入来学习两个特殊的进程:孤儿进程和守护进程 一.孤儿进程 1.什么是 孤儿进程 ...
- Android9.0(Pie) system_server进程学习
0.引言 在上篇文章<Zygote--Android系统中java世界的受精卵>中,我们提到了zygote的一个关键动作,那就是fork出system_server进程.这篇文章我们就来详 ...
- Python进程学习笔记-进程创建fork
1. 进程 VS 程序 编写完毕的代码,在没有运行的时候,称之为程序 正在运行着的代码,就成为进程 进程,除了包含代码以外,还有需要运行的环境等,所以和程序是有区别的. 2. fork( ) Pyth ...
- php进程学习(一)
https://www.php.cn/php-ercikaifa-345122.html https://m.php.cn/article/421935.html 一.在Linux操作系统中有哪些信号 ...
- linux中怎样获得进程描述符,linux进程学习-进程描述符,控制块
datepicker使用 JqueryUI作为一个优秀的前端库,被广泛的应用在项目中.之前做的一个排班考勤系统,跟时间打交道较多,对时间控件做过一些对比,觉得jqueryUI里的这个datepicke ...
- Linux 进程学习(四)------ sigaction 函数
转自:http://www.cnblogs.com/wblyuyang/archive/2012/11/13/2768923.html 使用 sigaction 函数: signal 函数的使用方法 ...
- Python进程学习笔记-multiprocessing模块
如果你打算编写多进程的服务程序,Unix/Linux无疑是正确的选择.由于Windows没有fork调用,难道在Windows上无法用Python编写多进程的程序? 由于Python是跨平台的,自然也 ...
- 进程学习:进程间通信(传统通信方式)1.无名管道
无名管道的特点: 1.适用场景:只能用于具有亲缘关系的两个进程之间: 2.通信模式:半双工模式,具有固定的读端(0)和写端(1): 3.读写方式:用文件io,不支持lseek: 4.读阻塞:当管道中无 ...
最新文章
- 解题报告(一)B、(CF453D) Little Pony and Elements of Harmony(FWT经典套路 + 任意模数 k 进制FWT + 快速幂)(2)
- jquery php cookie,jQuery的Cookie插件 cookie 使用方法
- 编译包含Google Play服务App的SDK版本问题
- Linux下导入,导出mysql数据库的命令
- 还不明白可空类型原理? 我可要挖到底了
- mysql表变量临时表_表变量和临时表详解
- vue在ie9中的兼容问题
- 前端学习(1863)vue之电商管理系统电商系统之绘制登录表单区域
- css 盒模型 0302
- 05-sqlyog的安装与基本使用
- android布局添加背景颜色,android-获取布局的背景色
- 【es】es 编译 jar hell!
- python大文件排序_Python如何实现大文件排序?Python大文件排序的实现方法
- 【leetcode】链表题(python)
- 微博三方登陆原理讲解
- Springboot中Aspect实现切面(以记录日志为例)
- 广义瑞利商_瑞利商和广义瑞利商
- BUUCTF web(三)
- u盘插电脑计算机卡了,U盘连接电脑非常卡的解决方法-电脑自学网
- fest3d_AssertJ Fest Hamcrest