Я столкнулся с проблемой с WSADuplicateSocket, который я использую для дублирования сокета для использования другим процессом. Работает поиск, когда оба процесса работают под одним и тем же пользователем Windows, но происходит сбой с кодом ошибки 10022 (WSAEINVAL), когда они работают под разными пользователями.
В частности, процесс, вызывающий WSADuplicateSocket, выполняется под учетной записью администратора, а целевой процесс выполняется под системной учетной записью.
При поиске в Интернете я нашел другие ссылки на проблему, но не нашел решений. Кто-нибудь знает способ решить эту проблему?
Вот текущий код:
bool Duplicate(
SOCKET s,
WSAPROTOCOL_INFO* pSocketInfo,
int targetProcessID,
int& errorNum
)
{
memset(pSocketInfo, 0, sizeof(WSAPROTOCOL_INFO));
if (::WSADuplicateSocket(s, targetProcessID, pSocketInfo)
== SOCKET_ERROR)
{
errorNum = ::WSAGetLastError();
return false;
}
return true;
}