目次

概要

(書きかけ)

第三者コード(プラグインとか)が勝手なメモリ アクセスできないように。

明確にドメイン(domain: 領地、領域、占有権)を分ける。

書く予定

ネイティブのセキュリティ。 メモリ アドレス空間がプロセスごとに違ったり OS がいろいろ保護してる代わりにプロセス立てるの重たい。

AppDomain ソフトウェア的なメモリ分離。 1つのプロセス内に複数の AppDomain を作れる。 他の AppDomain 中のメモリに直接触れる手段ない。

マーシャリング(marshal: 指揮官を立てて整列したり入場案内したり) つまり、AppDomain 間はユーザー コードが勝手に行き来できない。 必ずフレームワーク側の干渉がかかる。

マーシャリングのされ方には2種類あって、

  • 値によるマーシャリング(marshal by value): シリアル化/逆シリアル化を経て、コピーを渡す。 Serializable 属性を付けたり、ISerializable インターフェイスを実装したりして、シリアル化可能にしておく必要あり。

  • 参照によるマーシャリング(marshal by reference): 値のコピーは作らないけど、透過プロキシってのが作られて、AppDomain 間の通信みたいなのが発生する。 MarshalByRefObject っていう特別なクラスを継承すると、こっち扱いされる。

このどっちか(シリアル化可能に作るか、MarshalByRefObject を継承するか)しないと、マーシャリングできない。

その他、AppDomain ごとに別のセキュリティ ポリシーを設定できたり。

更新履歴

ブログ