none
IpcServerChannelのauthorizedGroupプロパティを指定したい RRS feed

  • 質問

  • C#2008で開発しています。

    同一PC内でプロセス間通信をするプログラムを作成しています。
    次のようにプログラムすることで、IPCサーバーチャネルを登録しています。

    IpcServerChannel serverChannel = new IpcServerChannel("sample");
    ChannelServices.RegisterChannel(serverChannel, false);

    サーバーチャネルは管理者特権で実行しており、
    クライアントチャネルは一般ユーザー権限で実行しています。

    プログラムを実行したところ、次のようなメッセージが表示されました。
    「IPCポートに接続できません。アクセスが拒否されました。」

    そこでクライアント側を管理者特権で実行したところ、
    正しく動作するようになりました。

    サーバーチャネル側のIPCポートが一般ユーザーからアクセスできないことが原因だと思い、
    調査してみたところ、「authorizedGroup」プロパティに
    「Users」と指定することで解決できるというような記述を見付けました。

    > IPC チャネルでの認証
    > http://msdn.microsoft.com/ja-jp/library/ms172351.aspx
    > サーバー アプリケーションの実行に使用されている ID を持つユーザー以外のユーザーが IPC チャネルにアクセスできるようにする場合、authorizedGroup プロパティにユーザーまたはユーザー グループを指定できます。次の構成ファイルでは、Users グループのすべてのユーザーが IPC チャネルにアクセスできます。

    そこでauthorizedGroupプロパティについて調査したところ、
    IpcServerChannelにauthorizedGroupプロパティが存在すると記載がありました。
    > サーバー チャネル プロパティ
    > http://msdn.microsoft.com/ja-jp/library/bb397831.aspx

    しかし、次のように記述してもプロパティにアクセスすることができません。
    serverChannel.authorizedGroup

    > IPC チャネルでの認証
    > http://msdn.microsoft.com/ja-jp/library/ms172351.aspx
    これを見るとアプリケーション構成ファイルにて設定する必要がありそうなのですが、
    その方法を探しても見付けることができませんでした。

    アプリケーション構成ファイルの内容をプログラムに適用するためには
    どのようにプログラムする必要があるのでしょうか?
    (IpcServerChannelのauthorizedGroupプロパティを指定できれば良いです。)

    もしよろしければ、アドバイス頂けませんか?
    ぜひよろしくお願い致します。


    その他参考にしたページ:
    http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=34704&forum=7

    2010年6月29日 4:07

回答

すべての返信

  • 構成プロパティを指定できるコンストラクタを使用すればよいようです。

    http://msdn.microsoft.com/ja-jp/library/c716c5ht(v=VS.80).aspx

    なお、この場合の "sample" というポート名は、"portName" の値として設定します。
    また、もしローカライズを考慮するのでしたら、"Users" の文字列は SecurityIdentifier などを使って得る必要があります。

    • 回答としてマーク コンドル 2010年6月30日 5:39
    2010年6月29日 9:27
  • TH01様

    ありがとうございます。
    無事解決できました。

    IDictionaryを使用すれば良かったのですね。
    これに気付くことができませんでした。

    私だけではどうしても理解できなかったため、とても助かりました。
    ありがとうございました。

     

    2010年6月30日 5:39