日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

WIN32开发:如何获取父进程的ID

發(fā)布時間:2025/3/19 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 WIN32开发:如何获取父进程的ID 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

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

這里需要用到一個微軟未公開的API:

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

這個API位于Ntdll.dll里面,通過引用頭文件winternl.h來獲取相關(guān)的類型定義。當(dāng)我們得到這個函數(shù)后,下一步就需要去了解各個函數(shù)參數(shù)的意義了,這里我們重點看一下第二個參數(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從哪里取。正所謂,天下沒有不透風(fēng)的墻,經(jīng)過無數(shù)高手的破解,實際上最后一個字段Reserved3就是Parent進(jìn)程的ID,只要我們將它轉(zhuǎn)換為一個DWORD值即可。我在x86和x64的windows2003和windows20008平臺上測試過,的確是Parent進(jìn)程的ID。既然知道了Parent進(jìn)程的ID出處,接下來就好辦了, 基本步驟如下:1. 先獲取自己的進(jìn)程ID,GetCurrentProcessID()2. 獲取進(jìn)程查詢句柄,調(diào)用OpenProcess()帶上PROCESS_QUERY_INFORMATION標(biāo)志3. 調(diào)用NtQueryInformationProcess()來查詢進(jìn)程信息4. 獲取父進(jìn)程句柄,還是調(diào)用OpenProcess()5. 啟動一個線程去等待父進(jìn)程退出,WaitForSingleObject(ParentHandle, INFINITE)大功告成,這樣無論是父進(jìn)程正常退出,還是異常終止,子進(jìn)程都能被退出。

總結(jié)

以上是生活随笔為你收集整理的WIN32开发:如何获取父进程的ID的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。