Класс Win32_Process — работа с процессами

Класс Win32_Process — работа с процессами Объектная модель Windows Management Instrumentation

Класс Win32_Process служит для работы с процессами Windows. С его помощью можно получить обширный список параметров заданного процесса или целой группы. А также получить имя учетной записи и ее идентификатор, создать новый процесс, завершить заданный, изменить приоритет и многое другое.

Сначала я приведу вам описание класса Win32_Process, а потом покажу примеры с его использованием.

Свойства класса Win32_Process

Caption – Содержит описание процесса (короткая форма).

CommandLine – Содержит полный путь к приложению (если оно существует), которое отвечает за запуск процесса.

CreationClassName – имя класса, который создал процесс, как правило – Win32_Process

CreationDate – хранит в себе значение в формате дата, собственно время начала запуска процесса

CSCreationClassName – как и свойство CreationClassName выводит имя класса.

CSName – данное свойство позволяет получить имя компьютера, на котором запущен процесс.

Description — Содержит описание процесса (полная форма).

ExecutablePath – фактически, как и свойство CommandLine, хранит полный путь к исполняемому файлу процесса.

ExecutionState – это свойство не нашло реализации и всегда возвращает пустое значение (null)

Handle – описатель процесса, фактически содержит такое же значение, как и свойство ProcessID

HandleCount – количественное значение дескрипторов, которые открыты в данный момент текущим процессом.

InstallDate – дата создания объекта, объект может быть создан и без записи значения в это свойство, тогда свойство вернет null

KernelModeTime – время работы  в режиме ядра

UserModeTime – время работы в пользовательском режиме, данные свойства, как и KernelModeTime позволяют определить загрузку процессора заданным процессом.

MaximumWorkingSetSize — Максимально возможный размер рабочего набора процесса (рабочий набор процесса — это набор страниц, доступных процессу в физической оперативной памяти)

MinimumWorkingSetSize — Минимально возможный размер рабочего набора процесса

Name – свойство хранит имя процесса и как правило, совпадает со значением свойства Caption.

OSCreationClassName – вернет имя класса.

OSName – содержит имя ОС

OtherOperationCount — Число выполненных операций ввода/вывода, отличных от операции чтения или записи

OtherTransferCount — Размер данных, переданных в процессе выполнения операций, отличных от операции чтения или записи.

PageFaults – количество ошибок, которые возникают при обращении к блоку памяти.

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

ParentProcessID – свойство позволяет получить идентификатор родительского процесса (того, что создал текущий процесс).

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

PeakVirtualSize — Максимальное значение размера виртуального адресного пространства, что использовалось процессом единовременно.

PeakWorkingSetSize — Максимальное значение размера рабочего набора процесса за все время работы

Priority – данное свойство позволяет узнать приоритет процесса, оно может принимать значение от 0 (минимум) до 31(максимум).

ProcessID – собственно, идентификатор процесса, в большинстве случаев, именно данный параметр служит для определения процесса, так как является всегда уникальным из целого списка.

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

ReadTransferCount — размер прочитанных данных

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

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

WindowsVersion – версия сборки ОС.

WorkingSetSize — Размер памяти в байтах, который нужно для успешного выполнения процесса в ОС, которая использует страничную организацию памяти

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

WriteTransferCount — Размер записанных данных

Методы класса Win32_Process

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

Create(CommandLine, CurrentDirectory, ProcessStartupInformation, ProcessId) – данный метод позволяет создать новый процесс. Метод вернет значение 0 (при успехе) или код ошибки. Как видим методу передаются 4 параметры, первые три являются входящими, а четвертый (ProcessId) – будет хранить идентификатор процесса, присвоенный системой.

CommandLine – путь к файлу, который породит процесс

CurrentDirectory – рабочий каталог, который, используемый созданным процессом, при отсутствии данного параметра, будет приниматься значение из параметра CommandLine.

ProcessStartupInformation — начальная конфигурация процесса (объект класса Win32_ProcessStartup), при отсутствии параметра будет приниматься пустая строка ("").

GetOwner(User, Domain) – данный метод полезен тем, что позволяет получить имя пользователя (User) создавшего процесс и имя домена в котором запущен текущий процесс (Domain). Стоит обратить внимание, что не важно, какие имена переменных передаются методу. Схема вызова метода GetOwner для языка vbscript и jscript разная, как это происходит мы рассмотрим ниже.

GetOwnerSid(Sid) – метод принимает всего один параметр, в котором будет храниться идентификатор безопасности (Security IDentifier, SID) владельца процесса

SetPriority(Priority) – метод позволяет задать приоритет процесса. Параметр Priority принимает следующие значения: 64 (низкий), 16 384 (ниже среднего), 32 (средний), 32 768 (выше среднего), 128 (высокий), 256 (процесс будет выполняться в реальном времени – может подвесить систему)

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

Хорошо, теорию прошли, теперь можно и попрактиковаться.

Получаем имя процесса, SID и имя домена/пользователя (класс Win32_Process, язык JScript)

//----------------------------------------------------// Получаем имя процесса, SID и имя домена/пользователя// класс Win32_Process// Win32-Process-list.js//---------------------------------------------------- var objWMI, colItems, objItem, output, output_SID;var list ="Список процессов Windowsnn"; // получаем доступ к пространству имен WMIobjWMI = GetObject("winmgmts:\\.\root\cimv2");//Формируем коллекцию процессов с помощью класса Win32_ProcesscolItems =new Enumerator(objWMI.ExecQuery("Select * from Win32_Process")); // начинаем перебор коллекцииfor(;!colItems.atEnd(); colItems.moveNext()){     objItem = colItems.item();      output = objItem.ExecMethod_("GetOwner");     output_SID = objItem.ExecMethod_("GetOwnerSid");     list += objItem.Name+"tt"+ output_SID.Sid  +"tt"+ output.Domain+"\"+ output.User+"n";} ShowInNotepad(list); //Функция для открытия файла с данными класса Win32_Processfunction ShowInNotepad(StrToFile){var temp_file, txt_file     //Ссылка на объект FileSystemObject    var FSO = WScript.CreateObject("Scripting.FileSystemObject");     // //Ссылка на объект WScript.Shell     var WshShell = WScript.CreateObject("WScript.Shell");     // Путь к временному файлу    temp_file = WshShell.ExpandEnvironmentStrings("%TEMP%")+"\"+ FSO.GetTempName();     //Создаем временный файл    txt_file = FSO.CreateTextFile(temp_file);     // Записываем данные    txt_file.WriteLine(StrToFile);     // Закрываем файл    txt_file.Close();     // Открываем документ программой wordpad.exe    WshShell.Run("wordpad.exe "+ temp_file);}

Сперва происходит подключение кпространству имен WMI CIMv2 с помощью функции GetObject, результат будет храниться в переменной objWMI. Видим, что для экранизации косой черты, мы ее прописываем дважды. Далее нам нужно обработать коллекцию, которая возвращается после вызова класса Win32_Process. В языке jscript для обработки коллекции служит встроенный объект Enumerator (смотри статью “Урок 17 по JScript: Enumerator — объект для работы с коллекциями”). Далее идет использования цикла for для перебора всех элементов коллекции. В цикле мы вызываем функцию GetOwner (она вернет значение в переменную output, которая хранит код выхода и через которую мы получаем имя домена и пользователя) и GetOwnerSid (она вернет значение в переменную output_SID, которая хранит код выхода и через которую мы получаем значение SID) через метод ExecMethod_. Я не делал проверки, то есть, если переменные output или output_SID возвращают ноль, значит, запрос прошел удачно, иначе, мы получим пустое значение null. Весь список записывается в переменную list. Далее происходит вызов функции ShowInNotepad, в которой данные записываются во временный файл, и который потом открывается с помощью программы wordpad.exe.

Получаем имя процесса, SID и имя домена/пользователя (класс Win32_Process, язык JScript)

'----------------------------------------------------' Получаем имя процесса, SID и имя домена/пользователя' класс Win32_Process' Win32-Process-list.vbs'---------------------------------------------------- dim objWMI, colItems, objItem, list list = "Список процессов Windows" & vbCrLf ' получаем доступ к пространству имен WMIset objWMI = GetObject("winmgmts:\.rootcimv2")'Формируем колkекцию процессов с помощью класса Win32_Processset colItems = objWMI.ExecQuery("Select * from Win32_Process"' начинаем перебор колkекцииForEach objItem in colItems     objItem.GetOwner strUser, strDomain     objItem.GetOwnerSid strSID     list = list & objItem.Name & vbTab & vbTab & strSID  & vbTab & vbTab & strDomain & "" & strUser & vbCrLfnext ShowInNotepad(list) 'Процедура для открытия файла с данными класса Win32_ProcessSub ShowInNotepad(StrToFile)dim temp_file, txt_file, FSO, WshShell     'Ссылка на объект FileSystemObject    set FSO = WScript.CreateObject("Scripting.FileSystemObject")     ' 'Ссылка на объект WScript.Shell     set WshShell = WScript.CreateObject("WScript.Shell")    temp_file = WshShell.ExpandEnvironmentStrings("%TEMP%") & "" & FSO.GetTempName    Set txt_file = FSO.CreateTextFile(temp_file)    txt_file.WriteLine(StrToFile)    txt_file.Close    WshShell.Run "wordpad.exe " & temp_fileEndSub

Скачать архив с примерами

Тут стоит обратить внимание на следующую особенность: Вызов методов GetOwner и GetOwnerSid происходит через переменную objItem а не через функцию ExecMethod_ как в примере на jscript. Также видим, что переменные strSID, strDomain и strUser мы указали как параметры, то есть, мы могли указать и другие названия переменных.

Оцените статью
Технологии программирования и ведение блога
Добавить комментарий