Как продублировать сокет для целевого процесса под другим пользователем

Я столкнулся с проблемой с 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;
}
11.12.2008 16:11:43
2 ОТВЕТА

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

1
3.01.2009 23:03:53
Он работает нормально, если оба процесса выполняются под системной учетной записью или оба работают под учетной записью администратора.
k...m 5.01.2009 14:47:27

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

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

1
8.01.2009 22:26:49