मेरे पास कुछ आईओ कोड है जो एक कोशिश के भीतर एक स्ट्रीम को पढ़ता है..चुनें यह IOException पकड़ता है और सिस्टम को कॉल करता है। Runtime. InteropServices. Marshal. GETHRForException () पकड़ में, HResult पर आधारित विभिन्न कार्यों को लेने के प्रयास में। कुछ ऐसा है: लेकिन ट्रस्टेडियम के साथ एएसपी के भीतर इस कोड को चलाने से मुझे यह अपवाद मिलता है: कुछ प्रश्न: मुझे लगता है कि अपवाद उत्पन्न हो रहा है क्योंकि GetHRForException को अप्रबंधित कोड में बुलाता है, जिसे मध्यम विश्वास में अनुमति नहीं है। सही यह अपवाद निकाला जा रहा है, गेटहार्टफ़ोअर एक्सप्शन के निष्पादन के समय नहीं, बल्कि उस समय विधि बनने जा रहा है - सही (स्टैकट्र्रेस मेरी पद्धति से पता चलता है, लेकिन मैं निश्चित तौर पर 99 हूं कि कोई आईओ अपवाद नहीं हुआ है) यदि ऐसा है, क्या मुझे आंशिक विश्वास के वातावरण में व्यवहार भिन्न करने के लिए कोई रास्ता नहीं है, जिससे कि मैं GetHRForException (अप्रबंधित कोड) को कॉल न करूं, जहां इसे अनुमति नहीं है दूसरे शब्दों में, मैं कैसे समय के संकलन में जेआईटी को सफल होने की अनुमति दे सकता हूं रनटाइम पर मूल्यांकन करना चाहिए कि कोड को GetHRForException कॉल करना चाहिए () कुछ ऐसा है: मुझे लगता है कि परीक्षण के लिए एक रनटाइम तंत्र है यदि अनुमतियां उपलब्ध हैं, लेकिन इसे खोजने में सक्षम है। संपादित करें क्या इस ब्लॉग आलेख का जवाब माइक्रोसॉफ्ट के शॉनफा कहते हैं कि आप कोशिश नहीं कर सकते किसी LinkDemand द्वारा संरक्षित विधि के आसपास पकड़ो (सुरक्षाएक्सेप्शन) यदि MethodA () मेथोडब () को कॉल करता है, और मेथोडब () को पूर्ण विश्वास के लिए लिंकडिमांड के साथ चिह्नित किया जाता है, तो LinkDemand की जाँच की जाती है, साथ में MethodA Jited है इसलिए SecurityException से बचने के लिए, मुझे एक अलग विधि में Marshal. GetHRForException निकालने की आवश्यकता है I क्या यह सही मेरे कोड पर लागू हुआ है, MethodA () कोड हो सकता है जो कॉल को पढ़ें, और फिर पकड़ में GetHRForException () कॉल करने का प्रयास करता है। GetHRForException है MethodB ()। LinkDemand का मूल्यांकन किया जाता है जब MethodA () JITd है (यह लिंकडिमांड मेरे मध्यम ट्रस्ट एएसपी परिदृश्य में विफल रहता है) अगर मैं GetHRForException को एक नई विधि, मेथड सी () में स्थानांतरित कर लेता हूं, और एक अनिवार्य अनुमति के बाद ही मेथड सी () को कॉल करता हूं। डेमण्ड () सफलतापूर्वक सफल होता है, सैद्धांतिक रूप से मुझे सुरक्षा के समय से जबाव करने में सक्षम होना चाहिए, क्योंकि मेथड सी () अनुमति के बाद ही जेआईटीडी। डेमैन () सफल हो गया। जुलाई 12 09 को 14:20 पूछा सुरक्षा की आवश्यकता है। यह इंगित करता है कि अनुमति की अनुमति है या नहीं, यह सही या झूठे देता है। यह एक अनुमति की मांग नहीं करता है, जैसा कि SecurityPermission. Demand () है। मैं SecurityPermissionFlag. UnmanagedCode के साथ IsUnresticted का उपयोग करने के लिए यह देखने के लिए उपयोग करता हूं कि क्या असेंबली कोड को कॉल करने की अनुमति दी गई है, और उसके बाद केवल अगर अनुमत कोड को कॉल करें तो अनुमति दें एक अतिरिक्त मोड़ है। JIT कंपाइलर, एक विधि संकलित करते समय, CodeAccessPermission LinkDemands के लिए किसी भी विधि पर जांचता है जिसे मेरी संकलित विधि को संकलित किया जाता है। मार्शल। GETHRForException () एक लिंकडिमांड के साथ चिह्नित है इसलिए, मेरी पद्धति जो मार्शल को कॉल करती है। GETHRForException () JIT संकलन के समय एक अनजाने सुरक्षाएक्साशन फेंकता है, जब एक प्रतिबंधित वातावरण में चलाया जाता है, जैसे कि मध्यम विश्वास के साथ एएसपी। इसलिए, हमें उस विधि में कभी जीआईटी नहीं करना चाहिए जो मार्शल को बुलाती है। GETHRForException () उस मामले में, जिसका मतलब है कि मुझे मार्शल को आउट करना होगा। GETHRForException () को मेरे कोड में एक अलग विधि में कहा जाता है जिसे (और इस तरह सीमित किया जाता है) केवल तब जब UnmanagedCode अप्रतिबंधित। यहाँ कुछ उदाहरण कोड है: उत्तर 20 जुलाई 09:17 पर हाँ उत्तर - मध्यम ट्रस्ट कॉल को अप्रबंधित कोड में अनुमति नहीं देगा। एकमात्र विश्वास के स्तर पर यह पूर्ण विश्वास है। निर्भर करता है। सीएएस की मांग रनटाइम में हो सकती है, लेकिन होस्टिंग पर्यावरण भी एक भटकने पर जा सकते हैं और उन चीज़ों की खोज कर सकते हैं जो यह नहीं कर सकते। आप जांच कर सकते हैं कि क्या आप सुरक्षा प्रत्याशा के एक उदाहरण के साथ सीएएस मांग का उपयोग करके अप्रबंधित कोड को कॉल कर सकते हैं। सीएएस की मांग करने के लिए कोड ऐसा लग रहा है जैसे 12 जुलाई को 14:32 उत्तर दिया गया, ठीक है, यह बहुत अच्छी जानकारी है यह क्यू 3 के भाग बी को शामिल करता है लेकिन क्या एक भाग के बारे में मैं कैसे सफल होने के लिए JIT संकलन प्राप्त कर सकता हूँ क्या मैं एक सुरक्षा विशेषता के साथ मेरी विधि को चिह्नित कर सकता हूं या याद रखें, मेरा सिद्धांत यह है कि रनटाइम पर सुरक्षाप्रदर्शन त्रुटि नहीं हो रही है, यह जेआईटी के दौरान हो रहा है - और मुझे लगता है कि आपने पुष्टि की है कि यह संभव है। तो सवाल यह है कि मैं किस कोड को लिखने के लिए JIT को संकलित करने की अनुमति देता हूं। ndash cheeso 12 जुलाई 09 15:50 यह क्रम समय पर हो रहा है, अन्यथा विधानसभा भी लोड नहीं होगा - और इसके लिए विधानसभा होने की अनुमति की आवश्यकता के रूप में चिह्नित किया जाना चाहिए। फिर भी वह यकीनन एक रनटाइम चेक होता है, क्योंकि यह असेंबल लोड पर होगा, जो रनटाइम पर हो सकता है ndash blowdart Jul 12 09 at 16:24 विभिन्न प्रकार की जांच, लिंक मांग एक विधि पर विशेषता है, और वास्तव में जेआईटी के समय में जाँच की जाती है। यह रूपरेखा के द्वारा बहुत अधिक उपयोग किया गया है और इसे सीएलआर स्रोत के बाहर देखने के लिए दुर्लभ है मैं जो दिखाता हूं एक अनिवार्य मांग है, एक सुरक्षाप्रदर्शन की तरह एक घोषणात्मक नहीं है (SecurityAction. LinkDemand, अप्रतिबंधित सत्य) ndash blowdart जुलाई 12 09 पर 18: 55285 अपवादInfo. scode मार्शल GetHRForException (ई) 341 वापसी मार्शल GetHRForException (ई) 114 वापसी मार्शल GetHRForException (ई) 186 exceptionInfo. scode मार्शल। GetHRForException (ई) 45 रिटर्न नई रिटर्न मेसेज (डायग्नोस्टिक्सउपिटिलिटी.एक्सप्शनअपनेटिलिटी.थोहेल्पर एरर (नया कॉमेक्सेप्शन (ई. गेटबाज़एक्सेप्शन)। संदेश, मार्शल। GetHRForException (e. GetBaseException ()), msg) 61 नए रिटर्न मेसेज पर वापस लौटें (निदानिकता। 25 श्रोता चैनबैक। रिपोर्ट (पूर्व)) 25 listenerChannelCallback. ReportStopped (सिस्टम) (थ्रॉहेलपर एरर (रिटर्नमेस्स. एक्सैप्शन. गेटबेजएक्सेप्शन ()), मार्शल, GetHRForException (returnMsg. Exception. GetBaseException ())), msg) 25 श्रोता चैनल कॉलबैक. रपोर्ट (मार्शल GetHRForException (पूर्व).टाटाइम। इंटरपर्सिर्सेज. मारशल। GetHRForException (पूर्व))
No comments:
Post a Comment