| Index: visual_studio/NativeClientVSAddIn/NativeClientVSAddIn/ProcessSearcher.cs
|
| diff --git a/visual_studio/NativeClientVSAddIn/NativeClientVSAddIn/ProcessSearcher.cs b/visual_studio/NativeClientVSAddIn/NativeClientVSAddIn/ProcessSearcher.cs
|
| index ceb3b0dab1660332b39dad7e3497eb7e8ff831db..3657553ab10117bc2ec14cf797439b980562d173 100644
|
| --- a/visual_studio/NativeClientVSAddIn/NativeClientVSAddIn/ProcessSearcher.cs
|
| +++ b/visual_studio/NativeClientVSAddIn/NativeClientVSAddIn/ProcessSearcher.cs
|
| @@ -1,96 +1,96 @@
|
| -// Copyright (c) 2012 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -namespace NativeClientVSAddIn
|
| -{
|
| - using System;
|
| - using System.Collections.Generic;
|
| - using System.Linq;
|
| - using System.Management;
|
| -
|
| - /// <summary>
|
| - /// Queries the system for the list of running processes.
|
| - /// </summary>
|
| - public class ProcessSearcher
|
| - {
|
| - /// <summary>
|
| - /// Returns results of a process search subject to given constraints.
|
| - /// </summary>
|
| - /// <param name="constraints">
|
| - /// A function taking a ProcessInfo object and returning true if the
|
| - /// ProcessInfo object satisfies the constraints.
|
| - /// </param>
|
| - /// <returns>List of matching processes.</returns>
|
| - public List<ProcessInfo> GetResults(Func<ProcessInfo, bool> constraints)
|
| - {
|
| - return GetSystemProcesses().Where(constraints).ToList();
|
| - }
|
| -
|
| - /// <summary>
|
| - /// Searches the system for all processes of a given name.
|
| - /// </summary>
|
| - /// <param name="name">Name to search for.</param>
|
| - /// <returns>List of matching processes.</returns>
|
| - public List<ProcessInfo> GetResultsByName(string name)
|
| - {
|
| - return GetResults(p => name.Equals(p.Name, StringComparison.OrdinalIgnoreCase));
|
| - }
|
| -
|
| - /// <summary>
|
| - /// Searches the system for all processes of a given process ID.
|
| - /// </summary>
|
| - /// <param name="procID">ID to search for.</param>
|
| - /// <returns>List of matching processes.</returns>
|
| - public List<ProcessInfo> GetResultsByID(uint procID)
|
| - {
|
| - return GetResults(p => procID == p.ID);
|
| - }
|
| -
|
| - /// <summary>
|
| - /// Returns a list of all descendant processes of a process.
|
| - /// </summary>
|
| - /// <param name="root">Process ID of the process to get all descendants from.</param>
|
| - /// <returns>All descendants of the given root process.</returns>
|
| - public List<ProcessInfo> GetDescendants(uint root)
|
| - {
|
| - List<ProcessInfo> processes = GetSystemProcesses();
|
| - HashSet<ProcessInfo> descendants = new HashSet<ProcessInfo>();
|
| - descendants.UnionWith(processes.Where(p => p.ID == root));
|
| - int lastCount = 0;
|
| - while (descendants.Count > lastCount)
|
| - {
|
| - lastCount = descendants.Count;
|
| -
|
| - // Add any processes who have a parent that is in the descendant list already.
|
| - // Note we check the creation date to prevent cycles caused by recycled process IDs.
|
| - descendants.UnionWith(processes.Where(p => descendants.Any(
|
| - parent => parent.ID == p.ParentID && parent.CreationDate <= p.CreationDate)));
|
| - }
|
| -
|
| - return descendants.ToList();
|
| - }
|
| -
|
| - /// <summary>
|
| - /// Queries the system for the full list of processes.
|
| - /// </summary>
|
| - /// <returns>List of processes on the system.</returns>
|
| - protected virtual List<ProcessInfo> GetSystemProcesses()
|
| - {
|
| - var processList = new List<ProcessInfo>();
|
| - string query = "select * from Win32_Process";
|
| - using (ManagementObjectSearcher searcher = new ManagementObjectSearcher(query))
|
| - {
|
| - using (ManagementObjectCollection results = searcher.Get())
|
| - {
|
| - foreach (ManagementObject process in results)
|
| - {
|
| - processList.Add((ProcessInfo)process);
|
| - }
|
| - }
|
| - }
|
| -
|
| - return processList;
|
| - }
|
| - }
|
| -}
|
| +// Copyright (c) 2012 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +namespace NativeClientVSAddIn
|
| +{
|
| + using System;
|
| + using System.Collections.Generic;
|
| + using System.Linq;
|
| + using System.Management;
|
| +
|
| + /// <summary>
|
| + /// Queries the system for the list of running processes.
|
| + /// </summary>
|
| + public class ProcessSearcher
|
| + {
|
| + /// <summary>
|
| + /// Returns results of a process search subject to given constraints.
|
| + /// </summary>
|
| + /// <param name="constraints">
|
| + /// A function taking a ProcessInfo object and returning true if the
|
| + /// ProcessInfo object satisfies the constraints.
|
| + /// </param>
|
| + /// <returns>List of matching processes.</returns>
|
| + public List<ProcessInfo> GetResults(Func<ProcessInfo, bool> constraints)
|
| + {
|
| + return GetSystemProcesses().Where(constraints).ToList();
|
| + }
|
| +
|
| + /// <summary>
|
| + /// Searches the system for all processes of a given name.
|
| + /// </summary>
|
| + /// <param name="name">Name to search for.</param>
|
| + /// <returns>List of matching processes.</returns>
|
| + public List<ProcessInfo> GetResultsByName(string name)
|
| + {
|
| + return GetResults(p => name.Equals(p.Name, StringComparison.OrdinalIgnoreCase));
|
| + }
|
| +
|
| + /// <summary>
|
| + /// Searches the system for all processes of a given process ID.
|
| + /// </summary>
|
| + /// <param name="procID">ID to search for.</param>
|
| + /// <returns>List of matching processes.</returns>
|
| + public List<ProcessInfo> GetResultsByID(uint procID)
|
| + {
|
| + return GetResults(p => procID == p.ID);
|
| + }
|
| +
|
| + /// <summary>
|
| + /// Returns a list of all descendant processes of a process.
|
| + /// </summary>
|
| + /// <param name="root">Process ID of the process to get all descendants from.</param>
|
| + /// <returns>All descendants of the given root process.</returns>
|
| + public List<ProcessInfo> GetDescendants(uint root)
|
| + {
|
| + List<ProcessInfo> processes = GetSystemProcesses();
|
| + HashSet<ProcessInfo> descendants = new HashSet<ProcessInfo>();
|
| + descendants.UnionWith(processes.Where(p => p.ID == root));
|
| + int lastCount = 0;
|
| + while (descendants.Count > lastCount)
|
| + {
|
| + lastCount = descendants.Count;
|
| +
|
| + // Add any processes who have a parent that is in the descendant list already.
|
| + // Note we check the creation date to prevent cycles caused by recycled process IDs.
|
| + descendants.UnionWith(processes.Where(p => descendants.Any(
|
| + parent => parent.ID == p.ParentID && parent.CreationDate <= p.CreationDate)));
|
| + }
|
| +
|
| + return descendants.ToList();
|
| + }
|
| +
|
| + /// <summary>
|
| + /// Queries the system for the full list of processes.
|
| + /// </summary>
|
| + /// <returns>List of processes on the system.</returns>
|
| + protected virtual List<ProcessInfo> GetSystemProcesses()
|
| + {
|
| + var processList = new List<ProcessInfo>();
|
| + string query = "select * from Win32_Process";
|
| + using (ManagementObjectSearcher searcher = new ManagementObjectSearcher(query))
|
| + {
|
| + using (ManagementObjectCollection results = searcher.Get())
|
| + {
|
| + foreach (ManagementObject process in results)
|
| + {
|
| + processList.Add((ProcessInfo)process);
|
| + }
|
| + }
|
| + }
|
| +
|
| + return processList;
|
| + }
|
| + }
|
| +}
|
|
|