09-08-2009, 10:44 AM
(آخر تعديل لهذه المشاركة: 09-08-2009, 11:08 AM بواسطة STRELiTZIA.)
السلام عليكم و رحمة الله
1- يجب ان يكون الدرايفر مسجل من قبل في النظام لتستطيع الدالة تحميلة و تشغيله.
2- الدالة لا تعمل Unload يجب استدعاء الدالة ZwUnloadDriver لتحرير الدرايفر - تعمل بنفس برامترات دالة التحميل.
لا...... ادخال البراميتر بهذه الطريقة يعتبر خطأ قاتل : BSOD :bangin: Blue Screen of Death
لا يوجد عندك Object بل مسار ريجيستري unicode فقط.
![[صورة: bsod.png]](http://img411.imageshack.us/img411/144/bsod.png)
المرفق يحتوي على مثال تطبيقي للدالة :
طريقة كتابة الدالة، لم اغير هيكل الدالة الأولى لعدم تعقيد الأمور.
اخي TF6M الطريقة التي كتبت اولا و ظننت انك اخطأت فيها هي الصحيحة :thumbsup:
قارن بين الكود الذي وضعت و ستجد الأخطاء التي يجب اصلاحها...
طريقة استعمال المرفق :
يــــــرجى اتباع المراحل بالترتيب الدقيق.
- تشغيل الأداة Dbgview لاتقاط رسائل الكرنل.
- تشغيل نسخة من اداة KmdManager و اختيار درايفر ZwDeleteFile
- تسجيل فقط الدرايفر ZwDeleteFile.
- تشغيل نسخة ثانية من اداة KmdManager و اختيار الدرايفر ZwLoadDriver.
- تسجيل و تشغيل الدرايفر ZwLoadDriver.
و بالطبع الاطلاع على رسائل الكرنل التي تظهر في DbgView.
يعني اننا سنقوم بتشغيل الدرايفر ZwLoadDriver و منه يتم استدعاء دايفر ثاني مسجل في النظام اسمه ZwDeleteFile و هذا الأخير يحاول حدف ملف تجريبي اسمه test.exe موجود في قرص C.
بالتوفيق ان شاء الله
إقتباس :ممكن أخطأت في المثال :الدالة تنتظر براميتر من نوع Pointer على المسار الريجستري الذي هو بدوره Unicode.
1- يجب ان يكون الدرايفر مسجل من قبل في النظام لتستطيع الدالة تحميلة و تشغيله.
2- الدالة لا تعمل Unload يجب استدعاء الدالة ZwUnloadDriver لتحرير الدرايفر - تعمل بنفس برامترات دالة التحميل.
PHP كود :
ZwLoadDriver (@obj_Attrib);
لا يوجد عندك Object بل مسار ريجيستري unicode فقط.
![[صورة: bsod.png]](http://img411.imageshack.us/img411/144/bsod.png)
المرفق يحتوي على مثال تطبيقي للدالة :
طريقة كتابة الدالة، لم اغير هيكل الدالة الأولى لعدم تعقيد الأمور.
PHP كود :
function _DriverEntry(DriverObject: PDriverObject; RegistryPath: PUnicodeString): NTSTATUS; stdcall;
var UNICODESTRING: UNICODE_STRING;
begin
DbgPrint('Test Driver :: Loaded');
DriverObject^.DriverUnload := @DriverUnload;
RtlInitUnicodeString(UNICODESTRING, '\Registry\Machine\System\CurrentControlSet\Services\ZwDeleteFile');
Result := ZwLoadDriver(@UNICODESTRING);
if Result = STATUS_SUCCESS then
begin
DbgPrint('Driver loaded sucessfully Result:0x%.8X', Result); // Result to get Error Code
end else
begin
DbgPrint('Fail to load driver Result:0x%.8X', Result); // Result to get Error Code
end;
Result := STATUS_SUCCESS;
end;
اخي TF6M الطريقة التي كتبت اولا و ظننت انك اخطأت فيها هي الصحيحة :thumbsup:
قارن بين الكود الذي وضعت و ستجد الأخطاء التي يجب اصلاحها...
طريقة استعمال المرفق :
يــــــرجى اتباع المراحل بالترتيب الدقيق.
- تشغيل الأداة Dbgview لاتقاط رسائل الكرنل.
- تشغيل نسخة من اداة KmdManager و اختيار درايفر ZwDeleteFile
- تسجيل فقط الدرايفر ZwDeleteFile.
- تشغيل نسخة ثانية من اداة KmdManager و اختيار الدرايفر ZwLoadDriver.
- تسجيل و تشغيل الدرايفر ZwLoadDriver.
و بالطبع الاطلاع على رسائل الكرنل التي تظهر في DbgView.
يعني اننا سنقوم بتشغيل الدرايفر ZwLoadDriver و منه يتم استدعاء دايفر ثاني مسجل في النظام اسمه ZwDeleteFile و هذا الأخير يحاول حدف ملف تجريبي اسمه test.exe موجود في قرص C.
بالتوفيق ان شاء الله

