Windows平台監控目標程序及需注意的問題

2021-06-28 06:01:19 字數 2425 閱讀 9390

最近專案中需要監控目標程序並抓取其資訊,定位對方程序一般有兩種方式:1、hook系統函式createprocess;2、抓取程序快照,採用輪詢的方式獲取目標程序;

此處採用第二種方式,**如下(有簡單注釋):

tmyprocess = class

private

fhandle: cardinal;

fprocessid: cardinal;

fpath :string;

public

property processid:cardinal read fprocessid write fprocessid;

property handle:cardinal read fhandle write fhandle;

property path:string read fpath write fpath;

end;

function findprocess(pname: string;var processinfo: tmyprocess): bool;

var hnd : hwnd;//控制代碼

ahprocess :cardinal;

fprocessentry32 : tprocessentry32; //結構型別的變數

flag,included: boolean; //返回乙個布林值(用來判斷是否找到程序資訊)

processid : dword; //儲存找到的程序id

name,szprocessname: string; //儲存找到的程序名稱 end;

i,index:integer;

info: tmyprocess ;

begin

result := false;

trydebug.debug('監控執行緒開啟');

fprocessentry32.dwsize := sizeof(fprocessentry32); //給tprocessentry32結構的第乙個引數賦值(也可以理解為把這個結構的第乙個引數初始化)

flag := process32first(hnd,fprocessentry32); //使用 process32first函式取得第乙個程序的資訊

while flag = true do //如果 process32first函式執行成功也就是說找到程序列表裡的第乙個程序時開始迴圈

begin

flag := process32next(hnd,fprocessentry32); //取得第下乙個程序資訊

name := fprocessentry32.szexefile; //取得乙個程序的名稱

//設定string物件的長度,否則會寫錯誤

if name = pname then //如果程序名等於這個字串

begin

//開啟已經存在的執行緒,並返回執行緒控制代碼

ahprocess := openprocess(process_all_access, false, fprocessentry32.th32processid);

setlength(szprocessname, max_path);

//獲取程序ip對應的應用程式的路徑

getmodulefilenameex(ahprocess,0,pansichar(szprocessname),max_path);

if processlist.existed(fprocessentry32.th32processid) <0 then

begin

info := tmyprocess.create;

processinfo := info;

processinfo.processid := fprocessentry32.th32processid;

processinfo.handle := ahprocess;

processinfo.state := stnew ;

processinfo.path := szprocessname ;

result := true;

exit;

end;

end;

checkexitprocess;

clearexitprocess;

end;

finally

closehandle(hnd);

end;

end;

以上**使用過程中,記憶體很快被消耗完,淨查閱msdn文件後發現,使用createtoolhelp32snapshot建立程序快照後,需使用closehandle關閉其控制代碼,以釋放記憶體。需要注意的是在winnt中使用closehandle釋放記憶體,而在wince(還有人用嗎,哈哈)中要使用

closetoolhelp32snapshot關閉快照釋放記憶體。

祝好!歡迎斧正,望您不吝賜教!

windows程序監控

最近開發乙個程序監控的服務,由於對windows api不熟,所以折騰了小兩周才完全跑通,特記錄一下 1由於需求需要根據程序名來進行監控,所以首先要根據程序名來獲取程序控制代碼 同名程序可能有多個,比如,起了多個notepad.exe 通過程序名獲取程序控制代碼集 返回值為 同名程序個數 不超過20...

windows下bat實現監控程序

echo off checkservice for f tokens 5 n in qprocess.exe find supernode.exe do if n supernode.exe goto checkmessage else goto restartservice restartserv...

Docker監控平台

目錄docker監控平台由容器監控元件cadvisor 主機監控元件node exporter 時序資料庫prometheus 告警處理元件alertmanager 圖表展示工具grafana構成,所有元件均已容器方式執行。docker run tid name grafana p 3000 300...