获得调用者进程信息

 

 1 DWORD ShowParentProcessInfo()  
 2 {
 3     typedef LONG (WINAPI *PROCNTQSIP)(HANDLE,UINT,PVOID,ULONG,PULONG);  
 4     PROCNTQSIP NtQueryInformationProcess;  
 5     NtQueryInformationProcess = (PROCNTQSIP)GetProcAddress(  
 6         GetModuleHandle(_T("ntdll")),  
 7         "NtQueryInformationProcess"  
 8         );  
 9 
10     if (!NtQueryInformationProcess)  
11         return 0;  
12 
13     DWORD dwId = ::GetCurrentProcessId();
14     LONG                      status;  
15     DWORD                     dwParentPID = 0;  
16     HANDLE                    hProcess;  
17     W_PROCESS_BASIC_INFORMATION pbi;  
18 
19     // Get process handle  
20     hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, NULL, dwId);  
21     if (!hProcess)  
22         return 0;  
23 
24     // Retrieve information  
25     status = NtQueryInformationProcess( hProcess,  
26         ProcessBasicInformation,  
27         (PVOID)&pbi,  
28         sizeof(W_PROCESS_BASIC_INFORMATION),  
29         NULL  
30         );  
31 
32     // Copy parent Id on success  
33     if  (!status)  
34     {
35         dwParentPID = pbi.InheritedFromUniqueProcessId;  
36         HANDLE hParentProcess = NULL;
37         hParentProcess = OpenProcess(PROCESS_QUERY_INFORMATION|PROCESS_VM_READ, NULL, dwParentPID);  
38         if (hParentProcess)
39         {
40             TCHAR szTemp[MAX_PATH] = {0};
41             TCHAR szProcessName[MAX_PATH] = {0};
42             DWORD dwErr = ::GetModuleFileNameEx(hParentProcess,NULL,szTemp,MAX_PATH);
43             ::GetLongPathName(szTemp, szProcessName, MAX_PATH);
44             if (dwErr)
45                 Log4cxx(LOG4CXX__INFO, MODULENAME , _T("Caller=%s, ParentProcessID=%d"), szProcessName, dwParentPID);
46             else
47                 Log4cxx(LOG4CXX__INFO, MODULENAME , _T("Caller=%s, ParentProcessID=%d, LastError=%d"), szProcessName, dwParentPID, dwErr);
48         }
49         CloseHandle (hParentProcess);
50     }
51 
52     CloseHandle (hProcess);  
53 
54     return dwParentPID;  
55 }  

 

结果

Caller=C:\Program Files (x86)\Wind\Wind.NET.Client\WindNET\bin\wmain.exe, ParentProcessID=6012

 

转载于:https://www.cnblogs.com/spriteflk/p/4710128.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值