0

リモート クライアントから名前付きパイプ サーバーにアクセスできるように設定する方法を教えてください。今まで NamedPipes は同じコンピューターのプロセス間通信にのみ使用できると考えていましたが、http: //msdn.microsoft.com/en-us/library/windows/desktop/aa365150%28v=vs.85%に基づいています29.aspx PIPE_ACCEPT_REMOTE_CLIENTS / PIPE_REJECT_REMOTE_CLIENTS を設定して、リモート コンピューターからのアクセスを許可/禁止することで可能になります。.NET でこの機能をセットアップする簡単な方法が見つかりませんでした。PipeSecurity を何らかの方法で使用できると思いますが、簡単な方法が見つかりませんでした。

私の現在のソリューションでは、現在のマシン上の名前付きパイプにすべてのユーザーにアクセスできます。誰かが私のソリューションを改善して、別のマシンからもアクセスできるようにすることはできますか?

ありがとう。

    public NamedPipeServerStream CreateNamedPipeServer(string pipeName)
    {
            const int BufferSize = 65535; 
            var pipeSecurity = new PipeSecurity();
            pipeSecurity.AddAccessRule(new PipeAccessRule("Users", PipeAccessRights.ReadWrite, AccessControlType.Allow));
            pipeSecurity.AddAccessRule(new PipeAccessRule("Administrators", PipeAccessRights.ReadWrite, AccessControlType.Allow));

            return new NamedPipeServerStream(pipeName, PipeDirection.InOut, countOfServerInstancesToCreate, PipeTransmissionMode.Message, PipeOptions.Asynchronous,
                                                               BufferSize,
                                                               BufferSize);
    }
4

2 に答える 2

0

はい、名前付きパイプはリモート コンピューターとの間でやり取りできます。詳細については、http://msdn.microsoft.com/en-us/library/windows/desktop/aa365590( v=vs.85 ).aspxを参照してください。

名前付きパイプを使用して、同じコンピューター上のプロセス間、またはネットワーク上の異なるコンピューター上のプロセス間の通信を提供できます。

ただし、このオプションは .NET では直接サポートされていません。NamedPipeServerStreamコンストラクターはネイティブパラメーターに変換するためPipeTransmisionModedwPipeMode直接アクセスすることはできません。

おそらくそこに忍び込むことができPIPE_REJECT_REMOTE_CLIENTSます(PIPE_ACCEPT_REMOTE_CLIENTSはゼロなので、それをサポートするために何もする必要はありません)。パラメータの新しい値を OR する必要がありPipeTransmissionModeます。例えば:

var transmissionMode =
    (PipeTransmissionMode)((int)PipeTransmissionMode.Byte | (0x8 >> 1));

次に、でNamedPipeServerStreamインスタンスを作成しますtransmissionMode。ただし、それに対するサポートは期待しないでください:)

于 2014-10-03T19:42:14.837 に答える