2015年02月10日
いまさらながらの Mailslot 【続き】
前回は MailSlot を使うための基本構成を示したのだが、実際にやりたいことは、他のデスクトップ、多くは異なるセキュリティコンテキスト(つまりは異なるユーザなど)からも通知を受けたいということであった
そうすると、前回のサーバ側の実装では、同じユーザコンテキストからしか通知を受けれないということになってしまう
それを解決するのは、実は簡単で、セキュリティ属性(SECURITYP_ATTRIBUTES)を渡せばいいだけなのだった
改善したサーバ側の実装例
今回はコードを簡潔にするために ATL のセキュリティ関連テンプレートを利用してみた
ATL を使いたくなければ、地道に構造体を初期化して、セキュリティコンテキスト名から SID を求めて、などの作業が必要となる(わかってしまえば、それほどのコードではないのだが、自分はいつも一発では書けないので、面倒だと感じている)
これでめでたく当初の目的は果たせることになった
ただし、今回は Sids::World() を利用したが、セキュリティを考慮し、もっと限定的な SID を利用することも可能だし、そうすべきかもしれない
![](https://www29.a8.net/svt/bgt?aid=140630583829&wid=001&eno=01&mid=s00000000404001065000&mc=1)
![](https://www17.a8.net/0.gif?a8mat=2BQ793+DPKD9U+348+6C9LD)
そうすると、前回のサーバ側の実装では、同じユーザコンテキストからしか通知を受けれないということになってしまう
それを解決するのは、実は簡単で、セキュリティ属性(SECURITYP_ATTRIBUTES)を渡せばいいだけなのだった
改善したサーバ側の実装例
CDacl dacl;
dacl.AddAllowedAce(Sids::World(), FILE_ALL_ACCESS);
CSecurityDesc sd;
sd.SetDacl(dacl);
CSecurityAttributes sa(sd);
HANDLE g_hServer = CreateMailslot(SERVER_NAME, MESSAGE_SIZE, SERVER_TIMEOUT, &sa);
今回はコードを簡潔にするために ATL のセキュリティ関連テンプレートを利用してみた
ATL を使いたくなければ、地道に構造体を初期化して、セキュリティコンテキスト名から SID を求めて、などの作業が必要となる(わかってしまえば、それほどのコードではないのだが、自分はいつも一発では書けないので、面倒だと感じている)
これでめでたく当初の目的は果たせることになった
ただし、今回は Sids::World() を利用したが、セキュリティを考慮し、もっと限定的な SID を利用することも可能だし、そうすべきかもしれない
![](https://www17.a8.net/0.gif?a8mat=2BQ793+DPKD9U+348+6C9LD)
【このカテゴリーの最新記事】
-
no image
-
no image
-
no image
-
no image
-
no image
この記事へのコメント
コメントを書く
この記事へのトラックバックURL
https://fanblogs.jp/tb/3271123
※ブログオーナーが承認したトラックバックのみ表示されます。
この記事へのトラックバック