2008-09-29 3 views
7

SystembeschreibungProblem unter Verwendung der große binäres Segments in OOXML

eine Auftragung Komponente, die OOXML ein Dokument zu erzeugen, verwendet.

Plotting-Komponente besteht aus mehreren Teilen. Alle Teile sind in C++ als exe + dlls geschrieben, mit Ausnahme der Schnittstelle zum OOXML-Dokument. Die letztere Komponente ist eine COM-Komponente, die in C# /. NET erstellt wurde. Der Hauptgrund dafür ist, dass das .NET-Framework System.IO.Packaging enthält. Dies ist eine sehr praktische integrierte Einrichtung für den Umgang mit OOXML-Dokumenten.

Wir erstellen ein Dokument aus einem Vorlage-OOXML-Dokument, in dem bestimmte Teile durch ihren tatsächlichen Inhalt ersetzt werden.

Eines dieser Bits ist eine OLE-Server-Komponente. Grundsätzlich ist dies ein binäres Segment innerhalb der OOXML-Datei. Zum Schreiben dieses Binärsegments verwendet die Packaging-Komponente anscheinend isolierten Speicher.

Problem

ein Segment> 8MB führt zu einer Ausnahme Schreiben geworfen „Kann nicht die Identität der Domäne bestimmen“.

Auf der C++ Seite enthält diese Ausnahme den Fehler ISS_E_ISOSTORE (0x80131450).

Wir haben dies analysiert und, soweit wir das beurteilen können, ist dies eine Sicherheitsfunktion, die verhindert, dass halb nicht vertrauenswürdige Komponenten von Drittanbietern Ihre HD vollständig ruinieren, indem sie immense Dateien schreiben.

Wir haben dann eine Menge Dinge in der .NET/COM-Komponente ausprobiert (benutzerdefinierte Anwendungsdomänen erstellen, Attribute für maximale Permissivität festlegen, Eigene Streams erstellen und diese an die Packaging-Komponente übergeben), aber jedes Mal ergab es sich Ausnahme wird ausgelöst.

Was können wir tun, damit dies funktioniert?

Könnte es sein, dass, wenn die .NET-Komponente als COM-Komponente instanziiert wird, ihre AppDomain immer nicht vertrauenswürdig ist?

Antwort

2

Sie könnten versuchen, das Paket selbst zu entpacken (anstatt die .NET-Paket-API zu verwenden), schreiben Sie direkt in die Datei, die das Binärsegment darstellt, und zippen Sie es erneut.

1

Sie sollten den Titel dieser Frage ändern, da Ihr Problem nicht OOXML-bezogen ist.

Anders als das: Welches System arbeiten Sie an diesen 8MB Datenstückchen führen zu dem Risiko der Summierung Ihrer Festplatte?

+0

Es ist nicht direkt mit OOXML verwandt, aber es hält uns davon ab, die OOXML zu schreiben, die wir wollen, also in dieser Hinsicht ist es verwandt. Ich habe nie gesagt, dass mein System von einer 8-MB-Datei summiert wurde, die .NET-Laufzeit-Sicherheitsfunktion für isolierte Speicher scheint zu denken, dass dies eine gute Obergrenze ist. – QBziZ

Verwandte Themen