Esempio n. 1
0
        public static ThreadInfo[] EnumThreads(int pid = -1)
        {
            using (var handle = Win32.CreateToolhelp32Snapshot(CreateToolhelpSnapshotFlags.SnapThread)) {
                if (handle.DangerousGetHandle() == Win32.InvalidFileHandle)
                {
                    throw new Win32Exception(Marshal.GetLastWin32Error());
                }

                var threads = new List <ThreadInfo>(1024);
                var te      = new ThreadEntry();
                te.Init();

                if (!Win32.Thread32First(handle, ref te))
                {
                    return(null);
                }

                do
                {
                    if (pid >= 0 && te.ProcessId != pid)
                    {
                        continue;
                    }
                    if (te.ThreadId != 0)
                    {
                        threads.Add(new ThreadInfo(te));
                    }
                } while (Win32.Thread32Next(handle, ref te));

                return(threads.ToArray());
            }
        }
Esempio n. 2
0
 internal static extern bool Thread32Next(SafeFileHandle hSnapshot, ref ThreadEntry pe);
Esempio n. 3
0
 internal ThreadInformation(ThreadEntry entry)
 {
     _entry = entry;
 }
Esempio n. 4
0
 internal ThreadInfo(ThreadEntry entry)
 {
     _entry = entry;
 }