public static Process Parent(this Process p) { var entries = Toolhelp32.TakeSnapshot <WinProcessEntry>(Toolhelp32.SnapAll, 0); var parentid = entries.First(x => x.th32ProcessID == p.Id).th32ParentProcessID; return(Process.GetProcessById(parentid)); }
static void EnumerateModules() { var provider = new CustomFormatter { }; foreach (var x in Toolhelp32.TakeSnapshot <WinModuleEntry>(Toolhelp32.SnapModule, 0)) { Debug.WriteLine(String.Format(provider, ".. {0}", x)); } }
static void EnumerateHeap32List() { var provider = new CustomFormatter { }; var id = Process.GetCurrentProcess().Id; foreach (var x in Toolhelp32.TakeSnapshot <WinHeap32ListEntry>(Toolhelp32.SnapHeapList, id)) { Debug.WriteLine(String.Format(provider, ".. {0}", x)); } }
public static Process Parent(this Process p) { try { IEnumerable <WinProcessEntry> entries = Toolhelp32.TakeSnapshot <WinProcessEntry>(Toolhelp32.SnapAll, 0); int parentid = entries.First(x => x.th32ProcessID == p.Id).th32ParentProcessID; return(Process.GetProcessById(parentid)); } catch (Exception) { return(null); } }
static void EnumerateProcessesTwice() { var provider = new CustomFormatter { }; var entries = Toolhelp32.TakeSnapshot <WinProcessEntry>(Toolhelp32.SnapProcess, 0); foreach (var x in entries) { Debug.WriteLine(String.Format(provider, "1 .. {0}", x)); } // Snapshot disposed and created again foreach (var x in entries) { Debug.WriteLine(String.Format(provider, "2 .. {0}", x)); } }
public Snapshot(uint flags, int processId) { m_handle = Toolhelp32.CreateToolhelp32Snapshot(flags, processId); }
void IDisposable.Dispose() { Toolhelp32.CloseHandle(m_handle); }