Функция ZwQueryInformationProcess
[ZwQueryInformationProcess может быть изменен или недоступен в будущих версиях Windows. Приложения должны использовать альтернативные функции, перечисленные в этом разделе.]
Извлекает сведения об указанном процессе.
Синтаксис
NTSTATUS WINAPI ZwQueryInformationProcess(
_In_ HANDLE ProcessHandle,
_In_ PROCESSINFOCLASS ProcessInformationClass,
_Out_ PVOID ProcessInformation,
_In_ ULONG ProcessInformationLength,
_Out_opt_ PULONG ReturnLength
);
Параметры
-
ProcessHandle [in]
-
Дескриптор процесса, для которого требуется извлечь сведения.
-
ProcessInformationClass [in]
-
Тип извлекаемой информации о процессе. Этот параметр может быть одним из следующих значений перечисления PROCESSINFOCLASS .
Значение Значение - ProcessBasicInformation
- 0
Извлекает указатель на структуру PEB, с помощью которой можно определить, выполняется ли отладка указанного процесса, и уникальное значение, используемое системой для идентификации указанного процесса.
Для получения этих сведений лучше всего использовать функции CheckRemoteDebuggerPresent и GetProcessId .- ProcessDebugPort
- 7
Извлекает значение DWORD_PTR , которое является номером порта отладчика для процесса. Ненулевое значение указывает, что процесс выполняется под управлением отладчика круга 3.
Лучше всего использовать функцию CheckRemoteDebuggerPresent или IsDebuggerPresent .- ProcessWow64Information
- 26
Определяет, выполняется ли процесс в среде WOW64 (WOW64 — это эмулятор x86, позволяющий приложениям на основе Win32 запускаться в 64-разрядной версии Windows).
Для получения этих сведений лучше всего использовать функцию IsWow64Process .- ProcessImageFileName
- 27
Извлекает значение UNICODE_STRING , содержащее имя файла изображения для процесса. ProcessBreakOnTermination
29Извлекает значение ULONG , указывающее, считается ли процесс критическим.
Примечание: Это значение можно использовать, начиная с Windows XP с пакетом обновления 3 (SP3). Начиная с Windows 8.1 вместо него следует использовать IsProcessCritical.- ProcessProtectionInformation
- 61
Извлекает значение BYTE, указывающее тип защищенного процесса и подписывающий защищенный процесс. -
ProcessInformation [out]
-
Указатель на буфер, предоставляемый вызывающим приложением, в который функция записывает запрошенные сведения. Размер записываемой информации зависит от значения параметра ProcessInformationClass :
-
PROCESS_BASIC_INFORMATION
-
Если параметр ProcessInformationClass имеет значение ProcessBasicInformation, буфер, на который указывает параметр ProcessInformation , должен быть достаточно большим, чтобы вместить одну PROCESS_BASIC_INFORMATION структуру со следующим макетом:
typedef struct _PROCESS_BASIC_INFORMATION { NTSTATUS ExitStatus; PPEB PebBaseAddress; ULONG_PTR AffinityMask; KPRIORITY BasePriority; ULONG_PTR UniqueProcessId; ULONG_PTR InheritedFromUniqueProcessId; } PROCESS_BASIC_INFORMATION;
Поле Значение ExitStatus Содержит то же значение, которое будет возвращать GetExitCodeProcess . Однако для ясности и безопасности предпочтительнее использовать GetExitCodeProcess . PebBaseAddress Указывает на структуру PEB . AffinityMask Может быть приведен к DWORD и содержит то же значение, которое getProcessAffinityMask будет возвращать для lpProcessAffinityMask
параметра .BasePriority Содержит приоритет процесса, как описано в разделе Приоритеты планирования. UniqueProcessId Может быть приведен к DWORD и содержит уникальный идентификатор для этого процесса. Для получения этих сведений лучше всего использовать функцию GetProcessId . InheritedFromUniqueProcessId Может быть приведен к DWORD и содержит уникальный идентификатор родительского процесса. -
ULONG_PTR
-
Если параметр ProcessInformationClass имеет значение ProcessWow64Information, буфер, на который указывает параметр ProcessInformation , должен быть достаточно большим, чтобы вместить ULONG_PTR. Если это ненулевое значение, процесс выполняется в среде WOW64; В противном случае, если значение равно нулю, процесс не выполняется в среде WOW64.
Лучше всего использовать функцию IsWow64Process , чтобы определить, выполняется ли процесс в среде WOW64.
-
UNICODE_STRING
-
Если параметр ProcessInformationClass имеет значение ProcessImageFileName, буфер, на который указывает параметр ProcessInformation , должен быть достаточно большим, чтобы вместить UNICODE_STRING структуру, а также саму строку. Строка, хранящейся в элементе Buffer , является именем файла изображения.
Если буфер слишком мал, функция завершается сбоем с кодом ошибки STATUS_INFO_LENGTH_MISMATCH и параметру ReturnLength присваивается требуемый размер буфера.
-
PS_PROTECTION
-
Если параметр ProcessInformationClass имеет значение ProcessProtectionInformation, буфер, на который указывает параметр ProcessInformation , должен быть достаточно большим, чтобы вместить одну структуру PS_PROTECTION со следующим макетом:
typedef struct _PS_PROTECTION { union { UCHAR Level; struct { UCHAR Type : 3; UCHAR Audit : 1; // Reserved UCHAR Signer : 4; }; }; } PS_PROTECTION, *PPS_PROTECTION;
Первые 3 бита содержат тип защищенного процесса:
typedef enum _PS_PROTECTED_TYPE { PsProtectedTypeNone = 0, PsProtectedTypeProtectedLight = 1, PsProtectedTypeProtected = 2 } PS_PROTECTED_TYPE, *PPS_PROTECTED_TYPE;
Первые 4 бита содержат защищенного подписывателя процесса:
typedef enum _PS_PROTECTED_SIGNER { PsProtectedSignerNone = 0, PsProtectedSignerAuthenticode, PsProtectedSignerCodeGen, PsProtectedSignerAntimalware, PsProtectedSignerLsa, PsProtectedSignerWindows, PsProtectedSignerWinTcb, PsProtectedSignerWinSystem, PsProtectedSignerApp, PsProtectedSignerMax } PS_PROTECTED_SIGNER, *PPS_PROTECTED_SIGNER;
-
-
ProcessInformationLength [in]
-
Размер буфера, на который указывает параметр ProcessInformation , в байтах.
-
ReturnLength [out, optional]
-
Указатель на переменную, в которой функция возвращает размер запрошенной информации. Если функция была успешной, это размер сведений, записанных в буфер, на который указывает параметр ProcessInformation , но если буфер был слишком мал, это минимальный размер буфера, необходимый для успешного получения информации.
Возвращаемое значение
Возвращает код ошибки или успешного выполнения NTSTATUS.
Формы и важность кодов ошибок NTSTATUS перечислены в файле заголовка Ntstatus.h, доступном в DDK, и описаны в документации по DDK в разделе Kernel-Mode Driver Architecture / Design Guide / Driver Programming Techniques / Logging Errors .
Комментарии
Функция ZwQueryInformationProcess и структуры, которые она возвращает, являются внутренними для операционной системы и могут изменяться из одного выпуска Windows в другой. Для обеспечения совместимости приложения лучше использовать общедоступные функции, упомянутые в описании параметра ProcessInformationClass .
Если вы используете ZwQueryInformationProcess, получите доступ к функции с помощью динамической компоновки во время выполнения. Это дает коду возможность корректно реагировать, если функция была изменена или удалена из операционной системы. Однако изменения подписи могут быть недоступны для обнаружения.
У этой функции нет связанной библиотеки импорта. Для динамической связи с Ntdll.dll необходимо использовать функции LoadLibrary и GetProcAddress .
Требования
Требование | Значение |
---|---|
Минимальная версия клиента |
Windows XP [только классические приложения] |
Минимальная версия сервера |
Windows Server 2003 [только классические приложения] |
DLL |
|
См. также раздел