最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2014年08月07日 14:57:52   投稿:shichen2014  
這篇文章主要介紹了WIN32程序獲取父進程ID的方法,在進行windows程序開發(fā)的時候有一定的實用價值,需要的朋友可以參考下

學過windows程序設計的人都知道,windows中的進程是可以有父子關系的,擁有父子關系的進程,一旦父進程結束,子進程有會隨之退出。但是如果進程之間沒有父子關系,我們?nèi)绾巫屪舆M程在父進程退出是也同時跟著退出呢?方法有很多,本文介紹其中的一種利用父進程ID的方案,實現(xiàn)的原理很簡單:先獲取父進程的ID,然后通過ID來獲取父進程Handle,通過監(jiān)視父進程的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來獲取相關的類型定義。當我們得到這個函數(shù)后,下一步就需要去了解各個函數(shù)參數(shù)的意義了,這里我們重點看一下第二個參數(shù) PROCESSINFOCLASS結構體的內(nèi)容:

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

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

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

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

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

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

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

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

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

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

相關文章

  • C語言從txt文件中逐行讀入數(shù)據(jù)存到數(shù)組中的實現(xiàn)方法

    C語言從txt文件中逐行讀入數(shù)據(jù)存到數(shù)組中的實現(xiàn)方法

    下面小編就為大家?guī)硪黄狢語言從txt文件中逐行讀入數(shù)據(jù)存到數(shù)組中的實現(xiàn)方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-12-12
  • 關于C語言中弱符號與弱引用的實際應用問題

    關于C語言中弱符號與弱引用的實際應用問題

    在編碼過程中,我們經(jīng)常遇到符號重定義的錯誤問題,本文通過實例代碼展示給大家介紹了C語言弱符號與弱引用的實際應用問題,一起看看吧
    2021-09-09
  • 算法之排序算法的算法思想和使用場景總結

    算法之排序算法的算法思想和使用場景總結

    這篇文章主要介紹了算法之排序算法的算法思想和使用場景總結,本文講解了插入排序、交換排序、選擇排序等幾大類排序算法的特點、思想和使用場景,需要的朋友可以參考下
    2014-08-08
  • vscode遠程連接服務器(免密登錄+遠程開發(fā))

    vscode遠程連接服務器(免密登錄+遠程開發(fā))

    vscode的遠程連接功能十分方便,本文就來介紹一下vscode遠程連接服務器,主要包括免密登錄和遠程開發(fā),感興趣的可以了解一下
    2024-07-07
  • C語言詳解如何實現(xiàn)堆及堆的結構與接口

    C語言詳解如何實現(xiàn)堆及堆的結構與接口

    堆是計算機科學中一類特殊的數(shù)據(jù)結構的統(tǒng)稱,通常是一個可以被看做一棵完全二叉樹的數(shù)組對象。而堆排序是利用堆這種數(shù)據(jù)結構所設計的一種排序算法。本文將詳細介紹堆的結構與接口,需要的可以參考一下
    2022-04-04
  • C++中隊列的建立與操作詳細解析

    C++中隊列的建立與操作詳細解析

    隊列結構是從數(shù)據(jù)運算來分類的,也就是說隊列結構具有特殊的運算規(guī)則。而從數(shù)據(jù)的邏輯結構來看,隊列結構其實就是一種線性結構。如果從數(shù)據(jù)的存儲結構來進一步劃分,隊列結構可以分成兩類
    2013-10-10
  • C++在同一對象中存儲左值或右值的方法

    C++在同一對象中存儲左值或右值的方法

    C++ 代碼似乎經(jīng)常出現(xiàn)一個問題:如果該值可以來自左值或右值,則對象如何跟蹤該值?即如果保留該值作為引用,那么就無法綁定到臨時對象,本文給大家介紹了C++在同一對象中存儲左值或右值的幾種方法,需要的朋友可以參考下
    2025-03-03
  • Opencv 視頻轉為圖像序列的實現(xiàn)

    Opencv 視頻轉為圖像序列的實現(xiàn)

    今天小編就為大家分享一篇Opencv 視頻轉為圖像序列的實現(xiàn),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • 使用C語言實現(xiàn)內(nèi)存池的示例代碼

    使用C語言實現(xiàn)內(nèi)存池的示例代碼

    所謂內(nèi)存池,顧名思義和線程池的設計原理是一樣的,為了減少頻繁申請釋放內(nèi)存而帶來的資源消耗,減少釋放內(nèi)存后產(chǎn)生的內(nèi)存碎片,下面我們就來看看如何使用C語言實現(xiàn)內(nèi)存池吧
    2024-02-02
  • 詳解C++循環(huán)創(chuàng)建多級目錄及判斷目錄是否存在的方法

    詳解C++循環(huán)創(chuàng)建多級目錄及判斷目錄是否存在的方法

    這篇文章主要介紹了C++循環(huán)創(chuàng)建多級目錄及判斷目錄是否存在的方法,文中代碼有一個針對各種系統(tǒng)進行判斷來加載不同頭文件的方法,需要的朋友可以參考下
    2016-03-03

最新評論

松阳县| 宜兰市| 陆良县| 丰镇市| 万源市| 肥西县| 比如县| 通化市| 九龙坡区| 五寨县| 西华县| 广饶县| 山东省| 易门县| 阜南县| 荣昌县| 洛隆县| 新干县| 锡林浩特市| 青神县| 特克斯县| 金山区| 长汀县| 石棉县| 南乐县| 乐都县| 工布江达县| 海伦市| 江川县| 宜兴市| 耒阳市| 土默特左旗| 龙游县| 曲周县| 深泽县| 余江县| 汝南县| 乌兰浩特市| 扬中市| 河曲县| 雷州市|