/// <summary> /// Gets the parent process of a specified process. /// </summary> public static Process GetParentProcess(IntPtr handle) { var pbi = new ParentProcessFinder(); int status = NtQueryInformationProcess(handle, 0, ref pbi, Marshal.SizeOf(pbi), out int returnLength); if (status != 0) { throw new Win32Exception(status); } try { return(Process.GetProcessById(pbi.InheritedFromUniqueProcessId.ToInt32())); } catch { return(null); } }
private static extern int NtQueryInformationProcess(IntPtr processHandle, int processInformationClass, ref ParentProcessFinder processInformation, int processInformationLength, out int returnLength);