65.9K
CodeProject 正在变化。 阅读更多。
Home

EzProcess

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.74/5 (27投票s)

2007年1月14日

GPL3

2分钟阅读

viewsIcon

63559

downloadIcon

1763

一个进程和线程管理器应用程序。

Sample Image - EzProcess.jpg

引言

EzProcess 是一个 GUI 可执行应用程序,它显示有关所有正在运行的进程的信息:进程名称、进程 ID、父 ID 和优先级。 此外,还显示所选进程的所有线程(以及它们的基准优先级)和加载的模块(DLL)。

内部

EzProcess 基于七个 API 函数,即 CreateToolhelp32SnapshotProcess32FirstProcess32NextThread32FirstThread32NextModule32FirstModule32Next

获取所有正在运行的进程

通过使用 TH32CS_SNAPPROCESSTH32CS_SNAPTHREAD 标志调用 CreateToolhelp32Snapshot API 函数来创建快照。 之后,调用 Process32First API 函数检索系统快照中遇到的第一个进程的信息。 最后,重复调用 Process32Next,检索快照中记录的所有进程的信息。 代码如下:

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 函数检索上述创建的快照中遇到的任何进程的第一个线程的信息。 如果创建线程的进程的标识符(ThreadEntry32.th32OwnerProcessID)是所选进程的 ID,则将其显示。 重复调用 Thread32Next 并如上所述比较 ID,检索所选进程的所有线程的信息。 代码如下:

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

获取与所选进程关联的模块

为了获取与所选进程关联的模块,我们需要获取一个包含指定进程的模块列表的 新的 快照。 使用新创建的快照,我们通过使用 API 函数 Module32FirstModule32Next 迭代与指定进程关联的所有模块。

;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 进程/线程管理器能够终止选定的进程。 如下所示:

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

最后说明

EzProcess 是一个正在积极开发的項目,Jupiter 已经着手改进它。 您始终可以在 项目 论坛的 WinAsm Studio 论坛上查看更新版本。

未使用。

新版本 v1.82 已发布(完整源代码)。 您可以在 EzProcess 上找到它。

© . All rights reserved.