2008-09-29 13 views
7

Opis systemuProblem przy użyciu dużego segmentu binarnego w OOXML

Składnik kreślenia, który używa OOXML do wygenerowania dokumentu.

Element plotujący składa się z kilku części. Wszystkie części są napisane w C++ jako exe + dll, z wyjątkiem interfejsu do dokumentu OOXML. Ten ostatni składnik jest składnikiem COM, który został utworzony w C#/.NET. Głównym powodem tego jest to, że środowisko .NET zawiera System.IO.Packaging. Jest to bardzo przydatna wbudowana funkcja do obsługi dokumentów OOXML.

Tworzymy dokument z szablonu dokumentu OOXML, w którym niektóre bity i części są zastępowane przez ich rzeczywistą treść.

Jeden z tych bitów jest komponentem serwera OLE. Zasadniczo jest to binarny segment w pliku OOXML. W przypadku pisania tego segmentu binarnego komponent Opakowanie najwyraźniej korzysta z izolowanego magazynu.

Problem

Pisanie segment> Wyniki 8MB w drodze wyjątku wyrzucane „Nie udało się ustalić tożsamość domeny”.

Po stronie C++ ten wyjątek zawiera błąd ISS_E_ISOSTORE (0x80131450).

Przeanalizowaliśmy to i, o ile możemy to stwierdzić, jest to funkcja zabezpieczająca, która zapobiega całkowicie niezaufanemu komponentowi zewnętrznemu, który całkowicie niszczy HD, pisząc ogromne pliki.

Następnie wypróbowaliśmy wiele rzeczy w komponencie .NET/COM (tworzenie niestandardowych wartości AppDomains, ustawianie atrybutów dla maksymalnej permisywności, tworzenie własnych strumieni i przekazywanie ich do komponentu Packaging), ale za każdym razem skutkowało to tym samym wyjątek wyrzucony.

Co możemy zrobić, aby to zadziałało?

Czy to możliwe, że gdy komponent .NET jest tworzony jako składnik COM, jego AppDomain jest zawsze niezaufany?

Odpowiedz

2

Możesz spróbować samodzielnie rozpakować paczkę (zamiast korzystać z API pakietu .NET), napisz bezpośrednio do pliku reprezentującego segment binarny i spakuj go ponownie.

1

Powinieneś zmienić tytuł tego pytania, ponieważ Twój problem nie dotyczy OOXML.

Poza tym: z jakiego systemu korzystasz z 8 MB fragmentów danych, co wiąże się z ryzykiem zsumowania dysku twardego?

+0

To nie jest bezpośrednio związane z OOXML, ale powstrzymuje nas od pisania OOXML, który chcemy, więc pod tym względem jest związany. Nigdy nie powiedziałem, że mój system został skompensowany przez plik 8 MB. Funkcja bezpieczeństwa środowiska .NET dla pojedynczego miejsca wydaje się, że jest to dobry górny limit. – QBziZ

Powiązane problemy