static void Main(string[] args) {
…
// Запрос PID у пользователя и вывод списка активных потоков.
Console.WriteLine("***** Введите значение PID процесса *****");
Console.Write("PID: ");
string pID = Console.ReadLine();
int theProcID = int.Parse(pID);
EnumThreadsForPid(theProcID);
Console.ReadLine();
}
В результате выполнения обновленной программы вы должны получить вывод, подобный показанному на рис. 13.4.
Рис. 13.4
Кроме членов Id, StartTime и PriorityLevel, тип ProcessThread имеет и другие члены, которые могут представлять интерес. Некоторые из таких членов приведены в табл. 13.3.
Таблица 13.3. Подборка членов типа ProcessThread
| Член | Описание |
|---|---|
| BasePriority | Читает значение базового приоритета потока |
| CurrentPriority | Читает значение текущего приоритета потока |
| Id | Читает уникальный идентификатор потока |
| IdealProcessor | Задает предпочтительный процессор для выполнения данного потока |
| PriorityLevel | Читает или задает уровень приоритета для данного потока |
| ProcessorAffinity | Задает процессоры, на которых может выполняться ассоциированный поток |
| StartAddress | Читает адрес в памяти для функции, которая вызывалась операционной системой для запуска данного потока |
| StartTime | Читает информацию о времени запуска данного потока операционной системой |
| ThreadState | Читает информацию о текущем состоянии потока |
| TotalProcessorTime | Читает общую оценку времени, в течение которого данный поток использовал процессор |
| WaitReason | Читает информацию о причине, по которой поток находится в ожидании |
Перед тем как двигаться дальше, следует заметить, что тип ProcessThread не
Информация о наборе модулей процесса
Теперь выясним, как выполнить цикл по всем модулям, загруженным в рамках данного процесса. Напомним, что
public static void EnumModsForPid(int pID) {
Process theProc;
try {
theProc = Process.GetProcessById(pID);
} catch {
Console.WriteLine("-› Извините, некорректное значение PID!");
Console.WriteLine("************************************\n");
return;
}
Console.WriteLine("Загруженные модули для {0}:", theProc.ProcessName);
try {
ProcessModuleCollection theMods = theProc.Modules;
foreach (ProcessModule pm in theMods) {
string info = string.Format("-› Имя модуля: {0}", pm.ModuleName);
Console.WriteLine(info);
}
Console.WriteLine("************************************\n");
} catch {
Console.WriteLine("Модулей не обнаружено!");
}
}