a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 編程 > C > 正文

WIN32程序獲取父進程ID的方法

2020-01-26 15:25:43
字體:
來源:轉載
供稿:網友

學過windows程序設計的人都知道,windows中的進程是可以有父子關系的,擁有父子關系的進程,一旦父進程結束,子進程有會隨之退出。但是如果進程之間沒有父子關系,我們如何讓子進程在父進程退出是也同時跟著退出呢?方法有很多,本文介紹其中的一種利用父進程ID的方案,實現的原理很簡單:先獲取父進程的ID,然后通過ID來獲取父進程Handle,通過監視父進程的Handle來決定子進程是否退出。所以,這里的關鍵就是如何獲取父進程的ID。

為了獲取父進程ID,這里需要用到一個微軟未公開的API:

NTSTATUS WINAPI NtQueryInformationProcess( __in    HANDLE ProcessHandle, __in    PROCESSINFOCLASS ProcessInformationClass, __out   PVOID ProcessInformation, __in    ULONG ProcessInformationLength, __out_opt PULONG ReturnLength);

這個API位于Ntdll.dll里面,通過引用頭文件winternl.h來獲取相關的類型定義。當我們得到這個函數后,下一步就需要去了解各個函數參數的意義了,這里我們重點看一下第二個參數 PROCESSINFOCLASS結構體的內容:

 typedef struct _PROCESS_BASIC_INFORMATION {  PVOID Reserved1;  PPEB PebBaseAddress;  PVOID Reserved2[2];  ULONG_PTR UniqueProcessId;  PVOID Reserved3;} PROCESS_BASIC_INFORMATION;

這是MSDN里給出的結構體定義。到目前為止,我們還是不知道Parent進程的ID從哪里取。正所謂,天下沒有不透風的墻,經過無數高手的破解,實際上最后一個字段Reserved3就是Parent進程的ID,只要我們將它轉換為一個DWORD值即可。

經過在x86和x64的windows2003和windows20008平臺上的測試,的確是Parent進程的ID。

既然知道了Parent進程的ID出處,接下來就好辦了, 基本步驟如下:

1. 先獲取自己的進程ID,GetCurrentProcessID()

2. 獲取進程查詢句柄,調用OpenProcess()帶上PROCESS_QUERY_INFORMATION標志

3. 調用NtQueryInformationProcess()來查詢進程信息

4. 獲取父進程句柄,還是調用OpenProcess()

5. 啟動一個線程去等待父進程退出,WaitForSingleObject(ParentHandle, INFINITE)

大功告成,這樣無論是父進程正常退出,還是異常終止,子進程都能被退出。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 亚洲成人在线视频网站 | 久久久成 | 男女羞羞视频网站18 | 国产精品污www一区二区三区 | 国产精品91视频 | 日韩一二三四 | 国产精品久久久久久吹潮 | 久久久久无码国产精品一区 | 欧美字幕一区 | 午夜影院免费 | 久久久国产一区二区三区四区小说 | 先锋影音在线观看 | 久久久久国产一区二区三区 | 亚洲天堂精品在线观看 | 成人欧美一区二区三区在线观看 | 欧美亚洲国产一区 | 国产欧美在线观看 | 免费的国产视频 | 国产极品一区二区三区 | 欧美另类一二三四 | 欧美不卡 | 91嫩草在线 | 成人教育av | 97精品超碰一区二区三区 | www成人精品 | 青青草视频免费观看 | 国产精品美女一区二区三区 | 成人在线小视频 | 国产精品18久久久久久首页狼 | 久久精品国产亚洲a∨蜜臀 性视频网站免费 | 国产精品久久九九 | 永久免费精品视频 | 国产小视频一区二区 | 日韩国产一区二区三区 | 欧洲中文字幕 | 亚洲狠狠爱一区二区三区 | 波多野结衣一区二区三区高清 | 在线观看日韩 | 在线视频国产一区 | 日韩中文字幕一区二区 | 欧美日韩成人影院 |