السلام عليكم ورحمة الله
المعروف ان نظام التشغيل يعطى رساله عند محاوله حذف ملف تنفيذى مازال قيد التشغيل تفيد بأن الدخول رفض لانه مازال يعمل
Access Denied
وهذا لآن نظام التشغيل لأبقاء تشغيل الملف التفيذى يعتمد على وجوده على الهارديسك لكى يقراء منه او يصل لكل مايحتاج اليه من موارد يحتاجها الملف التفيذى لأستمرار تشغيله وهو ينشىء لذلك Data Stream بين الملف على الهارديسك وبين الجزء الذى حمله الى الرام
وهو header الخاص به ,والذى يتم حجز مكانه فى الذاكره ديناميكيا بواسطه النظام وبدون تدخلنا ...
حسنا وبدون تطويل لأن شرح عمل الملفات التنفيذيه طويل وقد تم الحديث عنه بالتفصيل فى منتدى الأسمبلى فلا داعى لشرحه ثانيا
نعم يمكن لمستخدم لغهVB ان يحذف اى برنامج يقوم بتنفيذه بدون ان يغلقه (اى وهو مازال قيد التشغيل)
كيف ذلك ؟
ببساطه ان يتم نسخ الملف التنفيذى كاملا بالذاكره ومن ثم تشغيله من هناك B)
الكائن OLE طبعا غنى عن التعريف
يمكن بواسطته عمل ذلك بكل بساطه وهو ان تمرر له ملف تنفيذى بواسطه خاصيه CreateEmbeded
واضبط خاصيه Class = Package
ثم باستخدام اى خاصيه من الأثنين Action=7 او DoVerb ينفذ البرنامج
ثم احذف نهائيا الملف التنفيذى الذى شغلته وهو مازال قيد التشغيل ستجد انه يحذف بكل سهوله
المهم هنا هو
كيفيه فعل ذلك ؟ ؟ اى كيف استطاع OLE ان يفعل ذلك ؟
الجواب هو انه قام بنسخ الملف التنفيذى الى الذاكره كاملا فى هيئه PE image
اى قام ديناميكيا بحجز مساحه للــ PE Image كاملة وتنفيذ الملف من الذاكره
والمسؤل عن تلك العمليه برنامج يسمى Packager و لو قمت بتفيذ الخطوات السابقه ونفذت البرنامج
اذهب الى TaskManager وانظر فى الProcess
ستجد سيرفيس اسمه يبدا بالحروف PKG ثم رقم عشوائى ثم الأمتداد وهو exe
وهو البرنامج الذى استخدمه مبرمجى مايكروسوفت كوعاء لحمل وتنفيذ صوره الملف التنفيذى الموجوده بالرام
ولكن الذى اريد فعلا معرفته هو كيف قام مطورى OLE بمايكروسوفت بعمل ذلك (اريد كود طريقه عمله)
لقد حاولت كثيرا لمعرفه ذلك ,وتوصلت لكثير من الأشياء وأكواد رائعه ومفيده لكن طبعا ليست بالVB
لكن عندى بعض الأمل ان اتوصل لعملها بالVB ان شاء الله
وعلى الأقل حاليا عرفت اغلب دوال API الطلوبه لعمل ذلك ولكن ينقصنى ترتيب افكارى + قراءة اكثر
و لا مانع من بضع مساعدات قليله
