Compartilhar via


Função NtQueryInformationProcess (winternl.h)

[NtQueryInformationProcess pode ser alterado ou indisponível em versões futuras do Windows. Os aplicativos devem usar as funções alternativas listadas neste tópico.]

Recupera informações sobre o processo especificado.

Sintaxe

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

Parâmetros

[in] ProcessHandle

Um identificador para o processo para o qual as informações devem ser recuperadas.

[in] ProcessInformationClass

O tipo de informações de processo a serem recuperadas. Esse parâmetro pode ser um dos seguintes valores da enumeração PROCESSINFOCLASS .

Valor Significado
ProcessBasicInformation
0
Recupera um ponteiro para uma estrutura PEB que pode ser usada para determinar se o processo especificado está sendo depurado e um valor exclusivo usado pelo sistema para identificar o processo especificado.

Use as funções CheckRemoteDebuggerPresent e GetProcessId para obter essas informações.

ProcessDebugPort
7
Recupera um valor DWORD_PTR que é o número da porta do depurador para o processo. Um valor diferente de zero indica que o processo está sendo executado sob o controle de um depurador anel 3.

Use a função CheckRemoteDebuggerPresent ou IsDebuggerPresent .

ProcessWow64Information
26
Determina se o processo está em execução no ambiente WOW64 (WOW64 é o emulador x86 que permite que aplicativos baseados em Win32 sejam executados no Windows de 64 bits).

Use a função IsWow64Process2 para obter essas informações.

ProcessImageFileName
27
Recupera um valor UNICODE_STRING que contém o nome do arquivo de imagem para o processo.

Use a função QueryFullProcessImageName ou GetProcessImageFileName para obter essas informações.

ProcessBreakOnTermination
29
Recupera um valor ULONG que indica se o processo é considerado crítico.
Nota Esse valor pode ser usado a partir do Windows XP com SP3. A partir de Windows 8.1, IsProcessCritical deve ser usado.
 
ProcessTelemetryIdInformation
64

Recupera um valor PROCESS_TELEMETRY_ID_INFORMATION_TYPE que contém metadados sobre um processo.

ProcessSubsystemInformation
75
Recupera um valor SUBSYSTEM_INFORMATION_TYPE que indica o tipo de subsistema do processo. O buffer apontado pelo parâmetro ProcessInformation deve ser grande o suficiente para conter uma única enumeração SUBSYSTEM_INFORMATION_TYPE .

[out] ProcessInformation

Um ponteiro para um buffer fornecido pelo aplicativo de chamada no qual a função grava as informações solicitadas. O tamanho das informações gravadas varia dependendo do tipo de dados do parâmetro ProcessInformationClass :

PROCESS_BASIC_INFORMATION

Quando o parâmetro ProcessInformationClass é ProcessBasicInformation, o buffer apontado pelo parâmetro ProcessInformation deve ser grande o suficiente para manter uma única estrutura PROCESS_BASIC_INFORMATION com o seguinte layout:

typedef struct _PROCESS_BASIC_INFORMATION {
    NTSTATUS ExitStatus;
    PPEB PebBaseAddress;
    ULONG_PTR AffinityMask;
    KPRIORITY BasePriority;
    ULONG_PTR UniqueProcessId;
    ULONG_PTR InheritedFromUniqueProcessId;
} PROCESS_BASIC_INFORMATION;
Campo Significado
ExitStatus Contém o mesmo valor que GetExitCodeProcess retorna. No entanto, o uso de GetExitCodeProcess é preferível para maior clareza e segurança.
PebBaseAddress Aponta para uma estrutura PEB .
AffinityMask Pode ser convertido em um DWORD e contém o mesmo valor que GetProcessAffinityMask retorna para o lpProcessAffinityMask parâmetro .
Basepriority Contém a prioridade do processo, conforme descrito em Prioridades de Agendamento.
UniqueProcessId Pode ser convertido em um DWORD e contém um identificador exclusivo para esse processo. Recomendamos usar a função GetProcessId para recuperar essas informações.
InheritedFromUniqueProcessId Pode ser convertido em um DWORD e contém um identificador exclusivo para o processo pai.

ULONG_PTR

Quando o parâmetro ProcessInformationClass é ProcessWow64Information, o buffer apontado pelo parâmetro ProcessInformation deve ser grande o suficiente para manter um ULONG_PTR. Se esse valor não for zero, o processo será executado em um ambiente WOW64. Caso contrário, o processo não está em execução em um ambiente WOW64.

Use a função IsWow64Process2 para determinar se um processo está em execução no ambiente WOW64.

UNICODE_STRING

Quando o parâmetro ProcessInformationClass é ProcessImageFileName, o buffer apontado pelo parâmetro ProcessInformation deve ser grande o suficiente para manter uma estrutura UNICODE_STRING , bem como a própria cadeia de caracteres. A cadeia de caracteres armazenada no membro Buffer é o nome do arquivo de imagem.

Se o buffer for muito pequeno, a função falhará com o código de erro STATUS_INFO_LENGTH_MISMATCH e o parâmetro ReturnLength será definido como o tamanho do buffer necessário.

[in] ProcessInformationLength

O tamanho do buffer apontado pelo parâmetro ProcessInformation , em bytes.

[out, optional] ReturnLength

Um ponteiro para uma variável na qual a função retorna o tamanho das informações solicitadas. Se a função tiver sido bem-sucedida, esse será o tamanho das informações gravadas no buffer apontado pelo parâmetro ProcessInformation (se o buffer for muito pequeno, esse será o tamanho mínimo do buffer necessário para receber as informações com êxito).

Retornar valor

A função retorna um código de erro ou êxito NTSTATUS.

Os formulários e a significância dos códigos de erro NTSTATUS são listados no arquivo de cabeçalho Ntstatus.h disponível no DDK. Consulte Erros de registro em log para obter mais detalhes.

Comentários

A função NtQueryInformationProcess e as estruturas retornadas são internas para o sistema operacional e sujeitas a alterações de uma versão do Windows para outra. Para manter a compatibilidade do aplicativo, é melhor usar funções públicas mencionadas na descrição do parâmetro ProcessInformationClass .

Se você usar NtQueryInformationProcess, acesse a função por meio de vinculação dinâmica em tempo de execução. Isso dá ao seu código a oportunidade de responder normalmente se a função tiver sido alterada ou removida do sistema operacional. No entanto, as alterações de assinatura podem não ser detectáveis.

Essa função não tem biblioteca de importação associada. Você deve usar as funções LoadLibrary e GetProcAddress para vincular dinamicamente a Ntdll.dll.

Requisitos

Requisito Valor
Plataforma de Destino Windows
Cabeçalho winternl.h
Biblioteca ntdll.lib
DLL ntdll.dll

Confira também

CheckRemoteDebuggerPresent

GetProcessId

IsDebuggerPresent

IsWow64Process

IsWow64Process2