Hوles آمن و الإنهاء هامة

قبل الالإصدار 2.0 من برنامج.NET Framework كافة نظام تشغيل قد يتم تغليف مقابض فقط في IntPtrإدارة كائن مجمع. While this was a convenient way إلى interoperate مع أصلي تعليمات برمجية, handles could be leaked بواسطة غير متزامن استثناءات, such كـ a مؤشر ترابط إحباط? unexpectedly أو a مكدس تجاوز. These غير متزامن استثناءات are an obstacle إلى cleaning لأعلى operating النظام موارد و they can occur almost anywhere في your برنامج. They are prone إلى occur في applications that استخدم a مضيف that هو تشغيل مدارة تعليمات برمجية, such كـ Microsoft SQL الخادم.

استخلاص في بعض الحالات، الكائنات finalizable قد يكون بواسطة تجميع البيانات المهملة أثناء تنفيذ أسلوب داخل استدعاء النظام الأساسي المكالمة. إذا كان أداة الإنهاء تحرير المؤشر الذي تم تمريره إلى التي استدعاء النظام الأساسي المكالمة، فإنه قد يؤدي إلى تلف بمعالجة. استخلاص المقبض قد أيضا تكون عن عندما يتم حظر أسلوب الخاص بك أثناء استدعاء النظام الأساسي الاتصال، مثل أثناء قراءة ملف.

المزيد critically, because Windows aggressively recycles handles, a مؤشر could be recycled و يؤشر إلى another مورد that might contain sensitive بيانات. Th هو هو يعرف المهملات الهجوم ومن المحتمل تلف بيانات وتكون خطرا على الأمان.

يبدأ ب.NET Framework 2.0، SafeHandleيسهل العديد من هذه المشاكل عمر كائن الفئة ويتكامل مع استدعاء النظام الأساسي لذلك leaked التي لا تكون موارد نظام تشغيل. SafeHandleفئة كائن حل مشكلات عمر بتعيين وتحرير المقابض دون انقطاع. يتضمن أداة الإنهاء هامة التي يضمن المقبض هو مغلق و هو مضمون لتشغيلها أثناء AppDomainunloads، حتى في الحالات عند استدعاء النظام الأساسي استدعاء هو يفترض أن تكون في الولاية تلف.

لأن SafeHandleيرث من CriticalFinalizerObject، تسمى finalizers غير الحرجة قبل أي من finalizers حرج. تسمى finalizers تشغيل الكائنات التي لم تعد مباشرة أثناء مسار تجميع البيانات المهملة نفسه. على سبيل المثال، على FileStreamيمكن تشغيل كائن أداة الإنهاء عادي إلى مسح بيانات مخزنة بشكل مؤقت موجود بدون خطورة المقبض الذي يتم leaked أو recycled. Th هو ترتيب ضعيف جداً بين finalizers الحرجة و هو غير معد للاستخدام العام. كان موجوداً بشكل أساسي للمساعدة في ترحيل المكتبات موجود بواسطة السماح لهذه المكتبات إلى استخدم SafeHandleبدون تبديل دلالات بها. بالإضافة إلى ذلك، أداة الإنهاء حرج وأي شيء يقوم باستدعاء، مثل كـ SafeHandle.ReleaseHandle()يجب أن يكون الأسلوب، في منطقة تنفيذ مقيدة. وهذا يفرض قيود تشغيل تعليمات برمجية التي يمكن كتابتها بداخل رسم المكالمة ل أداة الإنهاء.

بدءاً من برنامج.NET Framework الإصدار 2.0، استدعاء النظام الأساسي العمليات تلقائياً بزيادة عدد مرجع مقابض تغليف SafeHandleوقم بحذف عليها عند الاكتمال. ويضمن ذلك مؤشر لن تكون recycled أو إغلاقها بشكل غير متوقع.

يمكنك تعيين ملكية الأساسية مؤشر عند إنشاء SafeHandleالكائنات. وهذا يتحكم فيما إذا كان SafeHandleتحرير الكائن مؤشر بعد أن تم التخلص من الكائن. وهذا مفيد للمؤشرات مع متطلبات مدة بقاء peculiar أو يستهلك مؤشر يتم التحكم به مدة بقاء بواسطة شخص آخر.

فئات مؤشر آمن

Microsoft.Win32.SafeHandlesمساحة الاسم يحتوي على الفئات المشتقة من SafeHandleلتوفير الدعم وظيفة ملف النظام التشغيل مقابض. يلخص الجدول التالي الفئات المؤشر آمن.NET Framework.

الفئة

الوصف

SafeHandle

التفاف مقبض ل استدعاء النظام الأساسي العمليات التي تضمن الإنهاء بدون مقاطعة. يجب أن يتم توريث هذه الفئة.

SafeFileHandle

يوفر الوصول إلى مؤشرات الملفات غير مدار.

SafeWaitHandle

وصولاً إلى مؤشرات الانتظار غير مدار.

SafeHandleMinusOneIsInvalid

و

SafeHandleZeroOrMinusOneIsInvalid

يسمح لك إلى إنشاء فئة مؤشر اﻷمن cusإلىm.

راجع أيضًا:

المرجع

SafeHandle

CriticalHandle

CriticalFinalizerObject