Функция NtQueryInformationProcess (winternl.h)

[NtQueryInformationProcess может быть изменено или недоступно в будущих версиях Windows. Приложения должны использовать альтернативные функции, перечисленные в этом разделе.]

Извлекает сведения об указанном процессе.

Синтаксис

__kernel_entry NTSTATUS NtQueryInformationProcess(
  [in]            HANDLE           ProcessHandle,
  [in]            PROCESSINFOCLASS ProcessInformationClass,
  [out]           PVOID            ProcessInformation,
  [in]            ULONG            ProcessInformationLength,
  [out, optional] PULONG           ReturnLength
);

Параметры

[in] ProcessHandle

Дескриптор процесса, для которого требуется получить сведения.

[in] ProcessInformationClass

Тип получаемых сведений о процессе. Этот параметр может быть одним из следующих значений из перечисления PROCESSINFOCLASS .

Ценность Meaning
ProcessBasicInformation
0
Извлекает указатель на структуру PEB, которую можно использовать для определения того, выполняется ли отладка указанного процесса, и уникальное значение, используемое системой для идентификации указанного процесса.

Используйте функции CheckRemoteDebuggerPresent и GetProcessId , чтобы получить эти сведения.

ProcessDebugPort
7
Извлекает значение DWORD_PTR , которое является номером порта отладчика для процесса. Значение, отличное от нуля, указывает, что процесс выполняется под контролем отладчика кольца 3.

Используйте функцию CheckRemoteDebuggerPresent или IsDebuggerPresent .

ProcessWow64Information
26
Определяет, выполняется ли процесс в среде WOW64 (WOW64 — эмулятор x86, позволяющий приложениям на основе Win32 работать в 64-разрядной версии Windows).

Используйте функцию IsWow64Process2 для получения этих сведений.

ProcessImageFileName
двадцать семь
Извлекает значение UNICODE_STRING , содержащее имя файла изображения для процесса.

Используйте функцию QueryFullProcessImageName или GetProcessImageFileName , чтобы получить эти сведения.

ProcessBreakOnTermination
29
Извлекает значение ULONG , указывающее, считается ли процесс критически важным.
Заметка Это значение можно использовать начиная с Windows XP с пакетом обновления 3 (SP3). Начиная с Windows 8.1, вместо этого следует использовать IsProcessCritical .
 
ProcessTelemetryIdInformation
64

Извлекает значение PROCESS_TELEMETRY_ID_INFORMATION_TYPE , содержащее метаданные о процессе.

ProcessSubsystemInformation
75
Извлекает значение SUBSYSTEM_INFORMATION_TYPE , указывающее тип подсистемы процесса. Буфер, на который указывает параметр ProcessInformation , должен быть достаточно большим для хранения одного перечисления SUBSYSTEM_INFORMATION_TYPE .

[out] ProcessInformation

Указатель на буфер, предоставленный вызывающим приложением, в которое функция записывает запрошенные сведения. Размер записываемой информации зависит от типа данных параметра 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;
Поле Meaning
ExitStatus Содержит то же значение, что возвращает GetExitCodeProcess . Однако использование GetExitCodeProcess предпочтительнее для ясности и безопасности.
PebBaseAddress Указывает на структуру PEB .
AffinityMask Может быть приведение к DWORD и содержит то же значение, что и GetProcessAffinityMask , возвращаемое для lpProcessAffinityMask параметра.
BasePriority Содержит приоритет процесса, как описано в разделе "Приоритеты планирования".
UniqueProcessId Может быть приведение к DWORD и содержит уникальный идентификатор для этого процесса. Для получения этих сведений рекомендуется использовать функцию GetProcessId .
InheritedFromUniqueProcessId Может быть приведение к DWORD и содержит уникальный идентификатор родительского процесса.

ULONG_PTR

Если параметр ProcessInformationClass является ProcessWow64Information, буфер, на который указывает параметр ProcessInformation , должен быть достаточно большим, чтобы сохранить ULONG_PTR. Если это значение ненулевое, процесс выполняется в среде WOW64. В противном случае процесс не выполняется в среде WOW64.

Используйте функцию IsWow64Process2 , чтобы определить, выполняется ли процесс в среде WOW64.

UNICODE_STRING

Если параметр ProcessInformationClass имеет ProcessImageFileName, буфер, на который указывает параметр ProcessInformation , должен быть достаточно большим, чтобы содержать структуру UNICODE_STRING , а также саму строку. Строка, хранящуюся в элементе буфера , — это имя файла изображения.

Если буфер слишком мал, функция завершается ошибкой с кодом ошибки STATUS_INFO_LENGTH_MISMATCH, а параметр ReturnLength имеет требуемый размер буфера.

[in] ProcessInformationLength

Размер буфера, на который указывает параметр ProcessInformation , в байтах.

[out, optional] ReturnLength

Указатель на переменную, в которой функция возвращает размер запрошенной информации. Если функция была успешно выполнена, это размер сведений, записанных в буфер, на который указывает параметр ProcessInformation (если буфер был слишком мал, это минимальный размер буфера, необходимый для успешного получения информации).

Возвращаемое значение

Функция возвращает код успешного выполнения или ошибки NTSTATUS.

Формы и значение кодов ошибок NTSTATUS перечислены в файле заголовка Ntstatus.h, доступном в DDK. Дополнительные сведения см. в разделе об ошибках ведения журнала .

Замечания

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

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

Эта функция не имеет связанной библиотеки импорта. Для динамической связи с Ntdll.dllнеобходимо использовать функции LoadLibrary и GetProcAddress .

Требования

Требование Ценность
целевая платформа Виндоус
Header winternl.h
Library ntdll.lib
DLL ntdll.dll

См. также

CheckRemoteDebuggerPresent

GetProcessId

IsDebuggerPresent

IsWow64Process

IsWow64Process2