【问题标题】:WINE and Windows named pipesWINE 和 Windows 命名管道
【发布时间】:2012-01-19 16:28:45
【问题描述】:

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

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

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

当要求打开管道时,WINE 究竟做了什么?例如,它是否将其映射到 ~/.wine/ 或其他任何地方的某个 FIFO 文件?是否有任何方法可以从 Linux 应用程序与此类程序进行通信? Google 对此一无所知。

谢谢。

【问题讨论】:

    标签: named-pipes wine


    【解决方案1】:

    Named Pipes 在葡萄酒官方维基中

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

    【讨论】:

    【解决方案2】:

    命名管道由 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 app通信?我只是不明白如何在这个环境和原生 Linux 之间“打破壁垒”。
    • 是的,您必须以某种方式与 WINE 服务器通信才能访问管道。
    • 谢谢,我看看我能做什么。
    • 将客户端编写为 Windows 程序并在 WINE 下运行可能是最简单的方法,或者 WINE 中的 Windows API 可以轻松地从 Linux 程序链接到。这些似乎是最直接的方法,因为您可以使用文档化的界面。
    猜你喜欢
    • 2018-07-10
    • 1970-01-01
    • 1970-01-01
    • 2010-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-16
    • 1970-01-01
    相关资源
    最近更新 更多