Função NtOpenProcessTokenEx (ntifs.h)

A rotina NtOpenProcessTokenEx abre o token de acesso associado a um processo e retorna um identificador que pode ser usado para acessar esse token.

Sintaxe

__kernel_entry NTSYSCALLAPI NTSTATUS NtOpenProcessTokenEx(
  [in]  HANDLE      ProcessHandle,
  [in]  ACCESS_MASK DesiredAccess,
  [in]  ULONG       HandleAttributes,
  [out] PHANDLE     TokenHandle
);

Parâmetros

[in] ProcessHandle

Manipule para o processo cujo token de acesso deve ser aberto. O identificador deve ter acesso PROCESS_QUERY_INFORMATION. Use a macro NtCurrentProcess , definida em Ntddk.h, para especificar o processo atual.

[in] DesiredAccess

ACCESS_MASK estrutura que especifica os tipos de acesso solicitados ao token de acesso. Esses tipos de acesso solicitados são comparados com a DACL (lista de controle de acesso discricionário) do token para determinar quais acessos são concedidos ou negados.

[in] HandleAttributes

Atributos para o identificador de token de acesso. No momento, há suporte apenas para OBJ_KERNEL_HANDLE. Se o chamador não estiver em execução no contexto do processo do sistema, ele deverá especificar OBJ_KERNEL_HANDLE para esse parâmetro.

[out] TokenHandle

Ponteiro para uma variável alocada pelo chamador que recebe um identificador para o token de acesso recém-aberto.

Retornar valor

NtOpenProcessTokenEx retorna STATUS_SUCCESS ou um erro apropriado status. Possíveis códigos de status de erro incluem o seguinte:

Código de retorno Descrição
STATUS_ACCESS_DENIED ProcessHandle não tinha acesso PROCESS_QUERY_INFORMATION.
STATUS_INSUFFICIENT_RESOURCES Não foi possível alocar um novo identificador de token.
STATUS_INVALID_HANDLE ProcessHandle não era um identificador válido.
STATUS_INVALID_PARAMETER O HandleAttributes especificado não incluiu OBJ_KERNEL_HANDLE.
STATUS_OBJECT_TYPE_MISMATCH ProcessHandle não era um identificador de processo.
STATUS_PRIVILEGE_NOT_HELD O chamador não tem o privilégio (SeSecurityPrivilege) necessário para criar um identificador de token com o acesso especificado no parâmetro DesiredAccess .
STATUS_QUOTA_EXCEEDED A cota de memória do processo não é suficiente para alocar o identificador de token.
STATUS_UNSUCCESSFUL Não foi possível criar o identificador de token.

Comentários

Qualquer identificador obtido chamando NtOpenProcessTokenEx deve eventualmente ser liberado chamando NtClose.

As rotinas de driver executadas em um contexto de processo diferente do processo do sistema devem definir o atributo OBJ_KERNEL_HANDLE para o parâmetro HandleAttributes de NtOpenProcessTokenEx. Isso restringe o uso do identificador retornado por NtOpenProcessTokenEx a processos em execução no modo kernel. Caso contrário, o identificador pode ser acessado pelo processo em cujo contexto o driver está em execução.

Para obter mais informações sobre segurança e controle de acesso, consulte Modelo de segurança do Windows para desenvolvedores de driver e a documentação sobre esses tópicos no SDK do Windows.

Para chamadas de drivers de modo kernel, as versões NtXxx e ZwXxx de uma rotina do Windows Native System Services podem se comportar de forma diferente na maneira como lidam e interpretam parâmetros de entrada. Para obter mais informações sobre a relação entre as versões NtXxx e ZwXxx de uma rotina, consulte Using Nt and Zw Versions of the Native System Services Routines.

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows XP
Plataforma de Destino Universal
Cabeçalho ntifs.h (inclua Ntifs.h)
Biblioteca NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL
Regras de conformidade da DDI HwStorPortProhibitedDDIs, PowerIrpDDis

Confira também

ACCESS_MASK

ACL

PsDereferencePrimaryToken

NtClose

NtOpenThreadTokenEx