Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
A função ImpersonateLoggedOnUser permite que o thread de chamada represente o contexto de segurança de um usuário conectado. O usuário é representado por um identificador de token.
Sintaxe
BOOL ImpersonateLoggedOnUser(
[in] HANDLE hToken
);
Parâmetros
[in] hToken
Um identificador para um token de acesso primário ou de representação que representa um usuário conectado. Isso pode ser um identificador de token retornado por uma chamada para funções LogonUser, CreateRestrictedToken, DuplicateToken, DuplicateTokenEx, OpenProcessToken ou OpenThreadToken . Se hToken for um identificador para um token primário, o token deverá ter acesso TOKEN_QUERY e TOKEN_DUPLICATE . Se hToken for um identificador para um token de representação, o token deverá ter acesso TOKEN_QUERY e TOKEN_IMPERSONATE .
Valor de retorno
Se a função for bem-sucedida, o valor retornado não será zero.
Se a função falhar, o valor retornado será zero. Para obter informações de erro estendidas, chame GetLastError.
Observações
A representação dura até que o thread saia ou até que ele chame RevertToSelf.
O thread de chamada não precisa ter privilégios específicos para chamar ImpersonateLoggedOnUser.
Se a chamada para ImpersonateLoggedOnUser falhar, a conexão do cliente não será representada e a solicitação do cliente será feita no contexto de segurança do processo. Se o processo estiver em execução como uma conta altamente privilegiada, como LocalSystem ou como membro de um grupo administrativo, o usuário poderá executar ações que, de outra forma, não seriam permitidas. Portanto, é importante sempre verificar o valor retornado da chamada e, se ela falhar, gerar um erro; não continue a execução da solicitação do cliente.
Todas as funções de representação, incluindo ImpersonateLoggedOnUser , permitem a representação solicitada se uma das seguintes funções for verdadeira:
- O chamador tem o privilégio SeImpersonatePrivilege .
- Um processo (ou outro processo na sessão de logon do chamador) criou o token usando credenciais explícitas por meio da função LogonUser ou LsaLogonUser .
- A identidade autenticada é a mesma que o chamador.
Importante
O token deve ter um nível de representação de SecurityImpersonation ou superior para que a representação seja bem-sucedida. Tokens com níveis SecurityIdentification ou SecurityAnonymous não podem ser usados para representação, mesmo que o chamador tenha SeImpersonatePrivilege. Os tokens SecurityIdentification permitem verificação de identidade e verificações de ACL, mas não permitem a representação.
Requisitos de nível de representação
O comportamento varia de acordo com o nível de representação do token:
- SecurityAnonymous: O servidor não pode obter informações de identidade do cliente e não pode representar o cliente.
- SecurityIdentification: o servidor pode obter a identidade do cliente e executar a validação de acesso, mas não pode representar o cliente. Esse é o nível padrão para muitos cenários.
- SecurityImpersonation: o servidor pode representar o contexto de segurança do cliente no sistema local. Esse é o nível mínimo necessário para que ImpersonateLoggedOnUser tenha êxito.
- SecurityDelegation: o servidor pode representar o cliente em sistemas remotos, bem como localmente.
Windows XP com SP1 e anterior: Não há suporte para o privilégio SeImpersonatePrivilege .
Para obter mais informações sobre representação, consulte Representação do Cliente.
Requirements
| Requirement | Value |
|---|---|
| Cliente mínimo suportado | Windows XP [somente aplicativos da área de trabalho] |
| Servidor mínimo compatível | Windows Server 2003 [somente aplicativos da área de trabalho] |
| da Plataforma de Destino |
Windows |
| Header | securitybaseapi.h (inclua Windows.h) |
| Library | Advapi32.lib |
| de DLL |
Advapi32.dll |
Consulte também
Funções de controle de acesso de cliente/servidor