WINE和Windows命名管道

时间:2011-12-13 19:54:42

标签: named-pipes wine

这是我的问题: 我有一个闭源的第三方Win32应用程序,它通过命名管道充当其他程序的服务器,即它希望它的客户端像这样做:

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

此应用程序在WINE中运行完美,但我无法与之通信。所以这是我的问题:

当要求打开烟斗时,WINE究竟做了什么?比方说,它是否将它映射到〜/ .wine /或其中的某个FIFO文件?是否有任何方式与Linux应用程序中的此类程序进行通信?谷歌对此一无所知。

谢谢。

2 个答案:

答案 0 :(得分:4)

命名管道由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服务器创建的匿名管道,一端发送到管道服务器,一端发送到管道客户端。

答案 1 :(得分:3)

葡萄酒官方wiki中的

Named Pipes

这篇文章也有帮助:http://lkcl.net/namedpipes/namedpipes-emulation.txt