程序遍歷前先獲取程序快照
**例子如下:具體api使用查csdn
//建立程序快照(獲取系統正在執行的程序資訊,執行緒資訊等)
//第二個引數乙個程序id號,用來指定要獲取哪乙個程序的快照,當獲取系統程序列表或獲取當前程序快照時可以設為0
if (hprocesssnap == invalid_handle_value)
processentry32 sprosnap;
sprosnap.dwsize = sizeof(sprosnap);
//從程序快照中獲取第乙個程序資訊
bool bret = process32first(hprocesssnap, &sprosnap);
if (bret)
while (bret);
}
執行緒和模組遍歷和程序遍歷類似
執行緒遍歷
createtoolhelp32snapshot(th32cs_snapthread, 0);//建立執行緒快照
thread32first(hsnapshot, &ppe);//獲取第乙個執行緒
thread32next(hsnapshot, &ppe);//獲取下乙個執行緒
模組遍歷
createtoolhelp32snapshot(th32cs_snapmodule, 0);//建立模組快照
module32first(hsnapshot, &ppe);//獲取第乙個模組
module32next(hsnapshot, &ppe);//獲取下乙個模組
視窗遍歷
hwnd hwnd = ::getdesktopwindow();//獲取桌面視窗控制代碼,因為桌面是最後乙個視窗
hwnd hnext = ::getwindow(hwnd, gw_child);//獲取桌面上乙個視窗控制代碼
do ;
::getwindowtext(hnext, szbuff, maxbyte);
dword dwprocid = 0;
dword dwthreadid = getwindowthreadprocessid(hnext, &dwprocid);
cstring csfmt;
csfmt.format(_t("procid:%d name:%s"),
dwprocid,
szbuff);
outputdebugstring(csfmt);
hnext = ::getnextwindow(hnext, gw_hwndnext);
} while (hnext != null);
程序間讀寫和修改記憶體屬性
int naddr = getdlgitemint(edt_addr);//從控制項獲取位址
//1. 查詢視窗
hwnd hwnd = ::findwindow(null, _t("testmemory"));
//2. 拿到程序id
dword dwprocessid;
::getwindowthreadprocessid(hwnd, &dwprocessid);
//3. 開啟程序
handle hprocess = ::openprocess(
process_all_access,
true,
dwprocessid);
//修改記憶體屬性
dword dwoldprotect = 0;
bool bret = virtualprotectex(
hprocess, //程序控制代碼
(lpvoid)naddr, //修改記憶體屬性的位址
1,//修改整個分頁(修改是按分頁單位修改的,寫1個位元組也會修改乙個分頁)
page_execute_readwrite,//修改為讀寫許可權
&dwoldprotect);
if (!bret)
//4. 寫入資料
char chbyte = 0xeb;
bret = writeprocessmemory(
hprocess, //程序控制代碼
(lpvoid)naddr, //寫入記憶體的位址
&chbyte, //寫入的資料
sizeof(chbyte), //寫入資料的大小
null);
if (!bret)
//還原原來的記憶體屬性
bret = virtualprotectex(
hprocess, //程序控制代碼
(lpvoid)naddr, //修改記憶體屬性的位址
1,//修改整個分頁
dwoldprotect,
&dwoldprotect);
程序間的操作
vfork 函式建立子程序時永遠是子程序先執行,父程序後執行,並且子程序必須要指定退出方式即exit 1 用fork來建立程序時子程序與父程序隨機執行,所以要避免子程序成為孤兒程序就需要乙個函式wait status 這樣就能保證父程序比子程序晚結束。殭屍程序 子程序結束之後沒有被父程序 孤兒程序 ...
Linux 程序間關係和守護程序
程序組是乙個或多個程序的集合。通常與乙個作業相關聯,可以接收來自同一終端的各種訊號。我們知道,每個程序都有乙個程序id存放在task struct中,程序組也有程序組id,是唯一的。乙個執行緒組擁有主線程,主線程id就是執行緒組id,類似地,程序組也有乙個組長程序,組長程序的id就是程序組id。組長...
作業系統的多程序組織 程序間切換
使用者使用計算機就是啟動了一堆程序 使用者管理計算機就是管理這一堆程序 即根據pcb 根據狀態形成不同的佇列放在不同的位置。多個程序如何組織呢?用pcb放在不同的佇列中 就緒 阻塞 用狀態轉化來推進多個程序的執行 排程選擇下乙個程序,得到下乙個程序的pcb,把上乙個程序的執行現場儲存起來,把下乙個程...