进程和线程信息查看工具

在现代操作系统中,了解和监控系统中的进程和线程是非常重要的。本文将介绍一个名为EzProcess的工具,它能够展示所有正在运行的进程信息,包括进程名称、进程ID、父进程ID和优先级。此外,它还能显示选定进程的所有线程(包括其基础优先级)以及加载的模块(DLLs)。

工具内部原理

EzProcess基于七个API函数构建,分别是:

  • CreateToolhelp32Snapshot
  • Process32First
  • Process32Next
  • Thread32First
  • Thread32Next
  • Module32First
  • Module32Next

首先,通过调用CreateToolhelp32Snapshot API函数并使用TH32CS_SNAPPROCESS或TH32CS_SNAPTHREAD标志来创建快照。然后,通过调用Process32First API函数获取系统快照中遇到的第一个进程的信息。最后,通过反复调用Process32Next API函数,可以获取快照中记录的所有进程的信息。代码如下:

ASM Invoke CreateToolhelp32Snapshot, TH32CS_SNAPPROCESS OR TH32CS_SNAPTHREAD, NULL MOV hSnapShot, EAX ; Get first process MOV ProcEntry32.dwSize, SizeOf PROCESSENTRY32 Invoke Process32First, hSnapShot, ADDR ProcEntry32 @@: .If EAX ; Display Process Information ; Get Next process Invoke Process32Next, hSnapShot, ADDR ProcEntry32 JMP @B .EndIf

通过调用Thread32First API函数获取快照中遇到的任何进程的第一个线程的信息。如果线程的创建者进程ID(ThreadEntry32.th32OwnerProcessID)与选定进程的ID相同,则显示该线程。通过反复调用Thread32Next并比较ID,可以获取选定进程的所有线程的信息。代码如下:

ASM ; Get first thread MOV ThreadEntry32.dwSize, SizeOf THREADENTRY32 Invoke Thread32First, hSnapShot, ADDR ThreadEntry32 @@: .If EAX .If ThreadEntry32.th32OwnerProcessID == EDI ; Display Thread Information ; Get Next Thread Invoke Thread32Next, hSnapShot, ADDR ThreadEntry32 JMP @B .EndIf .EndIf

为了获取与选定进程关联的模块,需要创建一个新的快照,该快照包括指定进程的模块列表。使用新创建的快照,通过使用API函数Module32First和Module32Next迭代所有与指定进程关联的模块。代码如下:

ASM ; Let's create a new snapshot that includes the module list of the specified process Invoke CreateToolhelp32Snapshot, TH32CS_SNAPMODULE, EDI MOV EBX, EAX ; Get first Module MOV ModuleEntry32.dwSize, SizeOf MODULEENTRY32 Invoke Module32First, EBX, ADDR ModuleEntry32 @@: .If EAX ; Display Module Information ; Get Next Module Invoke Module32Next, EBX, ADDR ModuleEntry32 JMP @B .EndIf Invoke CloseHandle, EBX

扩展功能

此外,EzProcess进程/线程管理器还能够终止选定的进程。这是通过以下方式完成的:

ASM Invoke OpenProcess, PROCESS_TERMINATE, FALSE, lvi.lParam ; where lvi.lParam is the process ID .If EAX MOV EBX, EAX ; hProcess Invoke TerminateProcess, EBX, 0 .If !EAX Invoke ErrorMessage .EndIf Invoke CloseHandle, EBX ; hProcess .Else Invoke ErrorMessage .EndIf
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485