Как продублировать сокет для целевого процесса под другим пользователем - PullRequest
1 голос
/ 11 декабря 2008

Я столкнулся с проблемой с 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;
}

Ответы [ 2 ]

1 голос
/ 09 января 2009

MSDN немного неясен по этому вопросу, и у меня нет времени, чтобы проверить это самостоятельно, но, возможно, к дескриптору сокета, как к объекту ядра, прикреплен дескриптор безопасности, который не разрешает доступ к нему кем-либо еще, кроме создателя.

Попробуйте вызвать GetKernelObjectSecurity, чтобы проверить списки ACL, прикрепленные к дескриптору, а затем попробуйте вызвать SetKernelObjectSecurity, чтобы предоставить другим пользователям доступ к дескриптору. Может тогда WSADuplicateSocket будет работать правильно?

1 голос
/ 04 января 2009

может быть, целевой пользователь (система) не имеет прав доступа к сети? Я думаю, что вокруг Windows XP была создана специальная учетная запись службы (сетевая служба) для разделения служб, которым необходим доступ к сети. Вы проверяли свой код для другого пользователя, кроме системного?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...