public static Process GetParentProcess(IntPtr Handle)
            {
                ParentProcessData ParentData = new ParentProcessData();
                int ReturnLength;
                int Status = NtQueryInformationProcess(Handle, 0, ref ParentData, Marshal.SizeOf(ParentData), out ReturnLength);

                if (Status != 0)
                {
                    throw new Win32Exception(Status);
                }

                try
                {
                    return(Process.GetProcessById(ParentData.InheritedFromUniqueProcessId.ToInt32()));
                }
                catch (ArgumentException)
                {
                    return(null);
                }
            }
 public static Process GetParentProcess(this Process ChildProcess)
 {
     return(ParentProcessData.GetParentProcessOf(ChildProcess));
 }
 private static extern int NtQueryInformationProcess(IntPtr processHandle, int processInformationClass, ref ParentProcessData processInformation, int processInformationLength, out int returnLength);