win32两种获取进程句柄的方式

win32两种获取进程句柄的方式

获取进程句柄

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

FindWindow

invoke FindWindow,lpClassName,lpWindowName

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

GetWindowThreadProcessId

invoke GetWindowThreadProcessId,hWnd,lpdwProcessId

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

OpenProcess

invoke OpenProcess,dwDesireAccess,bInheritHandle,dwProcessId

.if eax

mov hProcess,eax

.endif

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

dwDesiredAccess:指定需要对该进程进行的操作,指定操作需要操作代码,操作代码可以在MSDN中查看。bInheritHandle:指明返回的句柄是否可以被当前进程的子进程继承,如果参数指定为TRUE,那么句柄可以被继承。dwProcessId:指定目标进程的进程ID。函数执行成功返回被打开的进程的句柄,如果失败则返回NULL,这个时候可能时因为权限不够。如果我们不需要再对该进程进行操作了,一定要用CloseHandle函数将获得的句柄关闭。

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

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

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

CreateToolhelp32Snapshot

invoke CreateToolhelp32Snapshot,dwFlags,th32ProcessID

.if eax

mov hSnapShot,eax

.endif

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

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

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

Process32First

invoke Process32First,hSnapShot,offset stProcess

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

PROCESSENTRY32结构

PROCESSENTRY32 STRUCT

dwSize DWORD ?

cntUsage DWORD ?

th32ProcessID DWORD ? ;进程ID

th32ModuleID DWORD ? ;进程默认堆的ID

cntThreads DWORD ? ;进程模块的ID

th32ParentProcessID DWORD ? ;

pcPriClassBase DWORD ? ;进程的父进程的ID

dwFlags DWORD ?

szExeFile db MAX_PATH dup(?) ;进程对应的可执行文件名

PROCESSENTRY32 ENDS

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

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

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

💡 相关推荐

斗罗大陆:魂师对决维护时间是什么时候
健康365人工客服电话

斗罗大陆:魂师对决维护时间是什么时候

📅 09-27 👀 3195
cf抽hk417活动穿越火线朱雀hk417怎么获得
bet28365365官网

cf抽hk417活动穿越火线朱雀hk417怎么获得

📅 07-23 👀 7646
分类:美国通信公司
365bet开户平台

分类:美国通信公司

📅 07-14 👀 6214