システムの説明
OOXML を使用してドキュメントを生成するプロット コンポーネント。
プロット コンポーネントはいくつかの部分で構成されています。すべての部分は、OOXML ドキュメントへのインターフェイスを除いて、exe + dll として C++ で記述されています。後者のコンポーネントは、C#/.NET で作成された COM コンポーネントです。この主な理由は、.NET フレームワークにSystem.IO.Packagingが含まれているためです。これは、OOXML ドキュメントを処理するための非常に便利な組み込み機能です。
テンプレートの OOXML ドキュメントからドキュメントを作成し、特定の断片を実際のコンテンツに置き換えます。
これらのビットの 1 つは OLE サーバー コンポーネントです。基本的に、これは OOXML ファイル内のバイナリ セグメントです。このバイナリ セグメントを書き込むために、Packaging コンポーネントは分離ストレージを使用しているようです。
問題
8MB を超えるセグメントを書き込むと、「ドメインの ID を判別できません」という例外がスローされます。
C++ 側では、この例外にエラー ISS_E_ISOSTORE ( 0x80131450 ) が含まれています。
これを分析したところ、これはセキュリティ機能であり、信頼できないサードパーティ コンポーネントが巨大なファイルを書き込んで HD を完全に破壊するのを防ぎます。
その後、.NET/COM コンポーネントで多くのことを試しました (カスタム AppDomains の作成、最大許容値の属性の設定、独自のストリームの作成とそれらのパッケージング コンポーネントへの渡し) が、毎回同じ例外がスローされました。
これを機能させるにはどうすればよいでしょうか?
.NET コンポーネントが COM コンポーネントとしてインスタンス化されると、その AppDomain は常に信頼されないのでしょうか?