獲取系統的程序資訊

2021-05-10 14:03:26 字數 1558 閱讀 9314

要想獲取系統的程序資訊,有個很好的方法,就是用toolhelp,其提供的介面可以方便的滿足你的要求,如下:

#include //首先匯入標頭檔案

//pe就是我們獲取的程序結構體

//dosomething

fok = process32next(m_hsnapshot, &pe);//還有嗎?

}其中結構體processentry32定義如下:

typedef struct tagprocessentry32

processentry32;

方法二:

我們可以看到上面的方法簡單,但是獲取的程序資訊也相對簡單,下面有個方法可以獲取相對詳細程序資訊。

在windows自帶的ntdll.dll中有個介面ntquerysysteminformation可以用來查詢系統資訊的,介面定義如下:

dword (__stdcall *ntquerysysteminformation )(ulong,pvoid,ulong,ulong);

其實系統裡面的每個程序都分配乙個記憶體快,呼叫上述的介面我們就可以去查詢系統指定記憶體塊的資訊了,而程序與程序之間有乙個偏移量,所有我們只要知道了前乙個程序的資訊和其偏移量,就可以得到下個程序的位址了。

》首先定義介面ntquerysysteminformation

dword (__stdcall *ntquerysysteminformation )(ulong,pvoid,ulong,ulong);

》然後訪問dll介面

if (!ntquerysysteminformation)

ntquerysysteminformation=(dword (__stdcall*)(ulong,pvoid,ulong,ulong))

getprocaddress(getmodulehandle("ntdll.dll"),"ntquerysysteminformation");

》列舉程序

pbyte pbyinfo = null;//程序位址

pprocessinfo pprocessinfo;//程序結構

dword dwsize = 0x4000;//程序最小探索塊

wchar *pname;

bool bret = false;

pbyinfo=(pbyte) malloc(dwsize);//分配記憶體

if (pbyinfo)

pprocessinfo = ( pprocessinfo ) pbyinfo;//得到第乙個程序的位址了

//列舉所有的程序

while(1)

//do something

if ( pprocessinfo->dwrelativeoffset == 0 )//如果偏移量為0,沒有程序了

break;

//獲取下乙個程序位址

pprocessinfo=(pprocessinfo)((pbyte)pprocessinfo+pprocessinfo->dwrelativeoffset);

程序結構體定義如下:

typedef struct

_processinfo, *pprocessinfo;

獲取系統當前的程序及模組資訊

1 bool enumprocesses dword lpidprocess,dword cb,dword cbneeded 獲取當前系統的程序id列表。lpidprocess為儲存程序id的陣列,cb為陣列大小,cbneeded為實際的系統程序數 2 handle openprocess dwor...

sigar獲取程序資訊

最近工作中用到sigar,要用sigar獲得相關的cpu資訊,記憶體資訊,程序資訊等。但是大多數還是能在網上找到的。就只有獲得程序的資訊怎麼找也找不以。今天貼出來和大家分享一下,還請各位指教。獲取程序的相關資訊以及對程序資訊進行包裝 public listgetprocessinfo process...

android5 0以上獲取系統程序資訊

那以後要獲取系統執行的後台程序這個方法用不了了,谷歌了一大把,終於找到了解決的方法,獲取系統執行的程序 如下所示 這是乙個實體類,就是描述應用的一些資訊 public class taskinfo public void setcbchecked boolean cbchecked public d...