private void RefreshProcessList(string filter, bool hideUnrestricted)
        {
            using (var processes = new DisposableList <NtProcess>(NtProcess.GetProcesses(ProcessAccessRights.QueryInformation)))
            {
                processes.Sort((a, b) => a.ProcessId - b.ProcessId);

                IEnumerable <NtProcess> filtered = processes.Where(p => GetToken(p) != null);

                if (!String.IsNullOrWhiteSpace(filter))
                {
                    filter   = filter.ToLower();
                    filtered = filtered.Where(p => p.FullPath.ToLower().Contains(filter));
                }

                if (hideUnrestricted)
                {
                    filtered = filtered.Where(p => IsRestrictedToken(p));
                }

                ClearTree(treeViewProcesses);
                ClearList(listViewThreads);
                foreach (NtProcess entry in filtered)
                {
                    AddProcessNode(entry);
                    AddThreads(entry);
                }
                listViewThreads.AutoResizeColumns(ColumnHeaderAutoResizeStyle.ColumnContent);
                listViewThreads.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize);
            }
        }
Example #2
0
        private void RefreshProcessList(string filter, bool hideUnrestricted)
        {
            bool filter_name = !String.IsNullOrWhiteSpace(filter);

            ClearList(listViewProcesses);
            ClearList(listViewThreads);

            using (var processes = new DisposableList <NtProcess>(NtProcess.GetProcesses(ProcessAccessRights.QueryLimitedInformation)))
            {
                processes.Sort((a, b) => a.ProcessId - b.ProcessId);

                using (var tokens = new DisposableList <NtToken>(processes.Select(p => GetToken(p))))
                {
                    List <ListViewItem> procs   = new List <ListViewItem>();
                    List <ListViewItem> threads = new List <ListViewItem>();

                    Debug.Assert(processes.Count == tokens.Count);
                    for (int i = 0; i < processes.Count; ++i)
                    {
                        NtProcess p = processes[i];
                        NtToken   t = tokens[i];

                        if (t == null || !t.IsAccessGranted(TokenAccessRights.Query))
                        {
                            continue;
                        }

                        if (filter_name)
                        {
                            if (!p.FullPath.ToLower().Contains(filter.ToLower()))
                            {
                                continue;
                            }
                        }

                        if (hideUnrestricted)
                        {
                            if (!IsRestrictedToken(t))
                            {
                                continue;
                            }
                        }

                        procs.Add(CreateProcessNode(p, t));
                        threads.AddRange(CreateThreads(p));
                    }

                    listViewProcesses.Items.AddRange(procs.ToArray());
                    listViewThreads.Items.AddRange(threads.ToArray());
                    ResizeColumns(listViewProcesses);
                    ResizeColumns(listViewThreads);
                }
            }
        }
        private void RefreshProcessList(string filter, bool hideUnrestricted)
        {
            using (var processes = new DisposableList <NtProcess>(NtProcess.GetProcesses(ProcessAccessRights.QueryLimitedInformation)))
            {
                processes.Sort((a, b) => a.ProcessId - b.ProcessId);

                IEnumerable <NtProcess> filtered = processes.Where(p => GetToken(p) != null);

                if (!String.IsNullOrWhiteSpace(filter))
                {
                    filter   = filter.ToLower();
                    filtered = filtered.Where(p => p.FullPath.ToLower().Contains(filter));
                }

                if (hideUnrestricted)
                {
                    filtered = filtered.Where(p => IsRestrictedToken(p));
                }

                ClearList(listViewProcesses);
                ClearList(listViewThreads);
                List <ListViewItem> procs   = new List <ListViewItem>();
                List <ListViewItem> threads = new List <ListViewItem>();
                foreach (NtProcess entry in filtered)
                {
                    ListViewItem proc = CreateProcessNode(entry);
                    if (proc != null)
                    {
                        procs.Add(proc);
                    }
                    threads.AddRange(CreateThreads(entry));
                }
                listViewProcesses.Items.AddRange(procs.ToArray());
                listViewThreads.Items.AddRange(threads.ToArray());
                ResizeColumns(listViewProcesses);
                ResizeColumns(listViewThreads);
            }
        }
        private void RefreshProcessList(string filter, bool hideUnrestricted)
        {
            using (var processes = new DisposableList<NtProcess>(NtProcess.GetProcesses(ProcessAccessRights.QueryInformation)))
            {
                processes.Sort((a, b) => a.ProcessId- b.ProcessId);

                IEnumerable<NtProcess> filtered = processes.Where(p => GetToken(p) != null);

                if (!String.IsNullOrWhiteSpace(filter))
                {
                    filter = filter.ToLower();
                    filtered = filtered.Where(p => p.FullPath.ToLower().Contains(filter));
                }

                if (hideUnrestricted)
                {
                    filtered = filtered.Where(p => IsRestrictedToken(p));
                }

                ClearTree(treeViewProcesses);
                ClearList(listViewThreads);
                foreach (NtProcess entry in filtered)
                {
                    AddProcessNode(entry);
                    AddThreads(entry);
                }
                listViewThreads.AutoResizeColumns(ColumnHeaderAutoResizeStyle.ColumnContent);
                listViewThreads.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize);
            }
        }