Пример #1
0
        internal static Process GetParentProcess()
        {
            var snapshotHandle = IntPtr.Zero;

            try
            {
                // Get a list of all processes
                snapshotHandle = Interop.Kernel32.CreateToolhelp32Snapshot(Interop.Kernel32.SnapshotFlags.Process, 0);

                Interop.Kernel32.PROCESSENTRY32 procEntry = default(Interop.Kernel32.PROCESSENTRY32);
                procEntry.dwSize = Marshal.SizeOf(typeof(Interop.Kernel32.PROCESSENTRY32));
                if (Interop.Kernel32.Process32First(snapshotHandle, ref procEntry))
                {
                    var currentProcessId = Process.GetCurrentProcess().Id;
                    do
                    {
                        if (currentProcessId == procEntry.th32ProcessID)
                        {
                            return(Process.GetProcessById((int)procEntry.th32ParentProcessID));
                        }
                    }while (Interop.Kernel32.Process32Next(snapshotHandle, ref procEntry));
                }
            }
            catch (Exception)
            {
            }
            finally
            {
                Interop.Kernel32.CloseHandle(snapshotHandle);
            }

            return(null);
        }
Пример #2
0
        internal static unsafe Process?GetParentProcess()
        {
            nint snapshotHandle = 0;

            try
            {
                // Get a list of all processes
                snapshotHandle = Interop.Kernel32.CreateToolhelp32Snapshot(Interop.Kernel32.SnapshotFlags.Process, 0);

                Interop.Kernel32.PROCESSENTRY32 procEntry = default;
                procEntry.dwSize = sizeof(Interop.Kernel32.PROCESSENTRY32);
                if (Interop.Kernel32.Process32First(snapshotHandle, &procEntry))
                {
                    int currentProcessId =
#if NET
                        Environment.ProcessId;
#else
                        Process.GetCurrentProcess().Id;
#endif
                    do
                    {
                        if (currentProcessId == procEntry.th32ProcessID)
                        {
                            return(Process.GetProcessById(procEntry.th32ParentProcessID));
                        }
                    }while (Interop.Kernel32.Process32Next(snapshotHandle, &procEntry));
                }
            }
            catch (Exception)
            {
            }
            finally
            {
                Interop.Kernel32.CloseHandle(snapshotHandle);
            }

            return(null);
        }