Função RpcImpersonateClient (rpcdce.h)

Um thread de servidor que está processando chamadas de procedimento remoto do cliente pode chamar a função RpcImpersonateClient para representar o cliente ativo.

Sintaxe

RPC_STATUS RpcImpersonateClient(
  RPC_BINDING_HANDLE BindingHandle
);

Parâmetros

BindingHandle

Identificador de associação no servidor que representa uma associação a um cliente. O servidor representa o cliente indicado por esse identificador. Se um valor igual a zero for especificado, o servidor representará o cliente que está sendo atendido por esse thread de servidor.

Valor retornado

Valor Significado
RPC_S_OK
A chamada foi bem-sucedida.
RPC_S_NO_CALL_ACTIVE
Nenhum cliente está ativo neste thread de servidor.
RPC_S_CANNOT_SUPPORT
Não há suporte para a função para o sistema operacional, o transporte ou esse subsistema de segurança.
RPC_S_INVALID_BINDING
O identificador de associação era inválido.
RPC_S_WRONG_KIND_OF_BINDING
Esse foi o tipo errado de associação para a operação.
RPC_S_NO_CONTEXT_AVAILABLE
O servidor não tem permissão para representar o cliente.
 
Nota Para obter uma lista de códigos de erro válidos, consulte RPC Return Values.
 

Comentários

Em um aplicativo multithreaded, se a chamada para RpcImpersonateClient estiver com um identificador para outro thread de cliente, você deverá chamar RpcRevertToSelfEx com o identificador para esse thread para encerrar a representação.

Todas as funções que representam marcar para determinar se o chamador dessa função (o RPC Server) tem o privilégio SeImpersonatePrivilege. Se o chamador tiver o SeImpersonatePrivilege ou se a identidade autenticada for a mesma que a identidade do chamador dessa função, a representação solicitada será permitida. Caso contrário, a representação terá êxito apenas no nível de Identificação.

Windows XP/2000/NT: O privilégio SeImpersonatePrivilege não tem suporte até o Windows XP com Service Pack 2 (SP2).

Comentários de segurança

Se a chamada para RpcImpersonateClient falhar por qualquer motivo, 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 marcar o valor retornado da chamada e, se falhar, gerar um erro; não continuar a execução da solicitação do cliente.

Requisitos

   
Cliente mínimo com suporte Windows 2000 Professional [somente aplicativos da área de trabalho]
Servidor mínimo com suporte Windows 2000 Server [somente aplicativos da área de trabalho]
Plataforma de Destino Windows
Cabeçalho rpcdce.h
Biblioteca Rpcrt4.lib
DLL Rpcrt4.dll

Confira também

Client Impersonation (em inglês)

RpcRevertToSelf