C++ 获取父进程 路径






#include<windows.h>
#include <iostream>
#include <cassert>
#include <string>
#include <algorithm>
#include <functional>
#include <algorithm>   // STL 通用算法
#include <vector>      // STL 动态数组容器
#include <fstream>

//-------下面是必须的
 #include <wtypes.h>
 #include<tlhelp32.h>
 #include <psapi.h>
#pragma   comment(lib,"psapi.lib")

/------必须的end
 using namespace std;
bool isfileexist(char FILENAME[]);




#define ProcessBasicInformation 0  
 
 typedef struct  
 {  
     DWORD ExitStatus;  
     DWORD PebBaseAddress;  
     DWORD AffinityMask;  
     DWORD BasePriority;  
     ULONG UniqueProcessId;  
     ULONG InheritedFromUniqueProcessId;  
 }   PROCESS_BASIC_INFORMATION;  
 
 typedef LONG (__stdcall *PROCNTQSIP)(HANDLE,UINT,PVOID,ULONG,PULONG);
//
 DWORD GetParentProcessID(DWORD dwProcessId);
 


int   main() 
{ //  输入文件名
HANDLE   hSnapShot=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0   ); 
PROCESSENTRY32   procentry;//=sizeof(PROCESSENTRY32); 
BOOL   bFlag=Process32First(   hSnapShot,   &procentry   )   ; 
DWORD       parentprocessid;
while(   bFlag   ) 

            if(stricmp(procentry.szExeFile, "unique.exe")==0) //你的程序
{
DWORD       processid=procentry.th32ProcessID;         //找到 
cout <<procentry.th32ProcessID <<endl;
cout <<GetParentProcessID(procentry.th32ProcessID)<< endl;
parentprocessid=GetParentProcessID(procentry.th32ProcessID);
}
            bFlag=Process32Next(hSnapShot,&procentry); 

cout <<parentprocessid<< endl;


HANDLE processHandle = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, parentprocessid);
char processName[MAX_PATH]={0};
GetModuleBaseName(processHandle, 0, processName, MAX_PATH) ;
char  processFullPath[MAX_PATH]={0};
GetModuleFileNameEx(processHandle, 0, processFullPath, MAX_PATH);


cout<< processName<< endl;
cout<< processFullPath<< endl;
//cout << Environment::CommandLine<< endl;
system("pause");
 return 0;
}


 




    DWORD GetParentProcessID(DWORD dwProcessId)
    {
        LONG                        status;
        DWORD                        dwParentPID = (DWORD)-1;
        HANDLE                        hProcess;
        PROCESS_BASIC_INFORMATION    pbi;
 
        PROCNTQSIP NtQueryInformationProcess = (PROCNTQSIP)GetProcAddress(  
            GetModuleHandle("ntdll"), "NtQueryInformationProcess"); 
 
        if(NULL == NtQueryInformationProcess)
        {
            return (DWORD)-1;
        }
        // Get process handle
        hProcess = OpenProcess(PROCESS_QUERY_INFORMATION,FALSE, dwProcessId);
        if (!hProcess)
        {
            return (DWORD)-1;
        }
 
        // Retrieve information
        status = NtQueryInformationProcess( hProcess,
            ProcessBasicInformation,
            (PVOID)&pbi,
            sizeof(PROCESS_BASIC_INFORMATION),
            NULL
            );
 
        // Copy parent Id on success
        if  (!status)
        {
            dwParentPID = pbi.InheritedFromUniqueProcessId;
        }
 
        CloseHandle (hProcess);
 
        return dwParentPID;
         
    }

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值