这是我的问题:我有一个闭源的第三方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应用程序与这样的程序进行通信?谷歌对此一无所知.
谢谢.
命名管道由 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服务器创建的一个匿名管道,一端发送到管道服务器,一端发送到管道客户端。