GetProcessAffinityMask function (winbase.h)
Retrieves the process affinity mask for the specified process and the system affinity mask for the system.
Syntax
Parameters
A handle to the process whose affinity mask is desired.
This handle must have the PROCESS_QUERY_INFORMATION or PROCESS_QUERY_LIMITED_INFORMATION access right. For more information, see Process Security and Access Rights.
Windows ServerВ 2003 and WindowsВ XP:В В The handle must have the PROCESS_QUERY_INFORMATION access right.
A pointer to a variable that receives the affinity mask for the specified process.
A pointer to a variable that receives the affinity mask for the system.
Return value
If the function succeeds, the return value is nonzero and the function sets the variables pointed to by lpProcessAffinityMask and lpSystemAffinityMask to the appropriate affinity masks.
On a system with more than 64 processors, if the threads of the calling process are in a single processor group, the function sets the variables pointed to by lpProcessAffinityMask and lpSystemAffinityMask to the process affinity mask and the processor mask of active logical processors for that group. If the calling process contains threads in multiple groups, the function returns zero for both affinity masks.
If the function fails, the return value is zero, and the values of the variables pointed to by lpProcessAffinityMask and lpSystemAffinityMask are undefined. To get extended error information, call GetLastError.
Remarks
A process affinity mask is a bit vector in which each bit represents the processors that a process is allowed to run on. A system affinity mask is a bit vector in which each bit represents the processors that are configured into a system.
A process affinity mask is a subset of the system affinity mask. A process is only allowed to run on the processors configured into a system. Therefore, the process affinity mask cannot specify a 1 bit for a processor when the system affinity mask specifies a 0 bit for that processor.
Класс Win32_Process — работа с процессами
Класс 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)
Сперва происходит подключение к пространству имен 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)
Тут стоит обратить внимание на следующую особенность: Вызов методов GetOwner и GetOwnerSid происходит через переменную objItem а не через функцию ExecMethod_ как в примере на jscript. Также видим, что переменные strSID, strDomain и strUser мы указали как параметры, то есть, мы могли указать и другие названия переменных.
Спасибо за внимание. Автор блога Владимир Баталий
Process Explorer v16.32
By Mark Russinovich
Published: April 28, 2020
Download Process Explorer (2.5 MB)
Run now from Sysinternals Live.
Introduction
Ever wondered which program has a particular file or directory open? Now you can find out. Process Explorer shows you information about which handles and DLLs processes have opened or loaded.
The Process Explorer display consists of two sub-windows. The top window always shows a list of the currently active processes, including the names of their owning accounts, whereas the information displayed in the bottom window depends on the mode that Process Explorer is in: if it is in handle mode you’ll see the handles that the process selected in the top window has opened; if Process Explorer is in DLL mode you’ll see the DLLs and memory-mapped files that the process has loaded. Process Explorer also has a powerful search capability that will quickly show you which processes have particular handles opened or DLLs loaded.
The unique capabilities of Process Explorer make it useful for tracking down DLL-version problems or handle leaks, and provide insight into the way Windows and applications work.
Related Links
- Windows Internals Book The official updates and errata page for the definitive book on Windows internals, by Mark Russinovich and David Solomon.
- Windows Sysinternals Administrator’s Reference The official guide to the Sysinternals utilities by Mark Russinovich and Aaron Margosis, including descriptions of all the tools, their features, how to use them for troubleshooting, and example real-world cases of their use.
Download
Download Process Explorer (2.5 MB)
Run now from Sysinternals Live.
Runs on:
- Client: Windows Vista and higher (Including IA64).
- Server: Windows Server 2008 and higher (Including IA64).
Installation
Simply run Process Explorer (procexp.exe).
The help file describes Process Explorer operation and usage. If you have problems or questions please visit the Process Explorer forum on Technet.
Note on use of symbols
When you configure the path to DBGHELP.DLL and the symbol path uses the symbol server, the location of DBGHELP.DLL also has to contain the SYMSRV.DLL supporting the server paths used. See SymSrv documentation or more information on how to use symbol servers.
Learn More
Here are some other handle and DLL viewing tools and information available at Sysinternals:
- The case of the Unexplained. In this video, Mark describes how he has solved seemingly unsolvable system and application problems on Windows.
- Handle — a command-line handle viewer
- ListDLLs — a command-line DLL viewer
- PsList — local/remote command-line process lister
- PsKill — local/remote command-line process killer
- Defrag Tools: #2 — Process Explorer In this episode of Defrag Tools, Andrew Richards and Larry Larsen show how to use Process Explorer to view the details of processes, both at a point in time and historically.
- Windows Sysinternals Primer: Process Explorer, Process Monitor and More Process Explorer gets a lot of attention in the first Sysinternals Primer delivered by Aaron Margosis and Tim Reckmeyer at TechEd 2010.
—>