Поделиться через


Функция 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 .

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

Для получения этих сведений используйте функции CheckRemoteDebuggerPresent и GetProcessId .

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

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

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

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

ProcessImageFileName
27
Извлекает значение 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;
Поле Значение
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 структуру, а также саму строку. Строка, хранящейся в элементе Buffer , является именем файла изображения.

Если буфер слишком мал, функция завершается сбоем с кодом ошибки 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 .

Требования

Требование Значение
Целевая платформа Windows
Header winternl.h
Библиотека ntdll.lib
DLL ntdll.dll

См. также раздел

CheckRemoteDebuggerPresent

GetProcessId

IsDebuggerPresent

IsWow64Process

IsWow64Process2