Функция WSAImpersonateSocketPeer (ws2tcpip.h)

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

Синтаксис

INT WSAAPI WSAImpersonateSocketPeer(
  [in]           SOCKET         Socket,
  [in, optional] const sockaddr *PeerAddr,
  [in]           ULONG          PeerAddrLen
);

Параметры

[in] Socket

Определяет сокет приложения.

[in, optional] PeerAddr

IP-адрес однорангового узла для олицетворения. Для сокетов, ориентированных на подключение, подключенный сокет однозначно идентифицирует одноранговый узел. В этом случае этот параметр игнорируется.

[in] PeerAddrLen

Размер параметра PeerAddress в байтах .

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

Если функция выполняется успешно, возвращаемое значение равно 0. В противном случае возвращается значение SOCKET_ERROR , а конкретный код ошибки можно получить, вызвав WSAGetLastError.

Ниже перечислены некоторые возможные коды ошибок.

Код ошибки Значение
WSAEFAULT
Система обнаружила недопустимый указатель адреса при попытке использовать аргумент указателя вызова. Эта ошибка возвращается, если параметр PeerAddr был указателем NULL .
WSAEAFNOSUPPORT
Указанное семейство адресов не поддерживается.
WSAEMSGSIZE
Переданный буфер был слишком мал.
WSAENOTSOCK
Дескриптор, переданный в параметре Socket , не является допустимым сокетом.

Комментарии

Функция WSAImpersonateSocketPeer предоставляет приложению возможность олицетворения субъекта безопасности, соответствующего одноранговой системе сокета, для выполнения авторизации на уровне приложения. Если маркер однорангового пользователя (олицетворение) доступен, он будет использоваться для олицетворения, в противном случае будет использоваться маркер однорангового компьютера. Функция WSAImpersonateSocketPeer может вызываться только для блокирующих неперекрывающихся сокетов. После выполнения любых проверок авторизации приложение должно вызвать функцию WSARevertImpersonation , чтобы завершить олицетворение.

Для сокетов, ориентированных на подключение, функция WSAImpersonateSocketPeer должна вызываться после установки соединения. Для серверного приложения, используюющего сокеты, ориентированные на подключение, следует вызывать WSAImpersonateSocketPeer после возврата функции accept, AcceptEx или WSAAccept .

Для сокетов без подключения приложение должно вызывать функцию WSAImpersonateSocketPeer сразу после возврата,recvfrom, WSARecv, WSARecvEx, WSARecvFrom или LPFN_WSARECVMSG (WSARecvMsg) для нового однорангового адреса.

Функцию WSAImpersonateSocketPeer можно вызывать несколько раз для одного сокета.

Если не выполняются следующие условия, будет возвращена ошибка.

  • Семейство адресов параметра Socket должно быть AF_INET или AF_INET6.
  • Тип сокета должен быть SOCK_STREAM или SOCK_DGRAM.

Чтобы завершить олицетворение, необходимо вызвать функцию WSARevertImpersonation .

Требования

Требование Значение
Минимальная версия клиента Windows Vista [только классические приложения]
Минимальная версия сервера Windows Server 2008 [только классические приложения]
Целевая платформа Windows
Header ws2tcpip.h
Библиотека Fwpuclnt.lib
DLL Fwpuclnt.dll

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

AcceptEx

Использование расширений secure socket

WSAAccept

WSADeleteSocketPeerTargetName

WSAQuerySocketSecurity

WSARecv

WSARecvEx

WSARecvFrom

LPFN_WSARECVMSG (WSARecvMsg)

WSARevertImpersonation

WSASetSocketPeerTargetName

WSASetSocketSecurity

Платформа фильтрации Windows

Функции API платформы фильтрации Windows

Расширения Winsock Secure Socket

Принять

Recv

recvfrom