Função NtOpenThreadToken (ntifs.h)

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

Sintaxe

__kernel_entry NTSYSCALLAPI NTSTATUS NtOpenThreadToken(
  [in]  HANDLE      ThreadHandle,
  [in]  ACCESS_MASK DesiredAccess,
  [in]  BOOLEAN     OpenAsSelf,
  [out] PHANDLE     TokenHandle
);

Parâmetros

[in] ThreadHandle

Manipule para o thread cujo token de acesso deve ser aberto. O identificador deve ter acesso THREAD_QUERY_INFORMATION. Use a macro NtCurrentThread para especificar o thread atual.

[in] DesiredAccess

ACCESS_MASK estrutura que especifica os tipos solicitados de acesso 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 direitos de acesso são concedidos ou negados.

[in] OpenAsSelf

Valor booliano que especifica se o marcar de acesso deve ser feito no contexto de segurança do thread que chama NtOpenThreadToken ou no contexto de segurança do processo para o thread de chamada.

Se esse parâmetro for FALSE, o marcar de acesso será executado usando o contexto de segurança para o thread de chamada. Se o thread estiver representando um cliente, esse contexto de segurança poderá ser o de um processo do cliente. Se esse parâmetro for TRUE, o marcar de acesso será feito usando o contexto de segurança do processo para o thread de chamada.

[out] TokenHandle

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

Retornar valor

NtOpenThreadToken retorna STATUS_SUCCESS ou um erro apropriado status. Os possíveis códigos de status de erro incluem o seguinte:

Código de retorno Descrição
STATUS_ACCESS_DENIED
O ThreadHandle não tinha acesso THREAD_QUERY_INFORMATION.
STATUS_CANT_OPEN_ANONYMOUS O cliente solicitou o nível de representação SecurityAnonymous. No entanto, um token anônimo não pode ser aberto. Para obter mais informações, consulte SECURITY_IMPERSONATION_LEVEL.
STATUS_INVALID_HANDLE ThreadHandle não era um identificador válido.
STATUS_NO_TOKEN Foi feita uma tentativa de abrir um token associado a um thread que não representa um cliente no momento.
STATUS_OBJECT_TYPE_MISMATCH ThreadHandle não era um identificador de thread.

Comentários

NtOpenThreadToken abre o token de acesso associado a um thread e retorna um identificador para esse token.

O parâmetro OpenAsSelf permite que um processo de servidor abra o token de acesso para um processo de cliente quando o processo do cliente tiver especificado o nível de representação SecurityIdentification para o tipo enumerado SECURITY_IMPERSONATION_LEVEL . Sem esse parâmetro, o processo de chamada não é capaz de abrir o token de acesso do cliente usando o contexto de segurança do cliente porque é impossível abrir objetos de nível executivo usando o nível de representação SecurityIdentification.

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

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 no modo kernel, as versões NtXxx e ZwXxx de uma rotina dos Serviços do Sistema Nativo do Windows 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 Usando versões Nt e Zw das rotinas dos Serviços de Sistema Nativo.

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows XP
Cabeçalho ntifs.h
Biblioteca NtosKrnl.lib
DLL NtosKrnl.exe

Confira também

ACCESS_MASK

ACL

NtOpenThreadTokenEx

PsDereferencePrimaryToken

SECURITY_IMPERSONATION_LEVEL

ZwClose

ZwOpenProcessTokenEx