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); }
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); }