程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> WIN32法式獲得父過程ID的辦法

WIN32法式獲得父過程ID的辦法

編輯:關於C++

WIN32法式獲得父過程ID的辦法。本站提示廣大學習愛好者:(WIN32法式獲得父過程ID的辦法)文章只能為提供參考,不一定能成為您想要的結果。以下是WIN32法式獲得父過程ID的辦法正文


學過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)

年夜功樂成,如許不管是父過程正常加入,照樣異常終止,子過程都能被加入。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved