RpcImpersonateClient 함수(rpcdce.h)

클라이언트 원격 프로시저 호출을 처리하는 서버 스레드는 RpcImpersonateClient 함수를 호출하여 활성 클라이언트를 가장할 수 있습니다.

구문

RPC_STATUS RpcImpersonateClient(
  RPC_BINDING_HANDLE BindingHandle
);

매개 변수

BindingHandle

클라이언트에 대한 바인딩을 나타내는 서버의 바인딩 핸들입니다. 서버는 이 핸들로 표시된 클라이언트를 가장합니다. 값이 0으로 지정된 경우 서버는 이 서버 스레드에서 제공하는 클라이언트를 가장합니다.

반환 값

의미
RPC_S_OK
호출이 성공했습니다.
RPC_S_NO_CALL_ACTIVE
이 서버 스레드에서 활성 상태인 클라이언트가 없습니다.
RPC_S_CANNOT_SUPPORT
함수는 운영 체제, 전송 또는 이 보안 하위 시스템에 대해 지원되지 않습니다.
RPC_S_INVALID_BINDING
바인딩 핸들이 잘못되었습니다.
RPC_S_WRONG_KIND_OF_BINDING
이것은 작업에 대한 잘못된 종류의 바인딩이었습니다.
RPC_S_NO_CONTEXT_AVAILABLE
서버에 클라이언트를 가장할 수 있는 권한이 없습니다.
 
참고 유효한 오류 코드 목록은 RPC 반환 값을 참조하세요.
 

설명

다중 스레드 애플리케이션에서 RpcImpersonateClient 에 대한 호출이 다른 클라이언트 스레드에 대한 핸들을 사용하는 경우 가장을 종료하려면 해당 스레드에 대한 핸들을 사용하여 RpcRevertToSelfEx 를 호출해야 합니다.

검사 가장하는 모든 함수는 이 함수(RPC Server)의 호출자에게 SeImpersonatePrivilege 권한이 있는지 여부를 확인합니다. 호출자에게 SeImpersonatePrivilege가 있거나 인증된 ID가 이 함수의 호출자 ID와 동일한 경우 요청된 가장이 허용됩니다. 그렇지 않으면 가장은 식별 수준에서만 성공합니다.

Windows XP/2000/NT: SeImpersonatePrivilege 권한은 Windows XP sp2(서비스 팩 2)가 있는 때까지 지원되지 않습니다.

보안 설명

어떤 이유로든 RpcImpersonateClient 에 대한 호출이 실패하면 클라이언트 연결이 가장되지 않고 클라이언트 요청이 프로세스의 보안 컨텍스트에서 수행됩니다. 프로세스가 LocalSystem과 같은 높은 권한의 계정으로 실행되거나 관리 그룹의 구성원으로 실행되는 경우 사용자는 그렇지 않으면 허용되지 않는 작업을 수행할 수 있습니다. 따라서 항상 호출의 반환 값을 검사 것이 중요하며, 실패할 경우 오류를 발생시키고 클라이언트 요청을 계속 실행하지 마세요.

요구 사항

   
지원되는 최소 클라이언트 Windows 2000 Professional[데스크톱 앱만]
지원되는 최소 서버 Windows 2000 Server[데스크톱 앱만]
대상 플랫폼 Windows
헤더 rpcdce.h
라이브러리 Rpcrt4.lib
DLL Rpcrt4.dll

추가 정보

클라이언트 가장(Client Impersonation)

RpcRevertToSelf