الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

File Mapping

مغلق
بدأه romanof في 31 يناير 2008 · 5 رد · 1,059 مشاهدة · في لغة Delphi
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

تستخدم تقنية ال File Mapping لتبادل البيانات بين البرامج و لذا فهي مرتبطة ارتباطا وثيقا بالhook

وكان هذا الاخير اهم الاسباب التي دعتني الى كتابة هذه الموضوع المتواضع

تستخدم تقنية ال File Mapping لتبادل البيانات بين البرامج و لذا فهي مرتبطة ارتباطا وثيقا بالhook

وكان هذا الاخير اهم الاسباب التي دعتني الى كتابة هذه الموضوع المتواضع

ان هذه جوهر هذه التقنية هو انشاء مكان او متغير في الذاكرة يمكن لاكثر من برنامج ان يصل اليها ليقوم البرنامج الاخر او المكتبة الاخرى باستعمال القيمة ومن ثم تغييرها وهكذا

قبل كل شي قم بانشاء مكتبة dll واكتب فيها الكود التالي

library ShareLib;

uses
  ShareMem,
  Windows,
  SysUtils,
  Classes;
const
  cMMFileName: PChar = 'SharedMapData';
type

//****************************
  PGlobalDLLData = ^TGlobalDLLData;
  TGlobalDLLData = record
	S: String[50];
	I: Integer;
  end;
//****************************


var
  GlobalData : PGlobalDLLData;
  MapHandle  : THandle;
هذه الدالة سيتم تصديرها لكي تستدعيها البارمج التي ستستخدم هذه  المكتبة  
{ GetDLLData will be the exported DLL function }
procedure GetDLLData(var AGlobalData: PGlobalDLLData); StdCall;
begin
  { Point AGlobalData to the same memory address referred to by GlobalData. }
  AGlobalData := GlobalData;
end;

procedure OpenSharedData;
var
   Size: Integer;
begin
  { Get the size of the data to be mapped. }

  Size := SizeOf(TGlobalDLLData);
  { Now get a memory-mapped file object. Note the first parameter passes
	the value $FFFFFFFF or DWord(-1) so that space is allocated from the system's
	paging file. This requires that a name for the memory-mapped
	object get passed as the last parameter. }
 عملية انشاء مقبس من اجل  المتغير العام 
  MapHandle := CreateFileMapping(DWord(-1), nil, PAGE_READWRITE, 0, Size, cMMFileName);

  if MapHandle = 0 then
	RaiseLastWin32Error;
  { Now map the data to the calling process's address space and get a
	pointer to the beginning of this address }
هنا عملية ربط المفبس  السابق بالمتغير 
  GlobalData := MapViewOfFile(MapHandle, FILE_MAP_ALL_ACCESS, 0, 0, Size);
  { Initialize this data }
وهذه  واضحة  عملية منح قيم لحقول المتغير العام ....
  GlobalData^.S := 'ShareLib';
  GlobalData^.I := 1;
  if GlobalData = nil then
  begin
	CloseHandle(MapHandle);
	RaiseLastWin32Error;
  end;
end;
وهنا  عملية التخلص من المتغير العام ومن المقبس ستسدعى هذه الدالة عند الخروج  من المكتبة 
procedure CloseSharedData;
{ This procedure un-maps the memory-mapped file and releases the memory-mapped
  file handle }
begin
  UnmapViewOfFile(GlobalData);
  CloseHandle(MapHandle);
end;
وهنا نحدد ترتيب استدعاء  الدوال (التوابع)   


procedure DLLEntryPoint(dwReason: DWord);
begin
  case dwReason of
	DLL_PROCESS_ATTACH: OpenSharedData; 
	DLL_PROCESS_DETACH: CloseSharedData;
  end;
end;

exports
  GetDLLData;

begin
  { First, assign the procedure to the DLLProc variable }
  DllProc := @DLLEntryPoint;
  { Now invoke the procedure to reflect that the DLL is attaching
	to the process }
  DLLEntryPoint(DLL_PROCESS_ATTACH);
end.

هذا اول جزء

أضاعوني وأي فتى أضاعـوا * * * ليـوم كــريهـة وســـداد ثغــــر

وخـــــلونـي ومعتـرك المنايـا * * * وقد شـــرعوا أسنــتهم لنحـري

كأني لم أكــــــن فيهـم وسيطـا * * * ولم تك نســبتي في آل عمــرو

أجرر في الجـــوامع كـل يـوم * * * ألا لله مظــــلمتـي وهـصـــري

عسى الملك المجيب لمن دعاه * * * سينجيني فيعلم كيــف شكـري

فأجـــزي بالكرامـة أهـل ودي * * * وأجزي بالضـغينة أهل ضري

منتديات الرياضيات العربية

#2

بقى ان اقول ان الملفات والمثال ماخوذة من الباب التاسع من كتاب Delphi 5 Devlopers Guide الاول

والبرنامجان موجودان في المرفقات مع المكتبة

وكنت اريد اضيف علاقة هذه التقنية بالhook

هو من حيث سهولة تنفيذها داخل مكتبة ديناميكة والهوك يشترط وجود مكتبة ديناميكية لحقنها في process

ومن ثم وجود برنامج لتلقى نتائج من المكتبة المحقونة

الامر الذي يشبه ما قمنا به قبل قليل

ولكن حقن المكتبه في هو المشكلة الاكبر process

ShareLib.rar

ShareLib.rar

ShareLib.rar

أضاعوني وأي فتى أضاعـوا * * * ليـوم كــريهـة وســـداد ثغــــر

وخـــــلونـي ومعتـرك المنايـا * * * وقد شـــرعوا أسنــتهم لنحـري

كأني لم أكــــــن فيهـم وسيطـا * * * ولم تك نســبتي في آل عمــرو

أجرر في الجـــوامع كـل يـوم * * * ألا لله مظــــلمتـي وهـصـــري

عسى الملك المجيب لمن دعاه * * * سينجيني فيعلم كيــف شكـري

فأجـــزي بالكرامـة أهـل ودي * * * وأجزي بالضـغينة أهل ضري

منتديات الرياضيات العربية

#3

شكرا لك أخي عادل هل رأيت هذا:

قراءة من ملف حجمه كبير جدا, أكبر من 700Mb؟

رب اجعلني مقيم الصلاة ومن ذريتي ربنا وتقبل دعاء.

لا تنسى: "العقل مثل العضلة كلما استخدمته أكثر كلما ازدادت قوته"

#4

اين هو الكود الخاص بهذا الموضوع

اريد ارة تطبيقا لهذه الفكرة..

وشكرا

أضاعوني وأي فتى أضاعـوا * * * ليـوم كــريهـة وســـداد ثغــــر

وخـــــلونـي ومعتـرك المنايـا * * * وقد شـــرعوا أسنــتهم لنحـري

كأني لم أكــــــن فيهـم وسيطـا * * * ولم تك نســبتي في آل عمــرو

أجرر في الجـــوامع كـل يـوم * * * ألا لله مظــــلمتـي وهـصـــري

عسى الملك المجيب لمن دعاه * * * سينجيني فيعلم كيــف شكـري

فأجـــزي بالكرامـة أهـل ودي * * * وأجزي بالضـغينة أهل ضري

منتديات الرياضيات العربية

#5

هذا الموقع جميل في شرح هذه التقنية

Windows System Programming

وهو موجود على شكل كتاب في قسم الAPI عندنا في المنتدى

/index.ph...3&hl=System

المشاركة رقم 6

رابط مفيد من قسم API ال

لاخينا في الله Usama Fayez

ولو كنت اعلم بوحود موضوعك ما كتبت

أضاعوني وأي فتى أضاعـوا * * * ليـوم كــريهـة وســـداد ثغــــر

وخـــــلونـي ومعتـرك المنايـا * * * وقد شـــرعوا أسنــتهم لنحـري

كأني لم أكــــــن فيهـم وسيطـا * * * ولم تك نســبتي في آل عمــرو

أجرر في الجـــوامع كـل يـوم * * * ألا لله مظــــلمتـي وهـصـــري

عسى الملك المجيب لمن دعاه * * * سينجيني فيعلم كيــف شكـري

فأجـــزي بالكرامـة أهـل ودي * * * وأجزي بالضـغينة أهل ضري

منتديات الرياضيات العربية

#6

أحاول اغناء الموضوع بعدد من الروابط

http://www.explainth.at/en/delphi/mapstream.shtml

حتى استطيع العودة اليها فيما بعد

http://www.delphifaq.com/faq/delphi_windows_API/f348.shtml

تم تعديل هذه المشاركة بواسطة romanof في 2 فبراير 2008 في 04:44

أضاعوني وأي فتى أضاعـوا * * * ليـوم كــريهـة وســـداد ثغــــر

وخـــــلونـي ومعتـرك المنايـا * * * وقد شـــرعوا أسنــتهم لنحـري

كأني لم أكــــــن فيهـم وسيطـا * * * ولم تك نســبتي في آل عمــرو

أجرر في الجـــوامع كـل يـوم * * * ألا لله مظــــلمتـي وهـصـــري

عسى الملك المجيب لمن دعاه * * * سينجيني فيعلم كيــف شكـري

فأجـــزي بالكرامـة أهـل ودي * * * وأجزي بالضـغينة أهل ضري

منتديات الرياضيات العربية

هذا الموضوع مغلق.

مواضيع مشابهة