Описание системы
Компонент построения, который использует OOXML для создания документа.
Компонент черчения состоит из нескольких частей.
Все части написаны на C ++ как exe + dll, за исключением интерфейса к документу OOXML.
Последний компонент является компонентом COM, который был создан в C # /. NET. Основная причина этого заключается в том, что .NET Framework содержит System.IO.Packaging . Это очень удобное встроенное средство для работы с документами OOXML.
Мы создаем документ из шаблона OOXML-документа, в котором некоторые фрагменты заменяются их фактическим содержимым.
Один из этих битов является компонентом OLE-сервера. По сути, это двоичный сегмент в файле OOXML. Для записи этого бинарного сегмента компонент Packaging, очевидно, использует изолированное хранилище.
Задача
Запись сегмента размером более 8 МБ приводит к возникновению исключения «Невозможно определить идентичность домена».
На стороне C ++ это исключение содержит ошибку ISS_E_ISOSTORE (0x80131450).
Мы проанализировали это, и, насколько мы можем судить, это функция безопасности, которая предотвращает полное разрушение вашего жесткого диска полу-ненадежным сторонним компонентом путем записи огромных файлов.
Затем мы много чего перепробовали в компоненте .NET / COM (создание пользовательских доменов приложений, установка атрибутов для максимальной разрешающей способности, создание собственных потоков и передача их компоненту упаковки), но каждый раз это приводило к одному и тому же исключению быть брошенным.
Что мы могли бы сделать, чтобы сделать эту работу?
Может ли быть так, что, когда компонент .NET создается как компонент COM, его домен приложений всегда не заслуживает доверия?