WINE和Windows命名管道

7

以下是我的问题: 我有一个闭源的第三方Win32应用程序,通过命名管道作为其他程序的服务器,即它期望其客户端执行以下操作:

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

这个应用在WINE中运行得很完美,但我无法与它通信。所以我的问题是:当请求打开一个管道时,WINE到底会做什么?比如,它会将其映射到某个 ~ / .wine / 中的FIFO文件吗?从Linux应用程序中有任何方式可以与这样的程序进行通信吗?谷歌对此一无所知。谢谢。
2个回答

4

1
这是远程管道。他在询问本地管道。 - Dark Falcon
4
“Named Pipes”(https://wiki.winehq.org/NamedPipes)现在是一个空白页面。 - Pierre

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


这是否意味着只有在Wine环境内才能与Win应用程序通信?我不理解如何“打破”这个环境与本地Linux之间的限制。 - ScumCoder
是的,为了获得对管道的访问权限,您将不得不以某种方式与WINE服务器进行通信。 - Dark Falcon
谢谢,我会尽力而为。 - ScumCoder
最简单的方法可能是编写一个Windows程序并在WINE下运行它,或者从Linux程序轻松地链接到WINE的Windows API。这似乎是最直接的方法,因为您可以使用文档化的接口。 - Dark Falcon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接