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

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

CheckRemoteDebuggerPresent

GetProcessId

IsDebuggerPresent

Iswow64Process