public static int GetParentProcessId() { var pbi = new PROCESS_BASIC_INFORMATION(); //Get a handle to our own process IntPtr hProc = OpenProcess((ProcessAccess)0x001F0FFF, false, Process.GetCurrentProcess().Id); try { int sizeInfoReturned; int queryStatus = NtQueryInformationProcess(hProc, (PROCESSINFOCLASS)0, ref pbi, pbi.Size, out sizeInfoReturned); } finally { if (!hProc.Equals(IntPtr.Zero)) { //Close handle and free allocated memory CloseHandle(hProc); hProc = IntPtr.Zero; } } return (int)pbi.InheritedFromUniqueProcessId; }
public static extern int NtQueryInformationProcess(IntPtr hProcess, PROCESSINFOCLASS pic, ref PROCESS_BASIC_INFORMATION pbi, int cb, out int pSize);