WINE и Windows именованные каналы - PullRequest
7 голосов
/ 13 декабря 2011

Вот моя проблема: У меня есть стороннее приложение Win32 с закрытым исходным кодом, которое выступает в роли сервера для других программ по именованным каналам, то есть ожидает, что его клиенты будут выполнять что-то вроде этого:

HANDLE h = CreateFile("\\\\.\\pipe\\$pipe_name$", GENERIC_READ | GENERIC_WRITE, etc...);
// ...
TransactNamedPipe(h, buf, etc...);
// ...
CloseHandle(h);

Это приложение отлично работает в WINE, за исключением того, что я не могу с ним общаться. Итак, вот мой вопрос:

Что именно делает WINE, когда его просят открыть трубу? Скажем, он сопоставляет его с каким-то файлом FIFO в ~ / .wine / или где-нибудь еще? Есть ли какой-либо способ связи с такой программой из приложения Linux? Google ничего об этом не знает.

Спасибо.

Ответы [ 2 ]

4 голосов
/ 14 декабря 2011

Именованные каналы размещаются в процессе сервера WINE. Запросы отправляются в этот процесс клиентами WINE. Например, CreateNamedPipe использует запрос вроде:

    SERVER_START_REQ( open_file_object )
    {
        req->access     = access;
        req->attributes = attr->Attributes;
        req->rootdir    = wine_server_obj_handle( attr->RootDirectory );
        req->sharing    = sharing;
        req->options    = options;
        wine_server_add_data( req, attr->ObjectName->Buffer, attr->ObjectName->Length );
        io->u.Status = wine_server_call( req );
        *handle = wine_server_ptr_handle( reply->handle );
    }

Сервер управляет подключением именованного канала. Как только клиент и сервер соединились, сервер WINE удаляется, отправляя клиенту fd. Я думаю, что этот fd - просто анонимный канал, созданный сервером WINE, один конец которого отправляется на сервер канала, а другой - на клиент канала.

3 голосов
/ 13 декабря 2011

Named Pipes в официальной винной вики

эта статья тоже может помочь: http://lkcl.net/namedpipes/namedpipes-emulation.txt

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