شرح : Win32 Api شرح لبعض دوال Win32 API

الناقل : elmasry | الكاتب الأصلى : GamingMasteR | المصدر : www.arabteam2000-forum.com

السلام عليكم ورحمة الله وبركاته

سأقوم بإذن الله في هذا الموضوع بشرح مختصر لبعض دوال Win32 API مع بعض الامثلة الخفيفة .

أي اضافة مرحب بها لكن أرجو تحري الدقة في المعلومة المطروحة + العرض بنفس النظام :



******************
اسم الدالة بالبارامترات :
البارامتر الاول : شرح.
البارامتر الثاني : شرح.
....
******************
وظيفة الدالة : ....
******************
مثال تطبيقي بالكود (أي لغة تريد)
******************

اذا كانت هناك اي مغالطات في الطرح فسأكون اسعد الناس بتلقي رسالة خاصة لي او لأحد المشرفين تشرح ماهية الخطأ لضمان عدم ادخال جدل في الموضوع وسيتم التعديل ان شاء الله .

برجاء عدم وضع ردود لا اهمية لها وعلى رأسهم ردود الشكر والذي منه .

------------------------------------
سأبدأ أولا بالدوال الخاصة بالتعامل مع الملفات , بسم الله :


 
HANDLE WINAPI CreateFile(
  __in    LPCTSTR lpFileName,
  __in    DWORD dwDesiredAccess,
  __in    DWORD dwShareMode,
  __in_opt  LPSECURITY_ATTRIBUTES lpSecurityAttributes,
  __in    DWORD dwCreationDisposition,
  __in    DWORD dwFlagsAndAttributes,
  __in_opt  HANDLE hTemplateFile
);


lpFileName : اسم الملف(الكائن) المراد فتحه او انشاؤه .

dwDesiredAccess : يحدد العملية المراد اجرائها على الملف :
1-GENERIC_READ : يتم فتح الملف للقراءة منه فقط .
2-GENERIC_WRITE : يتم فتح الملف للكتابة فيه (لإنشاء ملف جديد) .
يمكن الدمج بين هذه الاعلام .

dwShareMode : لتحديد العمليات القابلة للتنفيذ على الملف من قبل البرامج الأخرى :
1-FILE_SHARE_READ : يتم قبول عمليات القراءة من الملف من برامج اخرى.
2-FILE_SHARE_WRITE : يتم قبول عمليات الكتابة الى الملف من برامج اخرى.
3-FILE_SHARE_DELETE : يتم قبول عملية مسح الملف من برامج اخرى.
يمكن الدمج بين هذه الاعلام .

lpSecurityAttributes : مؤشر الى Structure من نوع SECURITY_ATTRIBUTES وهو بارامتر اختياري ولم اتعامل معه من قبل .

dwCreationDisposition : لتحديد كيفية التعامل مع الملف عند وجوده او عدم وجوده :
1-CREATE_NEW : لإنشاء ملف جديد , اذا كان الملف موجود بالفعل سابقا تفشل الدالة .
2-CREATE_ALWAYS : لإنشاء ملف جديد , اذا كان الملف موجود سابقا يتم مسحه والكتابة فوقه بخصائص الملف الجديد مع اعطاء صفة "أرشيف" للملف الجديد .
3-OPEN_EXISTING : لفتح ملف موجود سابقا , اذا لم يكن الملف موجود تفشل الدالة .
4-OPEN_ALWAYS : لفتح ملف موجود سابقا , اذا لم يكن الملف موجود يتم انشاءه من جديد .
5-TRUNCATE_EXISTING : لفتح ملف موجود سابقا مع مسح جميع بياناته , لفعل ذلك يجب تحديد العلم GENERIC_WRITE مسبقا , تفشل الدالة اذا لم يكن الملف موجود مسبقا .

dwFlagsAndAttributes : لتحديد صفات الملف :
1- FILE_ATTRIBUTE_ARCHIVE : ملف أرشيف .
2- FILE_ATTRIBUTE_HIDDEN : ملف مخفي .
3- FILE_ATTRIBUTE_NORMAL : ملف عادي .
4- FILE_ATTRIBUTE_READONLY : ملف للقراءة فقط .
5- FILE_ATTRIBUTE_SYSTEM : ملف نظام .
هناك ايضا : FILE_ATTRIBUTE_OFFLINE - FILE_ATTRIBUTE_COMPRESSED - FILE_ATTRIBUTE_TEMPORARY لم اتعامل معهم .

hTemplateFile : لتحديد قالب يتم اخذ خصائص الملف منه وهو بارامتر اختياري ولم اتعامل معه قط .

القيمة المرجعة من الدالة : اذا تم استدعاء الدالة بالشكل الصحيح ولم تفشل تكون القيمة المرجعة هي مقبض للملف يمكن استخدامه عن طريق دوال القراءة والكتابة مثل ReadFile-WriteFile-CreateFileMapping
------------------------------------
بإختصار الدالة تقوم بفتح او انشاء ملف جديد او قديم وذلك لغرض القراءة او الكتابة فيه , تستخدم ايضا الدالة للتعامل بين البرنامج و الدرايفر , عند الانتهاء من استخدام الملف يجب ان يتم اغلاقه عن طريق الدالة CloseHandle .
------------------------------------
مثال اسمبلي :

.
 
data
lpVictimName db "C:\test.exe",0
hFile dd 0

.code
invoke CreateFile, addr lpVictimName, GENERIC_READ + GENERIC_WRITE, FILE_SHARE_READ + FILE_SHARE_WRITE, NULL, TRUNCATE_EXISTING, FILE_ATTRIBUTE_NORMAL,  NULL
mov hFile,eax


مثال بالسي :

 
HANDLE hFile = CreateFile("C:\\test.exe", GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);