Função ZwQueryInformationProcess

[ZwQueryInformationProcess pode estar 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

NTSTATUS WINAPI ZwQueryInformationProcess(
  _In_      HANDLE           ProcessHandle,
  _In_      PROCESSINFOCLASS ProcessInformationClass,
  _Out_     PVOID            ProcessInformation,
  _In_      ULONG            ProcessInformationLength,
  _Out_opt_ PULONG           ReturnLength
);

Parâmetros

ProcessHandle [in]

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

ProcessInformationClass [in]

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.
É melhor usar 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 de anel 3.
É melhor usar 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).
É melhor usar a função IsWow64Process para obter essas informações.
ProcessImageFileName
27
Recupera um valor de UNICODE_STRING que contém o nome do arquivo de imagem para o processo.
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 Windows 8.1, IsProcessCritical deve ser usado.
ProcessProtectionInformation
61
Recupera um valor BYTE que indica o tipo de processo protegido e o signatário do processo protegido.

 

ProcessInformation [out]

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 valor 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 retornaria. 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 retornaria 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. É melhor 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 for diferente de zero, o processo será executado em um ambiente WOW64; caso contrário, se o valor for igual a zero, o processo não será executado em um ambiente WOW64.

É melhor usar a função IsWow64Process 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.

PS_PROTECTION

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

typedef struct _PS_PROTECTION {
    union {
        UCHAR Level;
        struct {
            UCHAR Type   : 3;
            UCHAR Audit  : 1;                  // Reserved
            UCHAR Signer : 4;
        };
    };
} PS_PROTECTION, *PPS_PROTECTION;

Os três primeiros bits contêm o tipo de processo protegido:

typedef enum _PS_PROTECTED_TYPE {
    PsProtectedTypeNone = 0,
    PsProtectedTypeProtectedLight = 1,
    PsProtectedTypeProtected = 2
} PS_PROTECTED_TYPE, *PPS_PROTECTED_TYPE;

Os quatro primeiros bits contêm o signatário do processo protegido:

typedef enum _PS_PROTECTED_SIGNER {
    PsProtectedSignerNone = 0,
    PsProtectedSignerAuthenticode,
    PsProtectedSignerCodeGen,
    PsProtectedSignerAntimalware,
    PsProtectedSignerLsa,
    PsProtectedSignerWindows,
    PsProtectedSignerWinTcb,
    PsProtectedSignerWinSystem,
    PsProtectedSignerApp,
    PsProtectedSignerMax
} PS_PROTECTED_SIGNER, *PPS_PROTECTED_SIGNER;

ProcessInformationLength [in]

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

ReturnLength [out, opcional]

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 , mas se o buffer for muito pequeno, esse será o tamanho mínimo do buffer necessário para receber as informações com êxito.

Valor retornado

Retorna um código de erro ou êxito NTSTATUS.

Os formulários e a significância dos códigos de erro NTSTATUS estão listados no arquivo de cabeçalho Ntstatus.h disponível no DDK e são descritos na documentação do DDK em Kernel-Mode Driver Architecture/Design Guide/Driver Programming Techniques/Logging Errors.

Comentários

A função ZwQueryInformationProcess e as estruturas retornadas são internas para o sistema operacional e estão 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 ZwQueryInformationProcess, acesse a função por meio da vinculação dinâmica em tempo de execução. Isso dá ao 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 nenhuma biblioteca de importação associada. Você deve usar as funções LoadLibrary e GetProcAddress para vincular dinamicamente a Ntdll.dll.

Requisitos

Requisito Valor
Cliente mínimo com suporte
Windows XP [somente aplicativos da área de trabalho]
Servidor mínimo com suporte
Windows Server 2003 [somente aplicativos da área de trabalho]
DLL
Ntdll.dll

Confira também

CheckRemoteDebuggerPresent

GetProcessId

IsDebuggerPresent

IsWow64Process