c++ - 如何在不同用户下为目标进程复制套接字

标签 c++ winapi sockets

我遇到了 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/

相关文章:

c - 在不创建新线程的情况下将调试器附加到进程

Python - 套接字通信,多条消息

c++ - 在 main 之前将内容插入模板类的静态容器中

c++ - 以下 C++ 代码行是什么意思?

c++ - 如何使用离屏 DC 一次渲染所有位图的汇编?

ruby - HTTP协议(protocol): How does one figure out where a site's homepage is located

java - 异步UDP如何在java中从客户端获取ip和端口?

c++ - 可以使用松弛的内存顺序来观察条件吗?

c++ - 为什么 `*this` 解析为子类?

ChangeDisplaySettings 成功但不执行任何操作。我如何让它工作?