2011-12-13 23 views
5

ここに私の問題があります: 私は閉鎖ソースのサードパーティ製のWin32アプリケーションを持っています。これは名前付きパイプ経由で他のプログラムのサーバーとして機能します。つまり、クライアントは次のようにsmthを実行します。ワインとWindowsの名前付きパイプ

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

このアプリは、私がそれと通信できないことを除いて、ワインで完全に動作します。だからここに私の質問です:

パイプを開くことが要求されたとき、ワインは正確に何をしますか?それは〜/ .wine /のどこかのFIFOファイルにマップしますか? そのようなプログラムとLinuxアプリケーションから通信する方法はありますか? Googleはそれについて何も知らない。

ありがとうございます。 http://lkcl.net/namedpipes/namedpipes-emulation.txt

答えて

2

名前付きパイプはWINEサーバプロセスによってホストされている:ワインの公式のwiki

この記事はあまりにも助けることができるで

+0

これは、Wine環境内でWinアプリケーションと通信することだけが可能であることを意味しますか?私はこの環境とネイティブLinuxとの間の "壁を壊す"方法を理解していません。 – ScumCoder

+0

はい、パイプにアクセスするには、何らかの方法でWINEサーバーと話をしなければなりません。 –

+0

ありがとうございます、私は何ができるかを見ていきます。 – ScumCoder

2

Named Pipes。リクエストは、WINEクライアントによってこのプロセスに送信されます。サーバが名前付きパイプを接続管理

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); 
    } 

:たとえば、CreateNamedPipeは次のように要求を使用しています。クライアントとサーバーが接続されると、クライアントにfdを送信することで、WINEサーバーが邪魔になりません。私はこのfdは、WINEサーバーによって作成された匿名のパイプで、パイプサーバーに送信され、パイプサーバーに送信されます。

+1

これはリモートパイプです。彼は地元のパイプについて尋ねている。 –

+1

「Named Pipes」(https://wiki.winehq.org/NamedPipes)は空のページになりました。 – Pierre

関連する問題