Função ZwOpenThreadTokenEx (ntifs.h)
A rotina de ZwOpenThreadTokenEx
Sintaxe
NTSYSAPI NTSTATUS ZwOpenThreadTokenEx(
[in] HANDLE ThreadHandle,
[in] ACCESS_MASK DesiredAccess,
[in] BOOLEAN OpenAsSelf,
[in] ULONG HandleAttributes,
[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
[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 ZwOpenThreadTokenEx 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.
[in] HandleAttributes
Atributos para o identificador criado. No momento, há suporte apenas 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 por chamador que recebe um identificador para o token de acesso recém-aberto.
Valor de retorno
ZwOpenThreadTokenEx 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_INVALID_PARAMETER | O HandleAttributes |
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
ZwOpenThreadTokenEx 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 pode 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 ZwOpenThreadTokenEx deve eventualmente ser liberado chamando ZwClose.
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 ZwOpenThreadTokenEx. Isso restringe o uso do identificador retornado por ZwOpenThreadTokenEx 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.
Nota
Se a chamada para a função ZwOpenThreadTokenEx ocorrer no modo de usuário, você deverá usar o nome "NtOpenThreadTokenEx" em vez de "ZwOpenThreadTokenEx".
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 |
da Plataforma de Destino |
Universal |
cabeçalho | ntifs.h (inclua Ntifs.h) |
biblioteca | NtosKrnl.lib |
de DLL |
NtosKrnl.exe |
IRQL | PASSIVE_LEVEL |
regras de conformidade de DDI | HwStorPortProhibitedDIs(storport), PowerIrpDDis(wdm) |
Consulte também
usando versões Nt e Zw das rotinas de serviços do sistema nativo