获取运行中的句柄

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】相关推荐

  1. linux pipe 命名管道,linux 进程学习笔记-named pipe (FIFO)命名管道

    与"无名管道"不同的是,FIFO拥有一个名称来标志它,所谓的名称实际上就是一个路径,比如"/tmp/my_fifo",其对应到磁盘上的一个管道文件,如果我们用f ...

  2. 在Linux系统下实现进程,Linux进程学习(一)之Linux进程的基本知识和实现

    最近一周学习了Linux 进程编程的知识,现对其总结如下. 在第一部分中我们先对进程的基本概念以及在Linux 中是如何来现实进程的进行介绍 Tiger-John说明 : 许多人在学习中只注重如何编程 ...

  3. Linux进程学习(孤儿进程和守护进程)

    孤儿进程和守护进程 通过前面的学习我们了解了如何通过fork()函数和vfork()函数来创建一个进程.现在 我们继续深入来学习两个特殊的进程:孤儿进程和守护进程 一.孤儿进程 1.什么是 孤儿进程 ...

  4. Android9.0(Pie) system_server进程学习

    0.引言 在上篇文章<Zygote--Android系统中java世界的受精卵>中,我们提到了zygote的一个关键动作,那就是fork出system_server进程.这篇文章我们就来详 ...

  5. Python进程学习笔记-进程创建fork

    1. 进程 VS 程序 编写完毕的代码,在没有运行的时候,称之为程序 正在运行着的代码,就成为进程 进程,除了包含代码以外,还有需要运行的环境等,所以和程序是有区别的. 2. fork( ) Pyth ...

  6. php进程学习(一)

    https://www.php.cn/php-ercikaifa-345122.html https://m.php.cn/article/421935.html 一.在Linux操作系统中有哪些信号 ...

  7. linux中怎样获得进程描述符,linux进程学习-进程描述符,控制块

    datepicker使用 JqueryUI作为一个优秀的前端库,被广泛的应用在项目中.之前做的一个排班考勤系统,跟时间打交道较多,对时间控件做过一些对比,觉得jqueryUI里的这个datepicke ...

  8. Linux 进程学习(四)------ sigaction 函数

    转自:http://www.cnblogs.com/wblyuyang/archive/2012/11/13/2768923.html 使用 sigaction 函数:  signal 函数的使用方法 ...

  9. Python进程学习笔记-multiprocessing模块

    如果你打算编写多进程的服务程序,Unix/Linux无疑是正确的选择.由于Windows没有fork调用,难道在Windows上无法用Python编写多进程的程序? 由于Python是跨平台的,自然也 ...

  10. 进程学习:进程间通信(传统通信方式)1.无名管道

    无名管道的特点: 1.适用场景:只能用于具有亲缘关系的两个进程之间: 2.通信模式:半双工模式,具有固定的读端(0)和写端(1): 3.读写方式:用文件io,不支持lseek: 4.读阻塞:当管道中无 ...

最新文章

  1. 解题报告(一)B、(CF453D) Little Pony and Elements of Harmony(FWT经典套路 + 任意模数 k 进制FWT + 快速幂)(2)
  2. jquery php cookie,jQuery的Cookie插件 cookie 使用方法
  3. 编译包含Google Play服务App的SDK版本问题
  4. Linux下导入,导出mysql数据库的命令
  5. 还不明白可空类型原理? 我可要挖到底了
  6. mysql表变量临时表_表变量和临时表详解
  7. vue在ie9中的兼容问题
  8. 前端学习(1863)vue之电商管理系统电商系统之绘制登录表单区域
  9. css 盒模型 0302
  10. 05-sqlyog的安装与基本使用
  11. android布局添加背景颜色,android-获取布局的背景色
  12. 【es】es 编译 jar hell!
  13. python大文件排序_Python如何实现大文件排序?Python大文件排序的实现方法
  14. 【leetcode】链表题(python)
  15. 微博三方登陆原理讲解
  16. Springboot中Aspect实现切面(以记录日志为例)
  17. 广义瑞利商_瑞利商和广义瑞利商
  18. BUUCTF web(三)
  19. u盘插电脑计算机卡了,U盘连接电脑非常卡的解决方法-电脑自学网
  20. fest3d_AssertJ Fest Hamcrest

热门文章

  1. python数据分析神器_太香了!墙裂推荐6个Python数据分析神器!!
  2. java时间格式转js_使用jquery或java脚本将日期时间转换为rfc3339格式
  3. 点击图片放大至原始图片大小
  4. 牛客NOIP暑期七天营-提高组1
  5. WPF 中的设备无关单位
  6. Java on Windows Mobile
  7. linux ubuntu 关于vim得一些基本命令
  8. MongoDB存储基础教程
  9. spring boot高性能实现二维码扫码登录(上)——单服务器版
  10. jquery-文档操作