Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
курсовая работа СПО.doc
Скачиваний:
9
Добавлен:
21.12.2018
Размер:
333.31 Кб
Скачать

4.1.2 Работа с процессами и потоками в wmi

В WMI каждому запущенному в системе процессу соответствует экземпляр класса Win32_Process.

Основные свойства класса Win32_Process:

Caption – короткое текстовое описание процесса;

CommandLine – командная строка, используемая для запуска процесса;

CreationDate – время начала выполнения процесса;

Description – полное описание процесса;

ExecutablePath – полный путь к исполняемому файлу процесса;

HandleCount – общее количество дескрипторов, открытых в настоящее время процессом;

MaximumWorkingSetSize – максимально возможное количество страниц памяти доступное процессу;

MinimumWorkingSetSize – минимально возможное количество страниц памяти доступное процессу;

Name – имя процесса;

PageFileUsage – объем части файла подкачки, которая используется процессом в настоящее время;

ParentProcessId – идентификатор родительского процесса;

PeakPageFileUsage – максимальный объем части файла подкачки, которая использовалась процессом за время его работы;

PeakVirtualSize – максимальное значение объема виртуального адресного пространства, которое использовалось процессом единовременно;

PeakWorkingSetSize – максимальный объем физической памяти, используемый процессом;

Priority – приоритет процесса;

ProcessId – идентификатор процесса;

ReadOperationCount – число выполненных процессом операций чтения;

ReadTransferCount – объем прочитанных данных;

ThreadCount – число активных потоков в процессе;

VirtualSize – текущий объем виртуального адресного пространства в байтах, используемого процессом;

WorkingSetSize – размер физической памяти в байтах, необходимый для выполнения процесса;

WriteOperationCount – число выполненных процессом операций записи;

WriteTransferCount – объем записанных данных.

Основные методы класса Win32_Process.

AttachDebugger() – запускает отладчик, установленный в системе по умолчанию, для отладки процесса, возвращает 0 – при успешном выполнении или код ошибки в противном случае.

Create(CommandLine, CurrentDirectory, ProcessStartupInformation, ProcessId) – создает новый процесс, возвращает 0 в случае успешного создания объекта или другое число в случае ошибки.

SetPriority(Priority) – устанавливает приоритет процесса, параметр Priority определяет требуемый приоритет и может принимать следующие значения:

64 (0x40) – Idle – низкий,

16384 (0x4000) – Below Normal – ниже среднего (Win2000/XP/2003),

32 (0x20) - Normal – средний,

32768 (0x8000) – Above Normal – выше среднего (Win2000/XP/2003),

128 (0x80) – High – высокий,

256 (0x100) – Realtime – наивысший;

возвращает 0 – при успешном выполнении или код ошибки в противном случае.

Terminate(Reason) – завершает процесс и все его потоки, числовой код Reason задает код выхода, который будет сообщен операционной системе после завершения процесса, возвращает 0 – при успешном выполнении или код ошибки в противном случае.

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

Основные свойства класса Win32_ProcessStartup:

PriorityClass – приоритет нового процесса;

ShowWindow – способ отображения окна программы;

0 – SW_HIDE – скрытое окно,

1 – SW_NORMAL – окно отображается и активируется,

2 – SW_SHOWMINIMIZED – окно отображается свернутым и активируется,

3 – SW_SHOWMAXIMIZED – окно отображается развернутым и активируется,

4 – SW_SHOWNOACTIVATE – окно отображается но не активируется;

X – отступ для окна программы в пикселях по горизонтали от верхнего левого угла;

Y – отступ для окна программы в пикселях по вертикали от верхнего левого угла;

XSize – ширина окна в пикселях;

YSize – высота окна в пикселях.

Для представления информации о потоках в WMI используется класс Win32_Thread.

Основные свойства класса Win32_Thread:

ElapsedTime – общее время выполнения выделенное потоку;

Priority – динамический приоритет потока;

PriorityBase – базовый приоритет потока;

ProcessHandle – идентификатор процесса, создавшего поток;

ThreadState – текущее состояние потока:

0 – Initialized – создание,

1 – Ready – готовность,

2 – Running – выполнение,

3 – Standby – поток выбран для выполнения,

4 – Terminated – завершение,

5 – Waiting – ожидание,

6 – Transition – ожидание освобождения стека ядра,

7 – Unknown – неизвестное состояние;

ThreadWaitReason – причина ожидания (определено при ThreadState=6).

Рассмотрим использование некоторых методов класса Win32_Process на примерах. В листингах 3 и 4 приведены примеры сценариев создания процесса с помощью метода Create(). В листинге 5 приведен пример сценария уничтожающего все процессы "notepad.exe" с помощью метода Terminate().

Листинг 3. Запуск процесса “notepad.exe”

set obj = GetObject("WinMgmts:Win32_Process")

err = obj.Create("notepad.exe", null, _

null, ProcessId)

В первой строке этого сценария получаем доступ к классу Win32_Process. Во второй строке создается новый процесс "notepad.exe". После создания процесса в переменной будет ProcessId содержаться идентификатор нового процесса.

Листинг 4. Запуск процесса “notepad.exe” с указанием начальных параметров запуска

set WMI = GetObject("WinMgmts:")

set objStartup = WMI.Get("Win32_ProcessStartup")

set objConfig = objStartup.SpawnInstance_

objConfig.ShowWindow = 3

set objProcess = WMI.Get ("Win32_Process")

err = objProcess.Create("notepad.exe", null, _

objConfig, ProcessId)

Здесь во второй строке с помощью метода SwbemServices.Get() получаем указатель на объект SwbemObject соответствующий классу Win32_ProcessStartup. Далее, с помощью метода SpawnInstance_() объекта SwbemObject создается новый объект соответствующего класса. Затем задается свойство ShowWindow этого объекта и создается новый процесс “notepad.exe”.

Листинг 5. Удаление всех процессов “notepad.exe”

set WMI = GetObject("WinMgmts:")

set objs = WMI.ExecQuery _

("SELECT * FROM Win32_Process " & _

"WHERE Name = 'notepad.exe'")

for each obj in objs

obj.Terminate()

next

В строке 2 данного примера используется метод ExecQuery объекта SwbemServices. Данный метод с помощью запроса на языке WQL (WMI Query Language), который является подмножеством стандартного языка ANSI SQL, формирует коллекцию экземпляров класса Win32_Process. Далее в цикле for для каждого объекта из этой коллекции выполняется метод Terminate().