NTDLL.DLL中有一个函数叫NtQueryInformationProcess,用它可以将指定类型的进程信息拷贝到某个缓冲。
其原型如下:NTSYSAPINTSTATUSNTAPINtQueryInformationProcess (IN HANDLE ProcessHandle, // 进程句柄IN PROCESSINFOCLASS InformationClass, // 信息类型OUT PVOID ProcessInformation, // 缓冲指针IN ULONG ProcessInformationLength, // 以字节为单位的缓冲大小OUT PULONG ReturnLength OPTIONAL // 写入缓冲的字节数); 第一个参数是希望操作的进程句柄,这个句柄必须以PROCESS_QUERY_INFORMATION模式存取。为了取得一个句柄,我们必须用OpenProcess函数:HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION,FALSE,dwProcessID); 第二个参数是请求信息的类型,这个参数可以有许多个值,本文例子中将用ProcessBasicInformation (值为0)。 因此,如果第二个参数是ProcessBasicInformation的话,则第三个参数必须为一个指针指向结构PROCESS_BASIC_INFORMATION:typedef struct{ DWORD ExitStatus; // 接收进程终止状态 DWORD PebBaseAddress; // 接收进程环境块地址 DWORD AffinityMask; // 接收进程关联掩码 DWORD BasePriority; // 接收进程的优先级类 ULONG UniqueProcessId; // 接收进程ID ULONG InheritedFromUniqueProcessId; //接收父进程ID} PROCESS_BASIC_INFORMATION; 这个结构的最后一个参数是InheritedFromUniqueProcessId,它就是我们所要的东西。DWORD dwParentPID;LONG status;PROCESS_BASIC_INFORMATION pbi;status = NtQueryInformationProcess( hProcess,ProcessBasicInformation,(PVOID)&pbi,sizeof(PROCESS_BASIC_INFORMATION),NULL );if (!status)dwParentPID = pbi.InheritedFromUniqueProcessId;
posted on 2012-02-16 17:30
张志松 阅读(1528)
评论(0) 编辑 收藏 引用 所属分类:
VC/MFC