WINE和Windows命名管道

Scu*_*der 7 wine named-pipes

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

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

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

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

谢谢.

Dar*_*con 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 );
    }
Run Code Online (Sandbox Code Playgroud)

服务器管理命名管道的连接。一旦客户端和服务器建立连接,WINE 服务器就会通过向客户端发送 fd 来摆脱干扰。我认为这个fd只是WINE服务器创建的一个匿名管道,一端发送到管道服务器,一端发送到管道客户端。