程序列舉技術

2022-03-23 23:49:30 字數 4007 閱讀 5979

1、快照方式列舉程序

createtoolhelp32snapshot() 介紹:

功能:獲取指定程序的快照, 以及這些程序使用的堆、模組和執行緒。

函式原型:handle createtoolhelp32snapshot(

dword dwflags,  // 系統快照的某些部分。

dword th32processid // 程序快照中的程序識別符號。

);引數 dwflags:值含義

th32cs_inherit

指示快照控制代碼是可繼承的。

th32cs_snapall

包括系統中的所有程序和執行緒, 以及 th32processid 中指定的程序的堆和模組。

th32cs_snapheaplist

包括快照中 th32processid 中指定的程序的所有堆。

th32cs_snapmodule

包括快照中 th32processid 中指定的程序的所有模組。

th32cs_snapmodule32

在從64位程序呼叫時, 包括快照中 th32processid 中指定的程序的所有32位模組。

包括快照中系統中的所有程序。

th32cs_snapthread

包括快照中系統中的所有執行緒。

引數 th32processid:

要包括在快照中的程序的程序識別符號。此引數可以為零以指示當前程序。

當指定了 th32cs_snapheaplist、th32cs_snapmodule、th32cs_snapmodule32

或 th32cs_snapall 值時, 將使用此引數。否則, 它將被忽略, 並且所有程序都包含在快照中。

process32first() 介紹:

功能:檢索有關系統快照中遇到的第乙個程序的資訊。

函式原型:bool process32first(

handle   hsnapshot,  // 從先前呼叫 createtoolhelp32snapshot 函式返回的快照的控制代碼。

lpprocessentry32  lppe // 指向 processentry32 結構的指標。

);引數 lppe:

processentry32 結構體:

typedef struct

tagprocessentry32 processentry32;

返回值:如果程序列表的第乙個條目已複製到緩衝區則返回 true,否則返回 false。

process32next() 介紹:

函式原型:bool process32next(

handle   hsnapshot,  // 從先前呼叫 createtoolhelp32snapshot 函式返回的快照的控制代碼。

lpprocessentry32   lppe // 指向 processentry32 結構體的指標。

);module32first() 介紹:

功能:檢索有關與程序關聯的第乙個模組的資訊。

函式原型:bool module32first(

handle  hsnapshot,  //  從先前呼叫 createtoolhelp32snapshot 函式返回的快照的控制代碼。

lpmoduleentry32  lpme // 指向 moduleentry32 結構體的指標。

);引數 lpme:

moduleentry32 結構體:

typedef struct

tagmoduleentry32 moduleentry32;

返回值:如果模組列表的第乙個條目已複製到緩衝區則返回 true,否則返回 false。

module32next() 介紹:

函式原型:bool module32next(

handle   hsnapshot, // 從先前呼叫 createtoolhelp32snapshot 函式返回的快照的控制代碼。

lpmoduleentry32   lpme // 指向 moduleentry32 結構體的指標。

);democode:

#include#include

#include

bool getprocesslist();

int main(void

)bool getprocesslist()

; moduleentry32 me32 = ;

pe32.dwsize = sizeof

(processentry32);

me32.dwsize = sizeof

(moduleentry32);

); bret = process32first(hprocesssnap,&pe32);

while

(bret)

bret = process32next(hprocesssnap,&pe32);

}closehandle(hprocesssnap);

closehandle(hmodulesnap);

return

true;

}

類似的還有 thread32first(),thread32next(),heap32listfirst(),heap32listnext()。

thread32first() 介紹:

功能:檢索有關系統快照中遇到的任何程序的第乙個執行緒的資訊。

函式原型:bool thread32first(

handle   hsnapshot,  // 從先前呼叫 createtoolhelp32snapshot 函式返回的快照的控制代碼。

lpthreadentry32  lpte // 指向 threadentry32 結構體的指標。

);引數 lpte:

threadentry32 結構體:

typedef struct

tagthreadentry32 threadentry32;

返回值:如果執行緒列表的第乙個條目已複製到緩衝區則返回 true,否則返回 false。

thread32next() 介紹:

函式原型:bool thread32next(

handle   hsnapshot,  // 從先前呼叫 createtoolhelp32snapshot 函式返回的快照的控制代碼。

lpthreadentry32  lpte // 指向 threadentry32 結構體的指標。

);heap32listfirst() 介紹:

功能:檢索有關由指定程序分配的第乙個堆的資訊。

函式原型:bool heap32listfirst(

handle   hsnapshot, // 從先前呼叫 createtoolhelp32snapshot 函式返回的快照的控制代碼。

lpheaplist32  lphl // 指向 heaplist32 結構體的指標。

);引數 lphl:

heaplist32 結構體:

typedef struct

tagheaplist32 heaplist32;

返回值:如果堆列表的第乙個條目已複製到緩衝區則返回 true,否則返回 false。

heap32listnext() 介紹:

函式原型:bool heap32listnext(

handle    hsnapshot, // 從先前呼叫 createtoolhelp32snapshot 函式返回的快照的控制代碼。

lpheaplist32  lphl // 指向 heaplist32 結構體的指標。

);

列舉程序控制代碼

目前正在做的專案進行效能測試,被通知程序控制代碼數已經到達2600多,心中甚是一驚,用procexp檢視控制代碼表得知,為型別為key的控制代碼,名稱為 registry hklm microsoft ctf assemblyitem.基本上得知是輸入法關聯的登錄檔項,而後用procmon監視登錄檔...

列舉程序資訊

1.psapi法 include include include include psapi.h pragma comment lib,psapi.lib int main numofprocess cbneededprocess sizeof dword for uint i 0 i3.wtsop...

VC列舉程序方法

在windows 2000以上的ms作業系統,通過windows的任務管理器可以列出當前系統的所有活動程序,在windows xp中,更是在控制台下增加了一條tasklist命令,讓系統下的所有程序無所遁行。這一切是怎麼實現的呢?方法二 第二種方法也很常見,通過msdn就可以找到例子 它是通過psa...