国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > C > 正文

WIN32程序獲取父進(jìn)程ID的方法

2020-01-26 15:25:43
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

學(xué)過(guò)windows程序設(shè)計(jì)的人都知道,windows中的進(jìn)程是可以有父子關(guān)系的,擁有父子關(guān)系的進(jìn)程,一旦父進(jìn)程結(jié)束,子進(jìn)程有會(huì)隨之退出。但是如果進(jìn)程之間沒(méi)有父子關(guān)系,我們?nèi)绾巫屪舆M(jìn)程在父進(jìn)程退出是也同時(shí)跟著退出呢?方法有很多,本文介紹其中的一種利用父進(jìn)程ID的方案,實(shí)現(xiàn)的原理很簡(jiǎn)單:先獲取父進(jìn)程的ID,然后通過(guò)ID來(lái)獲取父進(jìn)程Handle,通過(guò)監(jiān)視父進(jìn)程的Handle來(lái)決定子進(jìn)程是否退出。所以,這里的關(guān)鍵就是如何獲取父進(jìn)程的ID。

為了獲取父進(jìn)程ID,這里需要用到一個(gè)微軟未公開(kāi)的API:

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

這個(gè)API位于Ntdll.dll里面,通過(guò)引用頭文件winternl.h來(lái)獲取相關(guān)的類型定義。當(dāng)我們得到這個(gè)函數(shù)后,下一步就需要去了解各個(gè)函數(shù)參數(shù)的意義了,這里我們重點(diǎn)看一下第二個(gè)參數(shù) PROCESSINFOCLASS結(jié)構(gòu)體的內(nèi)容:

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

這是MSDN里給出的結(jié)構(gòu)體定義。到目前為止,我們還是不知道Parent進(jìn)程的ID從哪里取。正所謂,天下沒(méi)有不透風(fēng)的墻,經(jīng)過(guò)無(wú)數(shù)高手的破解,實(shí)際上最后一個(gè)字段Reserved3就是Parent進(jìn)程的ID,只要我們將它轉(zhuǎn)換為一個(gè)DWORD值即可。

經(jīng)過(guò)在x86和x64的windows2003和windows20008平臺(tái)上的測(cè)試,的確是Parent進(jìn)程的ID。

既然知道了Parent進(jìn)程的ID出處,接下來(lái)就好辦了, 基本步驟如下:

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

2. 獲取進(jìn)程查詢句柄,調(diào)用OpenProcess()帶上PROCESS_QUERY_INFORMATION標(biāo)志

3. 調(diào)用NtQueryInformationProcess()來(lái)查詢進(jìn)程信息

4. 獲取父進(jìn)程句柄,還是調(diào)用OpenProcess()

5. 啟動(dòng)一個(gè)線程去等待父進(jìn)程退出,WaitForSingleObject(ParentHandle, INFINITE)

大功告成,這樣無(wú)論是父進(jìn)程正常退出,還是異常終止,子進(jìn)程都能被退出。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 无棣县| 大悟县| 普兰县| 邵阳市| 武威市| 龙游县| 招远市| 东明县| 墨玉县| 海南省| 和静县| 巴林左旗| 雅江县| 六枝特区| 勃利县| 大悟县| 兴化市| 民勤县| 临泉县| 北安市| 张家川| 建湖县| 平定县| 潞城市| 高青县| 嘉禾县| 水富县| 隆昌县| 英吉沙县| 玉田县| 林甸县| 舒城县| 木里| 东乡族自治县| 镇沅| 浦城县| 南宫市| 九江市| 通州市| 涪陵区| 巴彦淖尔市|