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

Enum Process

مغلق
بدأه mhammad في 15 مارس 2003 · 4 رد · 870 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

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

-كيف تقوم بارجاع قائمة بجميع البروسيس الشغال بالنظام

توفر لنا المكتبة tlhelp32.h مجموعة من الدوال الجاهزة لعمل ذلك مثل :

Process32First

Process32Next

Thread32First

Thread32Next

Module32First

Module32Next

الخ ..

ملاحظة : هذه التوابع لا تعمل في Windows NT4

أي عندما نستخدم في البرنامج اي دالة من هذه الدوال علينا تضمين مكتبة tlhelp32.h

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

hsnap = CreateToolhelp32Snapshot(TH32CS_SNAPALL,0);

	pe.dwSize = sizeof(PROCESSENTRY32);

	me.dwSize = sizeof(MODULEENTRY32);

	BOOL EnumProc = Process32First(hsnap,&pe);

	while(EnumProc)

	{

  m_cList1.AddString(pe.szExeFile);

  hsnapm = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE,pe.th32ProcessID);

  BOOL EnumModule = Module32First(hsnapm,&me);

  m_cList2.AddString(pe.szExeFile);

  m_cList2.AddString("...........................");

  while(EnumModule)

  {

 	 m_cList2.AddString(me.szExePath);

 	 EnumModule = Module32Next(hsnapm,&me);

  }

  m_cList2.AddString("___________________________");

  m_cList2.AddString("");

  EnumProc = Process32Next(hsnap,&pe);

	}

	CloseHandle(hsnap);

	CloseHandle(hsnapm);

	UpdateData(false);

هذه الكود يقوم باعادة البروسيس الشغال واضافته للست بوكس 1 ، واعادة ال dll أو ال modules التي يستخدمها البروسيس واضافتها للست بوكس 2

بداية علينا تعريف قيمة HANDLE مقبض لنستطيع استخدام التوابع المذكورة فوق

HANDLE hsnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);

هذا الهاندل نمرره كأول بارامتر لأي من التوابع المذكورة ، البارامتر الأول في هذه الدالة يحدد ما المراد ارجاعه

TH32CS_INHERIT Indicates that the snapshot handle is to be inheritable. 

TH32CS_SNAPALL Equivalent to specifying TH32CS_SNAPHEAPLIST, TH32CS_SNAPMODULE, TH32CS_SNAPPROCESS, and TH32CS_SNAPTHREAD. 

TH32CS_SNAPHEAPLIST Includes the heap list of the specified process in the snapshot. 

TH32CS_SNAPMODULE Includes the module list of the specified process in the snapshot. 

TH32CS_SNAPPROCESS Includes the process list in the snapshot. 

TH32CS_SNAPTHREAD Includes the thread list in the snapshot.

البارامتر الأخير يأخذ القيمة 0 الا اذا أردنا الحصول على heap او ال module فإننا نمرر له ID البروسيس المراد .

بقي أمر واحد قبل الحصول على القيم المرادة ، عليك تعريف متغير للحصول على القيم المخزنة بال struct وتمرره كبارامتر ثاني

PROCESSENTRY32 pe;

MODULEENTRY32 me;

الآن تستطيع استخدام الدالة

Process32First(hsnap,&pe);

ولكن انتبه عليك تحديد حجم ال struct قبل استدعاءه

pe.dwSize = sizeof(PROCESSENTRY32);

الآن أصبح كل شيء واضح بقي أن نقول أن اعادة القيم الخاصة بال Module او ال Heap هي نفس الشئ ولكن عليك تمرير قيمة ال ID للبروسيس بدلا من الصفر

hsnap = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE,pe.th32ProcessID);

هنا البرنامج كامل

process.zip

#2

يعطيك الف عافية أخي محمد ...(f)

وشكرا جزيلا... (f)(f)

في انتظار المزيد...:b1

#3

السلام عليكم

يعطيك ألف عافيه اخ mhammad .

هناك العديد من الطرق لعمل Enumerate Running Process تعتمد على نوع النظام ( فيما أتذكره ان هناك خمس طرق ).

بالنسبه لانظمه WinNT/2000/XP فهناك طريقه باستخدام Native API Function هذه الطريقه هي الافضل - يعتمد عليها Windows Task Manager - . الداله المستخدمه لذلك هي Nt/ZwQuerySystemInformation . أظن ان هناك شرح عليها في المنتدى .

#4

شكراً أخي محمد (f)

أنا عند اريد أن ابحث عن شي كان موجد لا اره موجد في المنتدى ... يرجاء وضع المشاركات الجيده في مكان مخصص له !

وشكراً(f)

If you think yourself that you are nobody, you should go somewhere to find yourself

#5

السلام عليكم

الله يعافيك أخ اسماعيل (f)(f)

أخ kernel80 شكرا لك لذكرك هذه الطرق ولكني اخترت هذه الطريقة لسهولتها والدالة ZwQuerySystemInformation هي دالة undocument ولم استخدمها من قبل ....

أخي الشبح أتمنى لك التوفيق

(f)

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

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