VC获取父进程PID

#include <windows.h>
#include <stdio.h>
 
typedef enum enumSYSTEM_INFORMATION_CLASS
{
	SystemBasicInformation,
	SystemProcessorInformation,
	SystemPerformanceInformation,
	SystemTimeOfDayInformation,
}SYSTEM_INFORMATION_CLASS;
 
typedef struct tagPROCESS_BASIC_INFORMATION
{
    DWORD ExitStatus;
    DWORD PebBaseAddress;
    DWORD AffinityMask;
    DWORD BasePriority;
    ULONG UniqueProcessId;
    ULONG InheritedFromUniqueProcessId;
}PROCESS_BASIC_INFORMATION;

typedef LONG (WINAPI *PNTQUERYINFORMATIONPROCESS)(HANDLE,UINT,PVOID,ULONG,PULONG);
PNTQUERYINFORMATIONPROCESS	NtQueryInformationProcess = NULL;

#define PRINT_LINE	printf("---------------------------------------------\n")

int GetParentProcessID(DWORD dwId)
{
    LONG                      status;
    DWORD                     dwParentPID = 0;
    HANDLE                    hProcess;
    PROCESS_BASIC_INFORMATION pbi;

    hProcess = OpenProcess(PROCESS_QUERY_INFORMATION,FALSE,dwId);
    if(!hProcess)
		return -1;

    status = NtQueryInformationProcess(hProcess,SystemBasicInformation,(PVOID)&pbi,sizeof(PROCESS_BASIC_INFORMATION),NULL);
    if(!status)
        dwParentPID = pbi.InheritedFromUniqueProcessId;

    CloseHandle (hProcess);
	return dwParentPID;
}

void main(int argc, char* argv[])
{
    NtQueryInformationProcess = (PNTQUERYINFORMATIONPROCESS)GetProcAddress(GetModuleHandle("ntdll"),"NtQueryInformationProcess");
    if (!NtQueryInformationProcess)
       return;
 
    int nID   = GetCurrentProcessId();
	int nTemp = 0;

	PRINT_LINE;
	nTemp = GetParentProcessID(nID);
	if(nTemp == -1)
	{
		printf(" 获取失败!\n");
		return;
	}

	printf(" 子进程:%lu ---->>>>> 进程PID为:%lu\n",nID,nTemp);
	while (true)
	{
		nID = GetParentProcessID(nTemp);
		if(nID == -1)
			break;

		printf(" 子进程:%lu ---->>>>> 进程PID为:%lu\n",nTemp,nID);
		nTemp = nID;
	}

	PRINT_LINE;
	getchar();
}




评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

汪宁宇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值