[تمرين] الكل يسأل و الكل يجيب
#1
السلام عليكم و رحمة الله

موضوع التمرين :
يضع اي عضو دالة يختارها هو و يحاول باقي الأعضاء شرح هدفها و برامتراتها دون البحث في النت، يعتمدون فقط على معلوماتهم في البرمجة Big Grin

ابدا انا :
PHP كود :
function MoveFileEx(ExistingFileName: PChar; NewFileName: PChar; Flags: DWORD): Boolean; stdcall; external
  
'Kernel32.dll' Name 'MoveFileExA'; 


و هذه طريقة استدعاءها.

PHP كود :
MoveFileEx(PChar(FileName), nil, MOVEFILE_DELAY_UNTIL_REBOOT); 

بالتوفيق ان شاء الله
الرد
#2
[COLOR="RoyalBlue"]فكرة جيدة ! سابدأ بدالة معروفة:

ما هي الدالة DialogBoxParam ؟[/COLOR]
الرد
#3
إقتباس :MoveFileEx(PChar(FileName), nil, MOVEFILE_DELAY_UNTIL_REBOOT);
اخي STRELiTZIA هنا تقصد حذف الملف FileName عند اعادة تشغيل ال Win , هل صلحت معك اقصد هل جربتها و تم بالفعل حذف الملف المراد بعد اعادة تشغيل ال Win ؟
لاني رائت ان اغلب المبرمجين يشتكون من عدم فاعليتها ومنهم كاتب التعقيب ...Big Grin
راقب ال Quee في ال SessionManager لل Regedit ولاحظ كيف يكون مسار الملف المراد حذفه ...
الرد
#4
هل ممكن الاستعانة بال Help Smile
الرد
#5
mohfa كتب :اخي STRELiTZIA هنا تقصد حذف الملف FileName عند اعادة تشغيل ال Win , هل صلحت معك اقصد هل جربتها و تم بالفعل حذف الملف المراد بعد اعادة تشغيل ال Win ؟
لاني رائت ان اغلب المبرمجين يشتكون من عدم فاعليتها ومنهم كاتب التعقيب ...Big Grin
راقب ال Quee في ال SessionManager لل Regedit ولاحظ كيف يكون مسار الملف المراد حذفه ...

نعم اخي mohfa جربتها و هي تعمل بنجاح...
المرفق لـــ Michael Puff - من احست المبرمجين الذين يعتمدون على دوال الــ API - يحتوي على مثال تطبيقي مع الملفات المصدرية.

إقتباس :هل ممكن الاستعانة بال Help
طبعا اخي hanipino فالهدف هو التعلم Smile و لكن كآخر وسيلة...
يمنع فقط النسخ و اللصق الغبي Big Grin للتعاريف و ارفاقها،

إقتباس :ما هي الدالة DialogBoxParam ؟
اخي Goblin حاول عمل Context للسؤال لما تريد مع اضافة برامترات معينة للدالة التي وضعت.

بالتوفيق ان شاء الله


الملفات المرفقة
.rar   DelFileOnReboot.rar (الحجم : 10.28 ك ب / التحميلات : 162)
الرد
#6
اخي STRELiTZIA من فظلك راقب ال File Delete Quee في ال Session Manager و ستعرف عن ماذا انا اتكلم .
راقب مسار الملف الموضوع في ال Quee .
ملاحظة في ال Win7 الوضع تغيير تماما .
الرد
#7
هذا :
كود :
\[COLOR=red]??[/COLOR]\C:\Documents and Settings\Utilisateur\Bureau\DelFileOnReboot\Test.txt

هل تعاملت من قبل مع مسارات الملفات انطلاقا من Driver Big Grin


اليك مثال حصري لا وجود له في النت اطلاقا من انتاج Delphi4Arab يمكنك تجربته :
PHP كود :
unit driver;
 
interface
 
uses Windows, nt_status, native, hal, fcall, macros, ntoskrnl;
 
function 
_DriverEntry(DriverObject: PDriverObject; RegistryPath: PUnicodeString): NTSTATUS; stdcall;
 
implementation
 
procedure DriverUnload
(pDriverObject: PDriverObject); stdcall;
begin
  DbgPrint
('Test Driver :: Unloaded');
end;
 
function 
_DriverEntry(DriverObject: PDriverObject; RegistryPath: PUnicodeString): NTSTATUS; stdcall;
var 
UNICODESTRING: UNICODE_STRING;
  
obj: OBJECT_ATTRIBUTES;
 
begin
 
  DbgPrint
('Test Driver :: Loaded');
  
DriverObject^.DriverUnload := @DriverUnload;
 
 
  
RtlInitUnicodeString(UNICODESTRING, '\??\C:\test.exe');
  
InitializeObjectAttributes(obj, @UNICODESTRING, OBJ_CASE_INSENSITIVE + OBJ_KERNEL_HANDLE, 0, nil);
 
  
Result := ZwDeleteFile(@obj);
 
 
  if 
Result = STATUS_SUCCESS then
  begin
    DbgPrint
('File deleted sucessfully Result:0x%.8X', Result); 
  
end else
  
begin
    DbgPrint
('Fail to Delete File Result:0x%.8X', Result); 
    
DbgPrint('Object name :%wZ',  obj.ObjectName); 
  
end;
  
Result := STATUS_SUCCESS;
 
end;
 
end. 


الملفات المرفقة
.rar   ZwDeleteFile.rar (الحجم : 93.9 ك ب / التحميلات : 195)
الرد
#8
لم تفهم قصدي اخي STRELiTZIA او يمكن انني لم اعرف كيف اوصل لك الفكرة :
في ال MSDN تجد انه عندما يتم استعمال ال MOVEFILE_DELAY_UNTIL_REBOOT فان الملف المراد اعادة تسميته او حذفه يسكون في الطابور او ال Quee تحت ال PendingFileRenameOperations تحت ال HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager
ولكن المشكلة في بعض الاحيان ان مسار الملف لايكون كاملا مثلا تجده :
C:\Documents and Settings\Utilisateur\Bureau\DelFileOnReboot\Test.txt
احيان اخرى لايوجد اصلا اي ملف او مسار في ال Quee ايان اخرى تجده Relative Path .
انظر هذا التعقيب : http://support.microsoft.com/kb/202071/en-us
***
إقتباس :هل تعاملت من قبل مع مسارات الملفات انطلاقا من Driver
ومارئك اخي STRELiTZIA ؟؟؟Big Grin
طبعا عزيزي STRELiTZIA Big Grin
الرد
#9
كود :
ومارئك اخي STRELiTZIA ؟؟؟
Big GrinBig GrinBig Grin

اعلم ايضا انك بدات البرمجة قبلي بسنين Big Grin
على كل حال لتفادي اي اشكال مع صلاحيات النظام و طبيعة الملف المراد حذفه في قبول اوامر الدالة : MoveFileExA
افضل طريقة الكاسبر في استعمال الدرايفر في حذف الملفات مع اعادة التشغيل...
الرد
#10
اخي STRELiTZIA ال KAV يستعمل الطريقة نفسها في التعامل مع الملفات الملراد خذفها باستعمال نفس الدالة مع او عدم استعمال Driver لهذا الغرض لان النتيجة واحدة في الاخير .
سوف اعطيك مثال :
اجعل ال KAV يضع ملف في ال Delet after reboot Quee و قم انت يتحريك الملف في ال Quee اقصد مثلا من المرتبة 1 الى 2 او العكس - لان الترتيب جد مهم و حساس في ال Delete File after reboot Quee ..
و سترى النتيجة :
اما ان ال KAV يعتبر ان الملف قد تم جذفه او انه يعطيك نفس الرسالة عند ما قام بالمسح و ايجاده للملف الذي وضعه في الطابور .
رغم ان الملف لم يتم حذفه وهو موجود و كذلك موجود في الطابور لهذا ال OS في كل مرة يقوم بتنفيذ ال Session Manager سوف يبجث على نفس الملف يعني Looping thru same file او مايدعى بال LTF .
الحل الوحيد انك تعمل MMF للملف المراد حذفه و تقوم انت بال Force Deleting وبالطبع هذا خطير جدا .
**

حسب علمي ال KAV يستعمل ال MoveFileExW للتنعامل مع ال Unicode لان النظام يتعامل بنسبة 98% بال Unicode

شكرا اخي STRELiTZIA على فتح هكذا مواضيع .
بالتوفيق
الرد


التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم