Поделиться через


Функция RpcImpersonateClient (rpcdce.h)

Поток сервера, обрабатывающий вызовы удаленных процедур клиента, может вызывать функцию RpcImpersonateClient для олицетворения активного клиента.

Синтаксис

RPC_STATUS RpcImpersonateClient(
  RPC_BINDING_HANDLE BindingHandle
);

Параметры

BindingHandle

Дескриптор привязки на сервере, представляющий привязку к клиенту. Сервер олицетворяет клиента, указанного этим дескриптором. Если указано нулевое значение, сервер олицетворяет клиента, обслуживаемого этим потоком сервера.

Возвращаемое значение

Значение Значение
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) привилегию SeImpersonatePrivilege. Если вызывающий объект имеет SeImpersonatePrivilege или удостоверение, прошедшее проверку подлинности, совпадает с удостоверением вызывающего объекта этой функции, запрошенное олицетворение разрешено. В противном случае олицетворение будет успешно выполнено только на уровне Идентификация.

Windows XP/2000/NT: Привилегия SeImpersonatePrivilege не поддерживается до windows XP с пакетом обновления 2 (SP2).

Примечания по безопасности

Если вызов RpcImpersonateClient по какой-либо причине завершается сбоем, клиентское подключение не олицетворение и запрос клиента выполняется в контексте безопасности процесса. Если процесс выполняется как учетная запись с высоким уровнем привилегий, например LocalSystem, или как член административной группы, пользователь может иметь возможность выполнять действия, которые в противном случае он был бы запрещен. Поэтому важно всегда проверка возвращаемое значение вызова и в случае сбоя вызвать ошибку; не продолжайте выполнение клиентского запроса.

Требования

   
Минимальная версия клиента Windows 2000 Professional [только классические приложения]
Минимальная версия сервера Windows 2000 Server [только классические приложения]
Целевая платформа Windows
Header rpcdce.h
Библиотека Rpcrt4.lib
DLL Rpcrt4.dll

См. также раздел

Олицетворение клиента

RpcRevertToSelf