关于VC 已知某进程的ID或名字怎样获取主线程的ID的搜索推荐

2025-05-02 07:13:40
推荐回答(1个)
回答(1):

问题比较模糊。

关注函数:

NtQueryInformationProcess (
IN HANDLE ProcessHandle, // 进程句柄
IN PROCESSINFOCLASS InformationClass, // 信息类型
OUT PVOID ProcessInformation, // 缓冲指针
IN ULONG ProcessInformationLength, // 以字节为单位的缓冲大小
OUT PULONG ReturnLength OPTIONAL // 写入缓冲的字节数
);

通过这个函数可以获取进程信息,ProcessBasicInformation模式调用之后获取到的ProcessInformation结构体的InheritedFromUniqueProcessId成员,就是主进程ID。

    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);