لدي بعض رمز إو الذي يقرأ تيار داخل محاولة ..catch. فإنه يمسك إوكسيبتيون ويدعو System. Runtime. InteropServices. Marshal. GetHRForException () داخل الصيد، في محاولة لاتخاذ إجراءات مختلفة استنادا إلى هريسولت. شيء من هذا القبيل: ولكن تشغيل هذه التعليمات البرمجية داخل أسب مع تروستميديوم، أحصل على هذا الاستثناء: بعض الأسئلة: أعتقد أن الاستثناء يحدث لأن جيثرفوريكسيبتيون يدعو إلى التعليمات البرمجية غير المدارة، والتي لا يسمح في الثقة المتوسطة. تصحيح يتم طرح هذا الاستثناء، وليس في وقت تنفيذ جيثرفوريكسيبتيون، ولكن في الوقت الذي يتم جيتد الأسلوب - الصحيح (ستاكتريس يظهر طريقة بلدي، ولكن أنا 99 على وجه التحديد أن استثناء إو لم يحدث) إذا كان الأمر كذلك، هل هناك طريقة بالنسبة لي لتغيير السلوك في بيئة الثقة الجزئية، حتى أنني لا أدعو جيثرفوريكسيبتيون (رمز غير مدار) حيث لا يسمح به وبعبارة أخرى، كيف يمكنني السماح جيت لتحقيق النجاح في وقت الترجمة، في حين أيضا تقييم في وقت التشغيل ما إذا كانت التعليمات البرمجية يجب استدعاء جيثرفوريكسيبتيون () شيء من هذا القبيل: أعتقد أن هناك آلية وقت التشغيل لاختبار إذا كانت الأذونات المتاحة، ولكن لم يكن قادرا على العثور عليه. تصحيح . هل هذه المادة بلوق الجواب شونفا مايكروسوفت يقول أنك لا تستطيع أن تفعل محاولة. (سيكوريتيكسسيبتيون) حول طريقة محمية بواسطة لينكديماند. إذا تم استدعاء ميثودا () ميثودب () و ميثودب () مع لينكديماند للحصول على ثقة كاملة، ثم يتم تحديد لينكديماند مع ميثودا يتم جيتد. لذلك لتجنب سيكوريتيكسسيبتيون، أحتاج إلى استخراج Marshal. GetHRForException إلى طريقة منفصلة. هل هذا الصحيح تطبيقي على التعليمات البرمجية، ميثودا () قد تكون التعليمات البرمجية التي تستدعي القراءة، ثم في الصيد يحاول الاتصال جيثرفوريكسيبتيون (). جيثرفوريكسيبتيون هو ميثودب (). يتم تقييم لينكديماند عندما ميثودا () هو جيتد. (هذا لينكديماند فشل في بلدي سيناريو أسب متوسطة الثقة). إذا قمت بنقل جيثرفوريكسيبتيون إلى طريقة جديدة ميثودك ()، و مشروط استدعاء ميثودك () فقط بعد إذن حتمي. ديماند () ينجح، نظريا يجب أن تكون قادرة على تجنب سيكوريتيكسسيبتيون في وقت جيت لأن ميثودك () سيكون جيتد فقط بعد إذن. الرئيسي () ينجح. طلب 12 يوليو 09 في 14:20 الطريقة المطلوبة هي SecurityPermission. IsUnrestrict (). وهي ترجع خطأ أو خطأ يشير إلى ما إذا كان الإذن مسموحا أم لا. أنها لا تتطلب إذن، كما يفعل SecurityPermission. Demand (). يمكنني استخدام إيسونريستكتد مع SecurityPermissionFlag. UnmanagedCode لمعرفة ما إذا كان يسمح للجمعية استدعاء التعليمات البرمجية غير المدارة ثم قم باستدعاء التعليمات البرمجية غير المدارة فقط إذا سمح. هناك تطور إضافي واحد. يقوم مترجم جيت، عند تجميع طريقة، بالتحقق من كونديكاتسبرميسيون لينكديماندس على أي طريقة تسمى بلدي طريقة ليتم تجميعها. يتم وضع علامة Marshal. GetHRForException () مع لينكديماند. وبالتالي، سوف الأسلوب الذي يدعو Marshal. GetHRForException () رمي سيكوريسيكسيبتيون غير قابل للتغيير في وقت جيت تجميع عندما تعمل في بيئة مقيدة مثل أسب مع الثقة المتوسطة. لذلك، يجب علينا أبدا جيت الأسلوب الذي يدعو Marshal. GetHRForException () في هذه الحالة، مما يعني أنني بحاجة إلى كسر Marshal. GetHRForException () إلى طريقة منفصلة في التعليمات البرمجية التي تسمى (وبالتالي جيتد) فقط عندما أونماناجيدكود هو غير مقيدة. هيريس بعض الأمثلة رمز: أجاب 20 يوليو 09 في 17:56 نعم - الثقة المتوسطة لن تسمح المكالمات إلى رمز غير مدار. مستوى الثقة الوحيد الذي يسمح لها هو الثقة الكاملة. هذا يعتمد. يمكن أن تحدث متطلبات كاس في وقت التشغيل، ولكن بيئة الاستضافة يمكن أن تذهب أيضا على وجوههم والبحث عن الأشياء التي لا يمكن القيام به. يمكنك اختبار لمعرفة ما إذا كان يمكنك إجراء مكالمة إلى التعليمات البرمجية غير المدارة باستخدام طلب كاس مع مثيل سيكوريتيبرميسيون. رمز لجعل الطلب كاس يشبه هذا الرد أجاب 12 يوليو 09 في 14:32 حسنا، وهذا هو معلومات كبيرة. وهذا يغطي الجزء ب من Q3. ولكن ماذا عن جزء كيف يمكنني الحصول على تجميع جيت للنجاح هل يمكنني وضع علامة على الأسلوب الخاص بي مع سمة أمان أو. تذكر، نظريتي هي أن خطأ سيكوريتيبرميسيون لا يحدث في وقت التشغيل، فإنه يحدث خلال جيت - وأعتقد أنك أكدت أن هذا ممكن. لذا فإن السؤال هو، كيف يمكنني كتابة التعليمات البرمجية للسماح جيت لجمع. نداش تشيسو يوليو 12 09 في 15:50 ينبغي أن يحدث في وقت التشغيل، وإلا فإن التجمع لن حتى 39t تحميل - ولكي يحدث هذا التجمع يحتاج إلى وضع علامة على أنها تتطلب الإذن. حتى ذلك الحين أن 39s يمكن التحقق من وقت التشغيل، كما سيحدث على تحميل التجمع، والتي يمكن أن تكون في وقت التشغيل. نداش بلودارت يوليو 12 09 في 16:24 نوع مختلف من الاختيار، مطالب الارتباط هي سمات على طريقة، ويتم التحقق في الواقع في وقت جيت. It39s تستخدم كثيرا من قبل الإطار نفسه و it39s نادرة لرؤيته خارج مصدر كلر. ما أظهره هو مطلب حتمي، وليس إعلانية مثل سيكوريتبيرميسيون (SecurityAction. LinkDemand، صحيح غير مقيد) نداش بلودارت يوليو 12 09 في 18: 55I معرفة أنه في بعض الأحيان في عمليات إو يتم طرح إوكسيبتيون المشتركة. يمكنني استخدام Marshal. GetHRForException (استثناء ه) الأسلوب (وجدت هنا) من أجل تحديد رمز الخطأ المحدد. بعد ذلك، أريد أن إعادة رمي استثناء، وذلك باستخدام بلدي تطبيق رمز خطأ معين، من أجل إعطاء المستخدم بعض النصائح ما ذهب خطأ. ولكن لم أتمكن من العثور على قائمة القيم هريسولت الممكنة ل إوكسيبتيون. أكثر شيء إم عالقة هو أن لمختلف رموز هريسولت السبب الجذري يمكن أن تكون هي نفسها - على سبيل المثال، 0x8007052E و 0x80070569 - كلاهما يتوافق مع فشل تسجيل الدخول: اسم مستخدم غير معروف أو كلمة مرور سيئة. لقد حاولت البحث عن شيء مثل قيم إوكسيبتيون هريسولت ولكن لم يكن هناك شيء خاص لرسم الخرائط إوكسيبتيون هريسولت مع خطأ قابل للقراءة البشرية (مثل هذا أو هذا). لقد رأيت أيضا المسألة هنا، وهي مشابهة جدا، ولكن لا يزال هناك أي حل. لذلك، حيث يتم توثيق حول قيم إوكسيبتيون هريسولتس باستخدام Marshal. GetHRForException () ملفوفة رمز الخطأ ويندوز في رمز خطأ هريسولت. ل إوكسيبتيون سيكون دائما خطأ ويندوز 0x80070000. و 8 يعني الخطأ، و 7 يعني أنه جاء من ويندوز. يمكنك ببساطة استخدام أمب 0xffff لاستعادة رمز الخطأ الأصلي مرة أخرى. تحويل النتيجة مرة أخرى إلى عشري وسيكون لديك الكثير من الأماكن لمعرفة ما يعني رمز الخطأ. أنا شخصيا دائما استخدام ملف رأس سك WinError. h. يعتمد على إصدار فس لديك، ومعظم المبرمجين العثور عليه مرة أخرى في C: ملفات البرنامج (x86) ميكروسوفت SDKsWindowsv7.1A تضمين الدليل. لديك أيضا أداة يدوية متاحة، تشغيل errlook. exe من موجه الأوامر فيسوال ستوديو. وهناك طريقة جيدة لتكون متاحة بسهولة عن طريق إضافته إلى القائمة أدوات. استخدام أدوات أدوات خارجية، إضافة زر، عنوان خطأ البحث، الأمر C: ملفات البرنامج (x86) ميكروسوفت فيسوال ستوديو 12.0Common7Toolserrlook. exe. قرص المسار حسب الضرورة لتتناسب مع إصدار فس الخاص بك. يول الآن أيضا أن رموز الخطأ ليست هي نفسها. 0x80070569 أمب 0xffff 0x569 1385. البحث عن WinError. h للحصول على رمز الخطأ هذا إرورلوغونتيبينوتغرانتيد فشل تسجيل الدخول: لم يتم منح المستخدم نوع تسجيل الدخول المطلوب على هذا الكمبيوتر. هذا النوع من الأخطاء إوكسيبتيون يمكنك الحصول على ليست مقيدة على أي حال. لا يحتوي ويندوز على مواصفات استثناء، يتم سرد رموز الأخطاء الأكثر شيوعا فقط في وثائق مسن لوظيفة وينابي معينة. مثل الاستثناءات. الشر الضروري، يتم إنشاء العديد من رموز الخطأ إوكسيبتيون من قبل برامج التشغيل التي لم تكن مكتوبة من قبل ميكروسوفت. أجابيد سيب 9 14 في 8:57
No comments:
Post a Comment