Пример #1
0
        ////////////////////////////////////////////////////////////////////////////////
        // List all process threads
        ////////////////////////////////////////////////////////////////////////////////
        public bool ListThreads(int processId)
        {
            if (0 == processId)
            {
                processId = Process.GetCurrentProcess().Id;
            }

            IntPtr hSnapshot = kernel32.CreateToolhelp32Snapshot(TiHelp32.TH32CS_SNAPTHREAD, 0);

            if (IntPtr.Zero == hSnapshot)
            {
                Misc.GetWin32Error("CreateToolhelp32Snapshot");
                return(false);
            }

            TiHelp32.tagTHREADENTRY32 threadyEntry32 = new TiHelp32.tagTHREADENTRY32()
            {
                dwSize = (uint)Marshal.SizeOf(typeof(TiHelp32.tagTHREADENTRY32))
            };

            if (!kernel32.Thread32First(hSnapshot, ref threadyEntry32))
            {
                Misc.GetWin32Error("Thread32First");
                return(false);
            }

            if (threadyEntry32.th32OwnerProcessID == processId)
            {
                threads.Add(threadyEntry32.th32ThreadID);
            }

            while (kernel32.Thread32Next(hSnapshot, ref threadyEntry32))
            {
                if (threadyEntry32.th32OwnerProcessID == processId)
                {
                    threads.Add(threadyEntry32.th32ThreadID);
                }
            }

            return(true);
        }
Пример #2
0
        ////////////////////////////////////////////////////////////////////////////////
        //
        ////////////////////////////////////////////////////////////////////////////////
        internal static UInt32 GetMainThread(UInt32 processId)
        {
            IntPtr hThread   = IntPtr.Zero;
            IntPtr hSnapshot = IntPtr.Zero;

            try
            {
                hSnapshot = kernel32.CreateToolhelp32Snapshot(TiHelp32.TH32CS_SNAPTHREAD, processId);
                if (IntPtr.Zero == hSnapshot)
                {
                    return(0);
                }

                TiHelp32.tagTHREADENTRY32 threadEntry = new TiHelp32.tagTHREADENTRY32();
                threadEntry.dwSize = (UInt32)Marshal.SizeOf(threadEntry);
                if (!kernel32.Thread32First(hSnapshot, ref threadEntry))
                {
                    return(0);
                }

                do
                {
                    Console.WriteLine(threadEntry.th32ThreadID);
                    hThread            = kernel32.OpenThread(ntpsapi.PROCESS_ALL_ACCESS, false, threadEntry.th32ThreadID);
                    threadEntry        = new TiHelp32.tagTHREADENTRY32();
                    threadEntry.dwSize = (UInt32)Marshal.SizeOf(threadEntry);
                }while (kernel32.Thread32Next(hSnapshot, ref threadEntry));
            }
            catch (Exception)
            {
                return(0);
            }
            finally
            {
                kernel32.CloseHandle(hSnapshot);
            }
            return(0);
        }
Пример #3
0
 public static extern Boolean Thread32Next(IntPtr hSnapshot, ref TiHelp32.tagTHREADENTRY32 lpte);
Пример #4
0
 public static extern bool Thread32First(IntPtr hSnapshot, ref TiHelp32.tagTHREADENTRY32 lpte);