我遇到了 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;
}
最佳答案
也许目标用户(系统)没有访问网络的权限?我认为围绕 windows xp 已经创建了一个特殊的服务帐户(网络服务)来分离需要访问网络的服务。您是否为系统以外的其他用户测试了您的代码?
关于c++ - 如何在不同用户下为目标进程复制套接字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/359891/