Partilhar via


Função NtOpenThreadToken (ntifs.h)

A rotina de 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 especificando os tipos de acesso solicitados ao token de acesso. Esses tipos de acesso solicitados são comparados com a lista de controle de acesso discricionário do token (DACL) para determinar quais direitos de acesso são concedidos ou negados.

[in] OpenAsSelf

Valor booliano que especifica se a verificação de acesso deve ser feita no contexto de segurança da chamada de thread NtOpenThreadToken ou no contexto de segurança do processo para o thread de chamada.

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

[out] TokenHandle

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

Valor de retorno

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

Código de retorno Descrição
STATUS_ACCESS_DENIED
ThreadHandle não tinha acesso THREAD_QUERY_INFORMATION.
STATUS_CANT_OPEN_ANONYMOUS O cliente solicitou o nível de representação SecurityAnonymous. No entanto, não é possível abrir um token anônimo. 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.

Observações

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 especificar 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 versões de uma rotina dos Serviços de 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 de serviços do sistema nativo.

Requisitos

Requisito Valor
de cliente com suporte mínimo Windows XP
cabeçalho ntifs.h
biblioteca NtosKrnl.lib
de DLL NtosKrnl.exe

Consulte também

ACCESS_MASK

de ACL

NtOpenThreadTokenEx

PsDereferencePrimaryToken

SECURITY_IMPERSONATION_LEVEL

ZwClose

ZwOpenProcessTokenEx