Рекомендации по выполнению




Отчёт по лабораторной работе

 

Отчёт по лабораторной работе включает следующие элементы.

Титульный лист с названием дисциплины и темой работы (ненумеруемый лист 1) - форма регламентируется учебной частью.

Содержание (лист 2) - раздел с перечислением следующих разделов.

Цель работы (берётся из задания).

Теоретическая часть (или Введение, или раздел с конкретным названием, указывающим на предметную область), где описываются понятия и термины, фигурирующие в задании и используемые в дальнейшем тексте отчёта.

Практическая часть, описывающая способ получения данных.

Анализ полученных данных (обычно содержит обязательный элемент, указанный в задании).

Выводы (краткая формулировка, подтверждающая достижение цели работы).

Литература (нумерованный список, на каждый из пунктов которого должна иметься ссылка в тексте).

В целом основная часть отчёта должна быть связным текстом, содержащим ссылки на включённые в него рисунки и таблицы, оформленным с выравниванием по обоим краям шрифтом Times New Roman 14pt. Заголовки разделов выполняются жирным шрифтом. Заголовки таблиц и подрисуночные подписи выполняются обычным шрифтом. В конце заголовков знаки препинания не ставятся. Кроме основной части, отчёт может содержать раздел Приложение, которое распечатывать не обязательно.

 

Задание и указания по выполнению лабораторной работы

Название работы

Диспетчеризация и синхронизация процессов и потоков в операционных системах типа WINNT.

 

Цель работы

 

Ознакомиться с описаниями ролей классов, представляющих процессы (Win32_Process) и их потоки (Win32_Thread) и их свойств, относящихся к диспетчеризации, синхронизации и использованию системных ресурсов.

 

Обязательные элементы

· Экранные формы закладки Столбцы вкладки Процессы/Вид Диспетчера задач

· Экранная форма коллекции процессов, имеющих от 8 до 15 потоков, с выбранным процессом

· Экранная форма коллекции потоков выбранного процесса

· Таблица значений избранных свойств потоков и объяснение смысла встречающихся числовых значений

 

Процесс явл контейнером содержащий дескриптор ресурсов выделенных ему системы ресурсов, часть типов этих ресурсов приведена на рисунке выше. Эти ресурсы относятся к управлению памятью, подкачке страниц, управлению вводом выводом и управлению объектами графического интерфейса.

Рекомендации по выполнению

1. Часть свойств, учитываемых при планировании и диспетчеризации процессов, представлена для оператора в интерфейсе Диспетчера задач. Однако, например, потоки процесса представлены только счётчиком потоков ThreadCount, базовый приоритет представлен не числом, а лексической переменной, соответствующей классу приоритета, заданному при его создании, имеется идентификатор процесса PID, но нет родительского PPID. Более полный доступ к свойствам процессов и их потоков можно получить через один из интерфейсов Инструментария управления Windows WMI, например, через Тестер инструментария wbemtest.exe.

2. Для этого надо выполнить подключение к пространству имён root\cimv2, как описано на с. 54 книги Попова и Шикина, отметить флажок Изменённые квалификаторы (в этом режиме доступны описания ролей, свойств и методов классов), выбрать диалог Выполнить запрос, выполнить запрос WQL

 

select * from Win32_Process where ThreadCount>7 AND ThreadCount<16

 

и, выбрав один из элементов коллекции, скопировать в раздел Практическая часть экранную форму (ALT+PrtScr). Ключевое свойство Handle выбранного элемента равно PID. Двойным щелчком на экземпляре можно получить доступ ко всем свойствам процесса, некоторые из них представляют интерес, например, Name. Для справки можно в окне Редактора объекта войти в диалог Вывести MOF

 

Получили св-ва путём нажатия «вывести МОФ»

 

instance of Win32_Process

{

Caption = "csrss.exe";

CommandLine = "C:\\WINDOWS\\system32\\csrss.exe ObjectDirectory=\\Windows SharedSection=1024,3072,512 Windows=On SubSystemType=Windows ServerDll=basesrv,1 ServerDll=winsrv:UserServerDllInitialization,3 ServerDll=winsrv:ConServerDllInitialization,2 ProfileControl=Off MaxRequestThreads=16";

CreationClassName = "Win32_Process";

CreationDate = "20141203194002.921875+180";

CSCreationClassName = "Win32_ComputerSystem";

CSName = "PC-33-022";

Description = "csrss.exe";

ExecutablePath = "C:\\WINDOWS\\system32\\csrss.exe";

Handle = "692";

HandleCount = 539;

KernelModeTime = "47031250";

MaximumWorkingSetSize = 1413120;

MinimumWorkingSetSize = 204800;

Name = "csrss.exe";

OSCreationClassName = "Win32_OperatingSystem";

OSName = "Microsoft Windows XP Professional|C:\\WINDOWS|\\Device\\Harddisk0\\Partition1";

OtherOperationCount = "117021";

OtherTransferCount = "1957033";

PageFaults = 5717;

PageFileUsage = 1716224;

ParentProcessId = 644;

PeakPageFileUsage = 5304320;

PeakVirtualSize = "64163840";

PeakWorkingSetSize = 5828608;

Priority = 13;

PrivatePageCount = "1716224";

ProcessId = 692;

QuotaNonPagedPoolUsage = 6752;

QuotaPagedPoolUsage = 89596;

QuotaPeakNonPagedPoolUsage = 7824;

QuotaPeakPagedPoolUsage = 90560;

ReadOperationCount = "7716";

ReadTransferCount = "2667613";

SessionId = 0;

ThreadCount = 12;

UserModeTime = "24218750";

VirtualSize = "63881216";

WindowsVersion = "5.1.2600";

WorkingSetSize = "4890624";

WriteOperationCount = "0";

WriteTransferCount = "0";

};

 

и, выделив всё, скопировать в Приложение. Закрыв окно MOF, следует войти в диалог Класс для получения описаний роли, свойств и методов класса, тем же путём скопировав их в Приложение (альтернативный метод - получение справки по сети с сайта MSDN по образу "Класс WMI Win32_Process").

 

[dynamic: ToInstance, provider("CIMWin32"): ToInstance, SupportsCreate, CreateBy("Create"), SupportsDelete, DeleteBy("DeleteInstance"), Locale(1049): Amended, UUID("{8502C4DC-5FBB-11D2-AAC1-006008C78BC7}"): ToInstance, Description("Класс Win32_Process представляет последовательность событий в системе Win32. Любая последовательность, состоящая из взаимодействия одного или нескольких процессоров, выполнения некоторого кода и ввода данных, является потомком или членом этого класса.\nПример: приложение-клиент, выполняющееся в системе Win32."): ToSubClass Amended, DisplayName("Процессы"): Amended]

class Win32_Process: CIM_Process

{

[Description("Свойство Caption является коротким (одна строка) текстовым описанием объекта."): ToSubClass Amended] string Caption;

[Description("Свойство Description является текстовым описанием объекта. "): ToSubClass Amended] string Description;

[Description("Свойство InstallDate указывает дату установки объекта. Отсутствие значения не означает, что объект не установлен."): ToSubClass Amended] datetime InstallDate;

[Description("Свойство Name определяет метку, под которой известен объект. При создании подкласса свойство Name может быть перекрыто при помощи свойства Key."): ToSubClass Amended] string Name;

[Description("Свойство Status является строкой, определяющей текущее состояние объекта. В числе возможных работоспособных состояний: \"ОК\", \"Деградация\" и \"Пред-ошибка\". \"Пред-ошибка\" означает, что объект работоспособен, но предсказывает ошибку в ближайшее время. Примером может служить жесткий диск с использованием SMART. Могут быть указаны неработоспособные состояния: \"Ошибка\", \"Запуск\", \"Остановка\" и \"Обслуживание\". \"Обслуживание\" может использоваться во время восстановления зеркального диска, перезагрузки списка разрешений для пользователей или выполнения других административных задач."): ToSubClass Amended, Values{"ОК", "Ошибка", "Деградация", "Нет данных", "Пред-ошибка", "Запуск", "Остановка", "Служба", "Протестирован", "NonRecover", "Контакт отсутствует", "Нет связи"}: ToSubClass Amended] string Status;

[Description("CSCreationClassName содержит имя класса создания системы компьютера."): ToSubClass Amended] string CSCreationClassName;

[Description("Имя системы компьютера."): ToSubClass Amended] string CSName;

[Description("CreationClassName указывает имя класса или подкласса, используемого для создания экземпляра. При использовании с другими ключевыми свойствами класса, это свойство позволяет уникально идентифицировать все экземпляры класса и его подклассов."): ToSubClass Amended] string CreationClassName;

[Description("Время начала выполнения процесса."): ToSubClass Amended] datetime CreationDate;

[Description("Строка, используемая для идентификации процесса. ID процесса это один из типов дескриптора процесса."): ToSubClass Amended] string Handle;

[Units("100ns"): ToSubClass, Override("KernelModeTime"), Description("Время в режиме ядра, в 100 наносекундах. Если эта информация отсутствует, используется значение 0."): ToSubClass Amended] uint64 KernelModeTime = NULL;

[Description("Имя класса создания операционной системы."): ToSubClass Amended] string OSCreationClassName;

[Description("Имя операционной системы."): ToSubClass Amended] string OSName;

[read: ToSubClass, Override("Priority"): ToSubClass, MappingStrings{"Win32API|Process Status|SYSTEM_PROCESS_INFORMATION|BasePriority"}: ToSubClass, Description("Свойство Priority указывает приоритет процесса. Чем больше это значение, тем более высокий приоритет имеет процесс. Допустимый диапазон значений: от 0 (самый низкий приоритет) до 31 (самый высокий).\nПример: 7."): ToSubClass Amended, DisplayName("Приоритет"): Amended] uint32 Priority = NULL;

[Description("Указывает текущее рабочее состояние процесса. Примеры возможных значений: готов (2); выполняется (3); заблокирован (4)."): ToSubClass Amended, Values{"Нет данных", "Другое", "Готов", "Работает", "Заблокирован", "Приостановлен - заблокирован", "Приостановлен - готов", "Остановлен", "стоп", "Рост"}: ToSubClass Amended] uint16 ExecutionState;

[Description("Время остановки или завершения работы процесса."): ToSubClass Amended] datetime TerminationDate;

[Units("100ns"): ToSubClass, Override("UserModeTime"), Description("Время в пользовательском режиме, 100 наносекундах. Если эта информация отсутствует, используется значение 0."): ToSubClass Amended] uint64 UserModeTime = NULL;

[Description("Размер памяти (в байтах), необходимый для успешного выполнения процесса в операционной системе, использующей страничную организацию памяти. Если размер свободной памяти меньше рабочего набора процесса, происходит пробуксовка. Если эта информация отсутствует, используется значение ''NULL'' или ''0''. Если эти данные указаны, может вестись наблюдение с целью анализа динамики изменений требований к памяти по мере выполнения процесса."): ToSubClass Amended] uint64 WorkingSetSize;

[read: ToSubClass, Privileges{"SeDebugPrivilege"}: ToSubClass, MappingStrings{"Win32API|Tool Help Structures|MODULEENTRY32|szExePath"}: ToSubClass, Description("Свойство ExecutablePath указывает путь к исполняемому файлу процесса.\nПример: C:\\WINDOWS\\EXPLORER.EXE"): ToSubClass Amended, DisplayName("Путь к исполняемому файлу"): Amended] string ExecutablePath;

[read: ToSubClass, Units("Kilobytes"): ToSubClass, Privileges{"SeDebugPrivilege"}: ToSubClass, MappingStrings{"Win32|WINNT.H|QUOTA_LIMITS|MaximumWorkingSetSize"}: ToSubClass, Description("Свойство MaximumWorkingSetSize указывает максимальный размер рабочего набора процесса. Рабочий набор процесса - это набор страниц, доступных процессу в физической RAM. Эти страницы являются резидентными и доступны приложению постоянно.\nПример: 1413120."): ToSubClass Amended, DisplayName("Максимальный размер рабочего множества"): Amended] uint32 MaximumWorkingSetSize;

[read: ToSubClass, Units("Kilobytes"): ToSubClass, Privileges{"SeDebugPrivilege"}: ToSubClass, MappingStrings{"Win32|WINNT.H|QUOTA_LIMITS|MinimumWorkingSetSize"}: ToSubClass, Description("Свойство MinimumWorkingSetSize указывает минимальный размер рабочего набора процесса. Рабочий набор процесса - это набор страниц, доступных процессу в физической RAM. Эти страницы являются резидентными и доступны приложению постоянно.\nПример: 20480."): ToSubClass Amended, DisplayName("Минимальный размер рабочего множества"): Amended] uint32 MinimumWorkingSetSize;

[read: ToSubClass, MappingStrings{"Win32API|Process Status|SYSTEM_PROCESS_INFORMATION|PageFaultCount"}: ToSubClass, Description("Свойство PageFaults указывает число Ошибок страницы сгенерированных процессом.\nПример: 10"): ToSubClass Amended, DisplayName("Число ошибок страницы"): Amended] uint32 PageFaults;

[read: ToSubClass, Units("Kilobytes"): ToSubClass, MappingStrings{"Win32API|Process Status|SYSTEM_PROCESS_INFORMATION|PagefileUsage"}: ToSubClass, Description("Свойство PageFileUsage указывает размер части файла подкачки, используемой процессом в настоящее время.\nПример: 102435"): ToSubClass Amended, DisplayName("Использование файла подкачки"): Amended] uint32 PageFileUsage;

[read: ToSubClass, Units("Kilobytes"): ToSubClass, MappingStrings{"Win32API|Process Status|SYSTEM_PROCESS_INFORMATION|PeakPagefileUsage"}: ToSubClass, Description("Свойство PeakPageFileUsage указывает максимальный размер части файла подкачки, использованной процессом за время жизни.\nПример: 102367"): ToSubClass Amended, DisplayName("Использование файла подкачки (пик)"): Amended] uint32 PeakPageFileUsage;

[read: ToSubClass, Units("Kilobytes"): ToSubClass, MappingStrings{"Win32API|Process Status|SYSTEM_PROCESS_INFORMATION|PeakWorkingSetSize"}: ToSubClass, Description("Свойство PeakWorkingSetSize указывает пиковое значение размера рабочего набора процесса.\nПример: 1413120"): ToSubClass Amended, DisplayName("Размер рабочего множества (пик)"): Amended] uint32 PeakWorkingSetSize;

[read: ToSubClass, MappingStrings{"Win32API|Process and Thread Structures|PROCESS_INFORMATION|dwProcessId "}: ToSubClass, Description("Свойство ProcessId содержит идентификатор процесса. Значение этого свойства актуально с момента создания процесса, до окончания его работы."): ToSubClass Amended, DisplayName("Идентификатор процесса"): Amended] uint32 ProcessId;

[read: ToSubClass, MappingStrings{"Win32API|Process Status|SYSTEM_PROCESS_INFORMATION|QuotaNonPagedPoolUsage"}: ToSubClass, Description("Свойство QuotaNonPagedPoolUsage указывает размер используемой процессом части невыгружаемого пула.\nПример: 15"): ToSubClass Amended, DisplayName("Квота на невыгружаемый пул"): Amended] uint32 QuotaNonPagedPoolUsage;

[read: ToSubClass, MappingStrings{"Win32API|Process Status|SYSTEM_PROCESS_INFORMATION|QuotaPagedPoolUsage"}: ToSubClass, Description("Свойство QuotaPagedPoolUsage указывает размер используемой процессом части выгружаемого пула.\nПример: 22"): ToSubClass Amended, DisplayName("Квота на выгружаемый пул"): Amended] uint32 QuotaPagedPoolUsage;

[read: ToSubClass, MappingStrings{"Win32API|Process Status|SYSTEM_PROCESS_INFORMATION|QuotaPeakNonPagedPoolUsage"}: ToSubClass, Description("Свойство QuotaPeakNonPagedPoolUsage указывает пиковое значение размера используемой процессом части невыгружаемого пула.\nПример: 31"): ToSubClass Amended, DisplayName("Пиковая квота на невыгружаемый пул"): Amended] uint32 QuotaPeakNonPagedPoolUsage;

[read: ToSubClass, MappingStrings{"Win32API|Process Status|SYSTEM_PROCESS_INFORMATION|QuotaPeakPagedPoolUsage"}: ToSubClass, Description("Свойство QuotaPeakPagedPoolUsage указывает пиковое значение размера используемой процессом части выгружаемого пула.\n Пример: 31"): ToSubClass Amended, DisplayName("Пиковая квота на выгружаемый пул"): Amended] uint32 QuotaPeakPagedPoolUsage;

[read: ToSubClass, MappingStrings{"Win32API|Process and Thread Functions|GetProcessVersion"}: ToSubClass, Description("Свойство WindowsVersion указывает версию Windows, в которой работает процесс.\nПример: 4.0"): ToSubClass Amended, DisplayName("Версия Windows"): Amended] string WindowsVersion;

[read: ToSubClass, MappingStrings{"Win32API|Process Status|SYSTEM_PROCESS_INFORMATION|NumberOfThreads"}: ToSubClass, Description("Свойство ThreadCount указывает число активных потоков в процессе. Инструкция представляет собой \"единицу выполнения\" процесса. Поток является объектом, выполняющим инструкции. Каждый работающий процесс имеет, по крайней мере, один поток. Это свойство используется только для Windows NT."): ToSubClass Amended, DisplayName("Счетчик потоков"): Amended] uint32 ThreadCount;

[read: ToSubClass, MappingStrings{"Win32API|Process Status|SYSTEM_PROCESS_INFORMATION|HandleCount"}: ToSubClass, Description("Свойство HandleCount указывает общее число дескрипторов, открытых в настоящее время процессом. Это число представляет собой сумму числа дескрипторов, открытых каждым потоком в процессе. Дескриптор используется для работы с системными ресурсами. Каждому дескриптору соответствует запись в таблице дескрипторов. Эта запись содержит адреса ресурсов и средства для определения типа ресурсов."): ToSubClass Amended, DisplayName("Счетчик дескрипторов"): Amended] uint32 HandleCount;

[read: ToSubClass, MappingStrings{"Win32API|Process Status|SYSTEM_PROCESS_INFORMATION|InheritedFromUniqueProcessId"}: ToSubClass, Description("Свойство ParentProcessId указывает уникальный идентификатор процесса, который создал этот процесс. Идентификаторы процесса могут использоваться повторно, поэтому они актуальны только в течение времени жизни процесса. Процесс, указанный ParentProcessId, может быть прерван, поэтому ParentProcessId может не указывать на работающий процесс. Так же возможна ситуация, когда ParentProcessId некорректно указывает процесс, повторно использующий идентификатор родительского процесса. На основании значения свойства CreationDate можно определить, был ли родительский процесс создан позже данного процесса."): ToSubClass Amended, DisplayName("ID родительского процесса"): Amended] uint32 ParentProcessId;

[read: ToSubClass, MappingStrings{"Win32API|Process Status|SYSTEM_PROCESS_INFORMATION|SessionId"}: ToSubClass, Description("Свойство SessionId указывает уникальный идентификатор, который генерируется операционной системой при создании сеанса. Сеанс представляет собой промежуток времени между входом и выходом из системы."): ToSubClass Amended, DisplayName("КОД СЕАНСА"): Amended] uint32 SessionId;

[read: ToSubClass, MappingStrings{"Win32API|Process Status|SYSTEM_PROCESS_INFORMATION|PrivatePageCount"}: ToSubClass, Description("Свойство PrivatePageCount указывает текущее число страниц, доступных только этому процессу "): ToSubClass Amended, DisplayName("Частный счетчик страниц"): Amended] uint64 PrivatePageCount;

[read: ToSubClass, Units("Bytes"): ToSubClass, MappingStrings{"Win32API|Process Status|SYSTEM_PROCESS_INFORMATION|PeakVirtualSize"}: ToSubClass, Description("Свойство PeakVirtualSize указывает максимальное значение размера виртуального адресного пространства, использованного процессом единовременно. Использование виртуального адресного пространства необязательно предполагает соответствующее использование страниц в памяти или на диске. Однако, виртуальное пространство конечно и при чрезмерном его использовании процесс может ограничить свои возможности по загрузке библиотек."): ToSubClass Amended, DisplayName("Пиковое использование виртуального адресного пространства"): Amended] uint64 PeakVirtualSize;

[read: ToSubClass, Units("Bytes"): ToSubClass, MappingStrings{"Win32API|Process Status|SYSTEM_PROCESS_INFORMATION|VirtualSize"}: ToSubClass, Description("Свойство VirtualSize указывает текущий размер виртуального адресного пространства, используемого процессом, в байтах. Использование виртуального адресного пространства необязательно предполагает соответствующее использование страниц в памяти или на диске. Однако, виртуальное пространство конечно и при чрезмерном его использовании процесс может ограничить свои возможности по загрузке библиотек."): ToSubClass Amended, DisplayName("Использование виртуального адресного пространства"): Amended] uint64 VirtualSize;

[read: ToSubClass, MappingStrings{"Win32API|Process and Thread Structures|SYSTEM_PROCESS_INFORMATION|ReadOperationCount"}: ToSubClass, Description("Свойство ReadOperationCount указывает число выполненных операций чтения."): ToSubClass Amended, DisplayName("Число операций чтения"): Amended] uint64 ReadOperationCount;

[read: ToSubClass, MappingStrings{"Win32API|Process and Thread Structures|SYSTEM_PROCESS_INFORMATION|WriteOperationCount"}: ToSubClass, Description("Свойство WriteOperationCount указывает число выполненных операций записи."): ToSubClass Amended, DisplayName("Число операций записи"): Amended] uint64 WriteOperationCount;

[read: ToSubClass, MappingStrings{"Win32API|Process and Thread Structures|SYSTEM_PROCESS_INFORMATION|OtherOperationCount"}: ToSubClass, Description("Свойство OtherOperationCount указывает число выполненных операций ввода-вывода, отличных от операций чтения и записи."): ToSubClass Amended, DisplayName("Число других операций"): Amended] uint64 OtherOperationCount;

[read: ToSubClass, Units("Bytes"): ToSubClass, MappingStrings{"Win32API|Process and Thread Structures|SYSTEM_PROCESS_INFORMATION|ReadTransferCount"}: ToSubClass, Description("Свойство ReadTransferCount указывает размер прочитанных данных."): ToSubClass Amended, DisplayName("Счетчик передачи данных при чтении"): Amended] uint64 ReadTransferCount;

[read: ToSubClass, Units("Bytes"): ToSubClass, MappingStrings{"Win32API|Process and Thread Structures|SYSTEM_PROCESS_INFORMATION|WriteTransferCount"}: ToSubClass, Description("Свойство WriteTransferCount указывает размер записанных данных."): ToSubClass Amended, DisplayName("Счетчик передачи данных при записи"): Amended] uint64 WriteTransferCount;

[read: ToSubClass, Units("Bytes"): ToSubClass, MappingStrings{"Win32API|Process and Thread Structures|SYSTEM_PROCESS_INFORMATION|OtherTransferCount"}: ToSubClass, Description("Свойство OtherTransferCount указывает размер данных, переданных в процессе операций отличных от операций ввода-вывода."): ToSubClass Amended, DisplayName("Счетчик передачи данных при других операциях"): Amended] uint64 OtherTransferCount;

[read: ToSubClass, Description("Свойство CommandLine указывает командную строку, используемую для запуска процесса, если таковая используется."): ToSubClass Amended, DisplayName("Командная строка для запуска процесса"): Amended] string CommandLine;

[Constructor, Static, Implemented, Privileges{"SeAssignPrimaryTokenPrivilege", "SeIncreaseQuotaPrivilege"}: ToSubClass, ValueMap{"0", "2", "3", "8", "9", "21", ".."}: ToSubClass, MappingStrings{"Win32API|Process and Thread Functions|CreateProcess"}: ToSubClass, Description("Метод Create создает новый процесс.\nМетод возвращает целое число: \n0 - успешное завершение; \n2 - пользователь не имеет доступа к запрашиваемым данным; \n3 - у пользователя нет достаточных привилегий; \n8 - неизвестная ошибка; \n9 - пользователь не имеет необходимых привилегий; \n21 - указан недопустимый параметр. \nДругие возвращаемые значения описаны в документации по кодам ошибок Win32."): ToSubClass Amended, Values{"Успешное завершение", "Отказано в доступе", "Недостаточный уровень привилегий", "Неизвестная ошибка", "Путь не найден", "Неправильный параметр", "Другое"}: ToSubClass Amended] uint32 Create([In, MappingStrings{"Win32API|Process and Thread Functions|lpCommandLine "}: ToSubClass, Description("Параметр CommandLine указывает командную строку для выполнения. Система добавляет символ NULL к командной строке, усекая ее при необходимости, чтобы указать файл, который был использован."): ToSubClass Amended] string CommandLine, [In, MappingStrings{"Win32API|Process and Thread Functions|CreateProcess|lpCurrentDirectory "}: ToSubClass, Description("Параметр CurrentDirectory указывает текущий том и папку для дочернего процесса. Необходимо, чтобы текущая папка существовала. Пользователь может указать абсолютный или относительный путь (с учетом текущего рабочего каталога). Если значение параметра равно NULL, новый процесс будет использовать тот же путь, что и вызывающий процесс. Этот параметр, в основном, предназначен для оболочек, запускающих приложения, и указывает рабочий том и папку для приложения."): ToSubClass Amended] string CurrentDirectory, [In, MappingStrings{"WMI|Win32_ProcessStartup"}: ToSubClass, Description("Параметр ProcessStartupInformation представляет начальную конфигурацию процесса Win32. Она включает в себя информацию, используемую при отображении окна и обработке ошибок, а так же характеристики приложения командной строки. \n\nУчтите, что в Windows XP и далее, свойство WinstationDesktop (которое ранее по умолчанию имело значение \"winsta0\\default\") во всех случаях игнорируется. Вместо прежнего значения используется пустая строка (\"\")."): ToSubClass Amended] Win32_ProcessStartup ProcessStartupInformation, [Out, MappingStrings{"Win32API|Process and Thread Functions|CreateProcess|lpProcessInformation|dwProcessId"}: ToSubClass, Description("Параметр ProcessId содержит идентификатор процесса. Значение этого свойства актуально с момента создания процесса, до окончания его работы. "): ToSubClass Amended] uint32 ProcessId);

[Destructor, Implemented, ValueMap{"0", "2", "3", "8", "9", "21", ".."}: ToSubClass, MappingStrings{"Win32API|Process and Thread Functions|TerminateProcess"}: ToSubClass, Description("Метод Terminate прекращает процесс и все его дочерние процессы. \nМетод возвращает одно из следующих целочисленных значений: \n0 - успешное завершение; \n2 - пользователь не имеет доступа к запрашиваемым данным; \n3 - у пользователя нет достаточных привилегий; \n8 - неизвестная ошибка; \n9 - пользователь не имеет необходимых привилегий; \n21 - указан недопустимый параметр. \nДругие возвращаемые значения описаны в документации по кодам ошибок Win32."): ToSubClass Amended, Values{"Успешное завершение", "Отказано в доступе", "Недостаточный уровень привилегий", "Неизвестная ошибка", "Путь не найден", "Неправильный параметр", "Другое"}: ToSubClass Amended] uint32 Terminate([In, MappingStrings{"Win32API|Process and Thread Functions|TerminateProcess|uExitCode "}: ToSubClass, Description("Параметр Reason указывает код выхода для процесса и всех его потоков, прерванных в результате этого вызова. "): ToSubClass Amended] uint32 Reason);

[Implemented, ValueMap{"0", "2", "3", "8", "9", "21", ".."}: ToSubClass, MappingStrings{"WMI"}: ToSubClass, Description("Метод GetOwner возвращает учетные данные владельца (имя пользователя и имя домена), под которыми работает этот процесс.\nМетод возвращает одно из следующих целочисленных значений: \n0 - успешное завершение; \n2 - пользователь не имеет доступа к запрашиваемым данным; \n3 - у пользователя нет достаточных привилегий; \n8 - неизвестная ошибка; \n9 - пользователь не имеет необходимых привилегий; \n21 - указан недопустимый параметр. \nДругие возвращаемые значения описаны в документации по кодам ошибок Win32."): ToSubClass Amended, Values{"Успешное завершение", "Отказано в доступе", "Недостаточный уровень привилегий", "Неизвестная ошибка", "Путь не найден", "Неправильный параметр", "Другое"}: ToSubClass Amended] uint32 GetOwner([Out, MappingStrings{"WMI"}: ToSubClass, Description("Параметр User возвращает имя пользователя, являющегося владельцем этого процесса."): ToSubClass Amended] string User, [Out, MappingStrings{"WMI"}: ToSubClass, Description("Параметр Domain возвращает имя домена, в котором работает процесс."): ToSubClass Amended] string Domain);

[Implemented, ValueMap{"0", "2", "3", "8", "9", "21", ".."}: ToSubClass, MappingStrings{"WMI"}: ToSubClass, Description("Метод GetOwnerSid получает идентификатор безопасности (SID) владельца этого процесса.\nМетод возвращает одно из следующих целочисленных значений: \n0 - успешное завершение; \n2 - пользователь не имеет доступа к запрашиваемым данным; \n3 - у пользователя нет достаточных привилегий; \n8 - неизвестная ошибка; \n9 - пользователь не имеет необходимых привилегий; \n21 - указан недопустимый параметр. \nДругие возвращаемые значения описаны в документации по кодам ошибок Win32."): ToSubClass Amended, Values{"Успешное завершение", "Отказано в доступе", "Недостаточный уровень привилегий", "Неизвестная ошибка", "Путь не найден", "Неправильный параметр", "Другое"}: ToSubClass Amended] uint32 GetOwnerSid([Out, MappingStrings{"WMI"}: ToSubClass, Description("Свойство Sid возвращает дескриптор идентификатора безопасности для этого процесса."): ToSubClass Amended] string Sid);

[Implemented, ValueMap{"0", "2", "3", "8", "9", "21", ".."}: ToSubClass, MappingStrings{"Win32API|Process and Thread Functions|SetPriorityClass"}: ToSubClass, Description("Метод SetPriority пытается изменить приоритет выполнения процесса. Чтобы задать приоритет равным Realtime (режим реального времени), вызывающая сторона должна обладать привилегией SeIncreaseBasePriorityPrivilege. Без нее наивысший возможный приоритет - High (высокий).\nМетод возвращает одно из следующих целочисленных значений: \n0 - успешное завершение; \n2 - пользователь не имеет доступа к запрашиваемым данным; \n3 - у пользователя нет достаточных привилегий; \n8 - неизвестная ошибка; \n9 - пользователь не имеет необходимых привилегий; \n21 - указан недопустимый параметр. \nДругие возвращаемые значения описаны в документации по кодам ошибок Win32."): ToSubClass Amended, Values{"Успешное завершение", "Отказано в доступе", "Недостаточный уровень привилегий", "Неизвестная ошибка", "Путь не найден", "Неправильный параметр", "Другое"}: ToSubClass Amended] uint32 SetPriority([in, MappingStrings{"Win32API|Process and Thread Functions|SetPriorityClass|dwPriorityClass"}: ToSubClass, ValueMap{"0x00000040", "0x00004000", "0x00000020", "0x00008000", "0x00000080", "0x00000100"}: ToSubClass, Description("Параметр Priority указывает новый класс приоритета для процесса. Значения:\nПростой - Указывается для процесса, потоки команд которого работают только когда система находится в состоянии простоя. Выполнение потоков команд процессора прерывается потоками команд процесса, имеющего более высокий приоритет. Примером может служить программа заставки. Класс приоритета простоя наследуют все дочерние процессы.\nНиже среднего - указывает на процесс, который имеет приоритет выше класса IDLE_PRIORITY_CLASS, но ниже NORMAL_PRIORITY_CLASS. Для Windows 2000.\nСредний - указывается для процесса без специальных требований к приоритету выполнения.\nВыше среднего - указывает на процесс, приоритет которого выше класса NORMAL_PRIORITY_CLASS, но ниже HIGH_PRIORITY_CLASS. Для Windows 2000.\nВысокий приоритет - указывает процесс, выполняющий критические по времени выполнения задачи, которые следует выполнять немедленно. Потоки команд прерывают выполнение потоков среднего приоритета или приоритета простоя. Примером может служит диспетчер задач, который должен появиться на экране по требованию пользователя, независимо от загрузки операционной системы. Использовать класс высокого приоритета следует с большой осторожностью, поскольку приложения этого класса могут занимать все доступное время процессора.\nРеальное время - Указывается для процессов, которые имеют наивысший возможный приоритет. Потоки команд этого класс прерывают выполнение потоков команд всех других процессов, включая потоки операционной системы, выполняющих важные задачи. Например, процесс реального времени, выполняющийся дольше, чем мгновение, может вызывать задержку обновления кэша диска или замирание указателя мыши.\n"): ToSubClass Amended, Values{"Бездействие", "Ниже среднего", "Обычный", "Выше среднего", "Высокая важность", "Реального времени"}: ToSubClass Amended] sint32 Priority);

[ValueMap{"0", "2", "3", "8", "9", "21", ".."}: ToSubClass, Implemented, Description("Метод AttachDebugger запускает отладчик этого процесса, зарегистрированный как отладчик по умолчанию. Однако, Dr. Watson не поддерживается. \nМетод возвращает значение 'общая ошибка' если он обнаруживает недопустимую строку в разделе реестра, или одно из следующих целочисленных значений: \n0 - успешное завершение; \n2 - пользователь не имеет доступа к запрашиваемым данным; \n3 - у пользователя нет достаточных привилегий; \n8 - неизвестная ошибка; \n9 - пользователь не имеет необходимых привилегий; \n21 - указан недопустимый параметр. \nДругие возвращаемые значения описаны в документации по кодам ошибок Win32."): ToSubClass Amended, Values{"Успешное завершение", "Отказано в доступе", "Недостаточный уровень привилегий", "Неизвестная ошибка", "Путь не найден", "Неправильный параметр", "Другое"}: ToSubClass Amended] uint32 AttachDebugger();

};

 

 

3. Коллекция потоков выбранного процесса может быть получена с помощью запроса, в котором надо задать численное значение вместо PID:

 

select * from Win32_Thread where ProcessHandle= PID

 

Чтобы сократить объём действий, нужный для получения таблицы, в этом запросе вместо джокера "*" можно задать перечень имён свойств, которые в ней должны быть отражены. Это свойства, имеющие числовые значения, из которых два последних требуется разъяснить, используя описания свойств класса: Handle, Priority, ExecutionState, UserModeTime, KernelModeTime, ElapsedTime, PriorityBase, StartAddress, ThreadState, ThreadWaitReason.

 

 

 

 

1.)

instance of Win32_Thread

{

CreationClassName = "Win32_Thread";

CSCreationClassName = "Win32_ComputerSystem";

CSName = "PC-33-022";

ElapsedTime = "1379000";

Handle = "700";

KernelModeTime = "0";

OSCreationClassName = "Win32_OperatingSystem";

OSName = "Microsoft Windows XP Professional|C:\\WINDOWS|\\Device\\Harddisk0\\Partition1";

Priority = 15;

PriorityBase = 15;

ProcessCreationClassName = "Win32_Process";

ProcessHandle = "692";

StartAddress = 1974697315;

ThreadState = 5;

ThreadWaitReason = 17;

UserModeTime = "0";

};

 

2.)

 

 

instance of Win32_Thread

{

CreationClassName = "Win32_Thread";

CSCreationClassName = "Win32_ComputerSystem";

CSName = "PC-33-022";

ElapsedTime = "1379000";

Handle = "704";

KernelModeTime = "0";

OSCreationClassName = "Win32_OperatingSystem";

OSName = "Microsoft Windows XP Professional|C:\\WINDOWS|\\Device\\Harddisk0\\Partition1";

Priority = 14;

PriorityBase = 13;

ProcessCreationClassName = "Win32_Process";

ProcessHandle = "692";

StartAddress = 1974714045;

ThreadState = 5;

ThreadWaitReason = 6;

UserModeTime = "0";

};

 

3.)

 

instance of Win32_Thread

{

CreationClassName = "Win32_Thread";

CSCreationClassName = "Win32_ComputerSystem";

CSName = "PC-33-022";

ElapsedTime = "1379000";

Handle = "708";

KernelModeTime = "875";

OSCreationClassName = "Win32_OperatingSystem";

OSName = "Microsoft Windows XP Professional|C:\\WINDOWS|\\Device\\Harddisk0\\Partition1";

Priority = 14;

PriorityBase = 13;

ProcessCreationClassName = "Win32_Process";

ProcessHandle = "692";

StartAddress = 1974552086;

ThreadState = 5;

ThreadWaitReason = 16;

UserModeTime = "750";

};

 

4.)

 

 

instance of Win32_Thread

{

CreationClassName = "Win32_Thread";

CSCreationClassName = "Win32_ComputerSystem";

CSName = "PC-33-022";

ElapsedTime = "1379000";

Handle = "712";

KernelModeTime = "0";

OSCreationClassName = "Win32_OperatingSystem";

OSName = "Microsoft Windows XP Professional|C:\\WINDOWS|\\Device\\Harddisk0\\Partition1";

Priority = 14;

PriorityBase = 13;

ProcessCreationClassName = "Win32_Process";

ProcessHandle = "692";

StartAddress = 1974549306;

ThreadState = 5;

ThreadWaitReason = 16;

UserModeTime = "0";

};

 

5.)

 

 

instance of Win32_Thread

{

CreationClassName = "Win32_Thread";

CSCreationClassName = "Win32_ComputerSystem";

CSName = "PC-33-022";

ElapsedTime = "1379000";

Handle = "724";

KernelModeTime = "812";

OSCreationClassName = "Win32_OperatingSystem";

OSName = "Microsoft Windows XP Professional|C:\\WINDOWS|\\Device\\Harddisk0\\Partition1";

Priority = 14;

PriorityBase = 13;

ProcessCreationClassName = "Win32_Process";

ProcessHandle = "692";

StartAddress = 1974552086;

ThreadState = 5;

ThreadWaitReason = 16;

UserModeTime = "515";

};

 

6.)

 

 

instance of Win32_Thread

{

CreationClassName = "Win32_Thread";

CSCreationClassName = "Win32_ComputerSystem";

CSName = "PC-33-022";

ElapsedTime = "1379000";

Handle = "728";

KernelModeTime = "250";

OSCreationClassName = "Win32_OperatingSystem";

OSName = "Microsoft Windows XP Professional|C:\\WINDOWS|\\Device\\Harddisk0\\Partition1";

Priority = 13;

PriorityBase = 13;

ProcessCreationClassName = "Win32_Process";

ProcessHandle = "692";

StartAddress = 1974697183;

ThreadState = 5;

ThreadWaitReason = 13;

UserModeTime = "0";

};

 

7.)

 

 

instance of Win32_Thread

{

CreationClassName = "Win32_Thread";

CSCreationClassName = "Win32_ComputerSystem";

CSName = "PC-33-022";

ElapsedTime = "1379000";

Handle = "732";

KernelModeTime = "359";

OSCreationClassName = "Win32_OperatingSystem";

OSName = "Microsoft Windows XP Professional|C:\\WINDOWS|\\Device\\Harddisk0\\Partition1";

Priority = 15;

PriorityBase = 13;

ProcessCreationClassName = "Win32_Process";

ProcessHandle = "692";

StartAddress = 1974697183;

ThreadState = 5;

ThreadWaitReason = 13;

UserModeTime = "0";

};

 

8.)

 

 

instance of Win32_Thread

{

CreationClassName = "Win32_Thread";

CSCreationClassName = "Win32_ComputerSystem";

CSName = "PC-33-022";

ElapsedTime = "1378000";

Handle = "780";

KernelModeTime = "0";

OSCreationClassName = "Win32_OperatingSystem";

OSName = "Microsoft Windows XP Professional|C:\\WINDOWS|\\Device\\Harddisk0\\Partition1";

Priority = 14;

PriorityBase = 13;

ProcessCreationClassName = "Win32_Process";

ProcessHandle = "692";

StartAddress = 1974697183;

ThreadState = 5;

ThreadWaitReason = 13;

UserModeTime = "0";

};

9.)

 

 

instance of Win32_Thread

{

CreationClassName = "Win32_Thread";

CSCreationClassName = "Win32_ComputerSystem";

CSName = "PC-33-022";

ElapsedTime = "1375000";

Handle = "1380";

KernelModeTime = "828";

OSCreationClassName = "Win32_OperatingSystem";

OSName = "Microsoft Windows XP Professional|C:\\WINDOWS|\\Device\\Harddisk0\\Partition1";

Priority = 13;

PriorityBase = 13;

ProcessCreationClassName = "Win32_Process";

ProcessHandle = "692";

StartAddress = 1974552086;

ThreadState = 5;

ThreadWaitReason = 16;

UserModeTime = "625";

};

 

10.)

 

 

instance of Win32_Thread

{

CreationClassName = "Win32_Thread";

CSCreationClassName = "Win32_ComputerSystem";

CSName = "PC-33-022";

ElapsedTime = "1374000";

Handle = "1472";

KernelModeTime = "0";

OSCreationClassName = "Win32_OperatingSystem";

OSName = "Microsoft Windows XP Professional|C:\\WINDOWS|\\Device\\Harddisk0\\Partition1";

Priority = 15;

PriorityBase = 13;

ProcessCreationClassName = "Win32_Process";

ProcessHandle = "692";

StartAddress = 1974673026;

ThreadState = 5;

ThreadWaitReason = 13;

UserModeTime = "0";

};

 

11.)

 

 

instance of Win32_Thread

{

CreationClassName = "Win32_Thread";

CSCreationClassName = "Win32_ComputerSystem";

CSName = "PC-33-022";

ElapsedTime = "1366000";

Handle = "1992";

KernelModeTime = "734";

OSCreationClassName = "Win32_OperatingSystem";

OSName = "Microsoft Windows XP Professional|C:\\WINDOWS|\\Device\\Harddisk0\\Partition1";

Priority = 14;

PriorityBase = 13;

ProcessCreationClassName = "Win32_Process";

ProcessHandle = "692";

StartAddress = 1974552086;

ThreadState = 5;

ThreadWaitReason = 16;

UserModeTime = "500";

};

 

12.)

 

 

instance of Win32_Thread

{

CreationClassName = "Win32_Thread";

CSCreationClassName = "Win32_ComputerSystem";

CSName = "PC-33-022";

ElapsedTime = "1332000";

Handle = "2140";

KernelModeTime = "0";

OSCreationClassName = "Win32_OperatingSystem";

OSName = "Microsoft Windows XP Professional|C:\\WINDOWS|\\Device\\Harddisk0\\Partition1";

Priority = 15;

PriorityBase = 15;

ProcessCreationClassName = "Win32_Process";

ProcessHandle = "692";

StartAddress = 1974697940;

ThreadState = 5;

ThreadWaitReason = 6;

UserModeTime = "0";

};

 

4. Для заполнения таблицы надо сначала сохранить содержимые MOF-файлов, выбрав каждый из экземпляров коллекции, в Приложении. Строка (или столбец) должны соответствовать экземпляру. В описаниях свойства ThreadState имеется значение, соответствующее состоянию ожидания по причине, указанной в значении ThreadWaitReason. Ожидание связано с использованием событийного программирования в системе потоков процесса и с мех



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2019-03-15 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: