سؤال

وصف النظام

مكون رسم يستخدم OOXML لإنشاء مستند.

يتكون مكون الرسم من عدة أجزاء.تمت كتابة جميع الأجزاء بلغة C++ على هيئة exe + dll، باستثناء واجهة مستند OOXML.المكون الأخير هو مكون COM الذي تم إنشاؤه في C#/.NET.السبب الرئيسي لذلك هو أن إطار عمل .NET يحتوي على System.IO.Packaging.هذه أداة مدمجة سهلة الاستخدام للتعامل مع مستندات OOXML.

نقوم بإنشاء مستند من قالب مستند OOXML حيث يتم استبدال أجزاء وأجزاء معينة بمحتواها الفعلي.

أحد هذه البتات هو مكون OLE Server.هذا في الأساس جزء ثنائي داخل ملف OOXML.لكتابة هذا المقطع الثنائي، يبدو أن مكون التغليف يستخدم تخزينًا معزولًا.

مشكلة

تؤدي كتابة مقطع أكبر من 8 ميجابايت إلى ظهور استثناء "غير قادر على تحديد هوية المجال".

من جانب C++، يحتوي هذا الاستثناء على الخطأ ISS_E_ISOSTORE ( 0x80131450 ).

لقد قمنا بتحليل هذا وبقدر ما يمكننا أن نقول، هذه ميزة أمان تمنع مكونات الطرف الثالث شبه غير الموثوق بها من تدمير القرص الصلب الخاص بك تمامًا عن طريق كتابة ملفات ضخمة.

لقد جربنا بعد ذلك الكثير من الأشياء في مكون .NET/COM (إنشاء نطاقات تطبيقات مخصصة، وتعيين السمات لأقصى قدر من الأذونات، وإنشاء التدفقات الخاصة بنا وتمريرها إلى مكون التغليف) ولكن في كل مرة أدى ذلك إلى طرح نفس الاستثناء.

ماذا يمكننا أن نفعل لإنجاح هذا؟

هل من الممكن أنه عندما يتم إنشاء مكون .NET كمكون COM، يكون مجال التطبيق الخاص به غير موثوق به دائمًا؟

هل كانت مفيدة؟

المحلول

يمكنك محاولة فك ضغط الحزمة بنفسك (بدلاً من استخدام واجهة برمجة تطبيقات حزمة .NET)، والكتابة مباشرة إلى الملف الذي يمثل الجزء الثنائي وضغطه مرة أخرى.

نصائح أخرى

يجب عليك تغيير عنوان هذا السؤال لأن مشكلتك لا تتعلق بـ OOXML.

بخلاف ذلك:ما هو النظام الذي تعمل عليه والذي تؤدي أجزاء البيانات التي يبلغ حجمها 8 ميجابايت إلى خطر إتلاف محرك الأقراص الثابتة لديك؟

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top