
- •Введение
- •1. Требования к курсовой работе
- •2. Основные этапы выполнения курсовой работы
- •3. Требования к оформлению курсовой работы
- •4. Теоретические сведения
- •4.1 Основы технологии Windows Management Instrumentation
- •4.1.1 Введение
- •4.1.2 Работа с процессами и потоками в wmi
- •4.1.3 Обработка событий в wmi
- •4.1.4 Сбор информации о памяти
- •4.1.5 Планирование заданий
- •4.1.6 Работа с файловой системой
- •4.2.1 Введение
- •4.2.2 Инициализация com
- •4.2.3 Создание подключения к пространству имен wmi
- •4.2.4 Установка уровней безопасности для wmi подключения
- •4.2.5 Реализация функциональности приложения
- •4.2.6 Очистка и корректное завершение wmi приложения
- •4.3 Основные понятия технологии ole-автоматизации
- •4.4 Примеры сценариев wsh использующих ole-автоматизацию
- •5. Задания на курсовую работу по дисциплине «Системное программное обеспечение»
- •Литература
- •Приложение а
- •Оценка ________________ Дата защиты ________________ донецк - ДонНту – 200_ Приложение б
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().