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

مواضيع API متقدمة لنظام التشغيل NT

مغلق
بدأه احمد غريب في 17 نوفمبر 2005 · 47 رد · 12,613 مشاهدة · في المواضيع و الدروس القيّمة
مشاركة: واتساب X فيسبوك تيليجرام
#26

السلام عليكم

اخى الشمري عملية الthread ليست للتحكم فى واجهة المستخدم وإنما هى لعمل حسابات معقدة فى thread منفصل لنفترض التالي:

قمت بعمل برنامج به زرار واحد كما هو فى مثالك المرفق..

تريد الان ان تقوم بعمليه حسابية تخذ وقت طويل بالنسبة للمعالج..

لو وضعت استدعيت الدالة من WM_LBUTTONDOWN ما الذى سيحدث؟؟

برنامج لن يستجيب لاي شئ إلى ان ينتهى من العملية الحسابيه..

ما العمل؟؟

5 خطوات

1. WM_MYMESSAGE = WM_USER+1 تضعها فى قسم الـconstant

2. تقوم بعمل دالة, هذه الدالة هى الدالة التى ستقوم بالعملية الحسابية

3. تستدعى هذه الدالة بإستخدام CreateThread

4. فى الدالة بعد الانتهاء من العملية الحسابيه تستخدم الدالة SendMessage لإرسال إشارة لبرنامج بان العملية الحسابية قد انتهت

5. تستقبل الرسالة فى النافذة بنفس الطريقة التى تستقبل بها جميع الرسائل الاخرى, على سبيل المثال WM_LBUTTONDOWN

مثال سخيف ولكنه يشرح الفكرة

WM_MYMESSAGE = WM_USER+100h
int THREADID;
...
case WM_LBUTTONDOWN:
hThread=CreateThread(NULL,NULL,MyThreadProc, 0,&THRADID);
CLOSEHANDLE(hThread);
case WM_MYMESSAGE:
MessageBox(NULL,"Calculation finnished",NULL,MB_OK);
...
 void MyThreadProc(wParam:int) 
{
long x=0;
for(int i=0;i<90000000;i++)
x*=x;
PostMessage(hwnd,WM_MYMESSAGE,NULL,NULL); 
ret
}

طبعاً اكيد المثال فيه اخطاء كثيرة ولكنه يوضح الفكرة...

والسلام عليكم

لا إله إلا الله محمد رسول الله

busbar : يجب ان تدرك انه هناك حد ادنى للمعرفة المطلوبة قبل البدء في عمل أي شئ.

#27

بعض المرات يصبح برنامج معين في حالة not responding

متى تكون هذه الحاله في النظام وماذا يكون وضع ال processor وقتها ؟؟

#28

السلام عليكم

اخى عيسى عندما تكون واجهة المستخدم فى نفس الـThread معى جزء من البرنامج يقوم بعلم حسابات معقدة, فى هذه الحالة البرنامج لن يستجيب لضغطة الماوس او الكيبورد. اما إذا وضعت واجهة المستخدم فى Thread منفصل, فلن يحدث ذلك. وذلك لان كل جزء من البرنامج سوف يحصل على حصة من وقت المعالج .

لا إله إلا الله محمد رسول الله

busbar : يجب ان تدرك انه هناك حد ادنى للمعرفة المطلوبة قبل البدء في عمل أي شئ.

#29

بسم الله الرحمن الرحيم

جزاك الله عنا الف خير اخ احمد ونفعنا بعلمك والله الموضوع مهم جدا وغني جدا واتمنى ان أملك مثل هذه السوية العالية لتقديم

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

للمشاركة اكثر او التعلم منكم اكثر من خلال مشروع اعده خصيصا للفريق العربي يمكن تضمين كل ما ذكرت عليه

والسلام عليكم

#30

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

ممتاز .. كيف موضوع مثل هذا لم اطلع عليه للأن ؟؟!!

الموضوع مستمر .. يعني ممكن اسأل ؟؟

قبل ان نبدأ..

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

قرأت الموضوع .. ومعك حق فيما تقول ..

اقتباس
اضع هذا الموضوع لننتقل بمستوى المواضيع فى المنتدى من مستنقع مواضيع المبتدئين إلى مرحلة جديدة تشعرنا باننا نقوم بعلم جاد وليس فقط واجهة مستخدم..

الاخ cipher

اقتباس
هو من زمان هكذا

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

اكيد انا و امثالي من اساء لمستوى المنتدى .. بس تحملونا يعم !!

اقتباس
فتحت اكثر من موضوع هنا وفى قسم الاسمبلى ولكن لا حياة لمن تنادى, خلاص انا اقولكو احسن حل, لما تنتهو من صنع نافذة المستخدم ابعتولى رسالة عشان نكمل...

طيب .. ها انا ابعثلك و انادي .. خلونا نبدي و نقول يارب ..

خلص نفوت بالمادية العلمية ..

CreateProcess

بصراحة انا لم اعمل على هذه الدالة بعد .. لسه بأول المشوار مع دالة الثريد ..

لكن هذا جميل ..

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

يارب يستمر الموضوع الى ان نصل الى هذه المرحلة .. واهم شي الامثلة .

اعتقد الي ينقص الشرح مثال ..

هذا مثال بسيط عن الثريد اخذته من

msdn

#include <windows.h>
#include <process.h>	/* _beginthread, _endthread */
#include <stddef.h>
#include <stdlib.h>
#include <conio.h>

void Bounce( void *ch );
void CheckKey( void *dummy );

/* GetRandom returns a random integer between min and max. */
#define GetRandom( min, max ) ((rand() % (int)(((max) + 1) - (min))) + (min))

BOOL repeat = TRUE;	 /* Global repeat flag and video variable */
HANDLE hStdOut;		 /* Handle for console window */
CONSOLE_SCREEN_BUFFER_INFO csbi;  /* Console information structure */

void main()
{
	CHAR	ch = 'A';

	hStdOut = GetStdHandle( STD_OUTPUT_HANDLE );

	/* Get display screen's text row and column information. */
   GetConsoleScreenBufferInfo( hStdOut, &csbi );

	/* Launch CheckKey thread to check for terminating keystroke. */
	_beginthread( CheckKey, 0, NULL );

	/* Loop until CheckKey terminates program. */
	while( repeat )
	{
		/* On first loops, launch character threads. */
		_beginthread( Bounce, 0, (void *) (ch++)  );

		/* Wait one second between loops. */
		Sleep( 1000L );
	}
}

/* CheckKey - Thread to wait for a keystroke, then clear repeat flag. */
void CheckKey( void *dummy )
{
	_getch();
	repeat = 0;	/* _endthread implied */

}

/* Bounce - Thread to create and and control a colored letter that moves
 * around on the screen.
 *
 * Params: ch - the letter to be moved
 */
void Bounce( void *ch )
{
	/* Generate letter and color attribute from thread argument. */
	char	blankcell = 0x20;
	char	blockcell = (char) ch;
	BOOL	first = TRUE;
   COORD   oldcoord, newcoord;
   DWORD   result;


	/* Seed random number generator and get initial location. */
	srand( _threadid );
	newcoord.X = GetRandom( 0, csbi.dwSize.X - 1 );
	newcoord.Y = GetRandom( 0, csbi.dwSize.Y - 1 );
	while( repeat )
	{
		/* Pause between loops. */
		Sleep( 100L );

		/* Blank out our old position on the screen, and draw new letter. */
		if( first )
			first = FALSE;
		else
		 WriteConsoleOutputCharacter( hStdOut, &blankcell, 1, oldcoord, &result );
		 WriteConsoleOutputCharacter( hStdOut, &blockcell, 1, newcoord, &result );

		/* Increment the coordinate for next placement of the block. */
		oldcoord.X = newcoord.X;
		oldcoord.Y = newcoord.Y;
		newcoord.X += GetRandom( -1, 1 );
		newcoord.Y += GetRandom( -1, 1 );

		/* Correct placement (and beep) if about to go off the screen. */
		if( newcoord.X < 0 )
			newcoord.X = 1;
		else if( newcoord.X == csbi.dwSize.X )
			newcoord.X = csbi.dwSize.X - 2;
		else if( newcoord.Y < 0 )
			newcoord.Y = 1;
		else if( newcoord.Y == csbi.dwSize.Y )
			newcoord.Y = csbi.dwSize.Y - 2;

		/* If not at a screen border, continue, otherwise beep. */
		else
			continue;
		Beep( ((char) ch - 'A') * 100, 175 );
	}
	/* _endthread given to terminate */
	_endthread();
}

بصراحة في هذا المثال لم افهم دوال الكونسول التي ما انزل الله بها من سلطان !! .. لكن هذا ليس موضوعنا .. انا فقط اريد ان اسأل وارى هل انا فاهم الثريد صح ..

في المثال السابق

(طبعا البرنامج يطبع حرف وعند الضغط على أي key ينتهي البرنامج )

لو اننا نبرمج بصورة اعتيادية يعني بدون ثريد .. (برمجة عمودية ) سيكون التنفيذ من الاعلى الى الاسفل .. يعني اولا سينفذ دالة CheckKey ثم يستمر وينفذ دالة Bounce ولا سبيل للعودة الى دالة CheckKey ،

اما الذي حصل في الثريد (وهذا ما اريد التأكد منه ) ان دالة CheckKey ستبقى قيد التنفيذ (ستبقى مقيمة في الذاكرة ان صح التعبير ) و اما الدالة الاخرى Bounce هي الاخرى ستتنفذ بصورة مستقلة ، وما ان يضغط المستخدم على أي زر حتى تتنفذ دالة CheckKey وتصبح قيمة ال repeat تساوي صفر وبالتالي يتوقف البرنامج .

هذا الي فهمته من المثال السابق بصورة عامة .. (ترى فهمي ثقيييييل )

وان كان في غلط ارجو التصحيح ..

**

و هذا مثال اخر .. مأخوذ من نفس المصدر .. اضعه هنا للفائدة ، لكن لم يتنفذ ولا ادري ما السبب ، يطلع link error

#include <windows.h>
#include <conio.h>

DWORD WINAPI ThreadFunc( LPVOID lpParam ) 
{ 
	char szMsg[80];

	wsprintf( szMsg, "Parameter = %d.", *(DWORD*)lpParam ); 
	MessageBox( NULL, szMsg, "ThreadFunc", MB_OK );

	return 0; 
} 

VOID main( VOID ) 
{ 
	DWORD dwThreadId, dwThrdParam = 1; 
	HANDLE hThread; 
	char szMsg[80];

	hThread = CreateThread( 
		NULL,						// no security attributes 
		0,						   // use default stack size  
		ThreadFunc,				  // thread function 
		&dwThrdParam,				// argument to thread function 
		0,						   // use default creation flags 
		&dwThreadId);				// returns the thread identifier 

   // Check the return value for success. 

   if (hThread == NULL) 
   {
	  wsprintf( szMsg, "CreateThread failed." ); 
	  MessageBox( NULL, szMsg, "main", MB_OK );
   }
   else 
   {
	  _getch();
	  CloseHandle( hThread );
   }
}

طبعا معلومة للمبتدئين والي ينفذ ثريد لأول مرة ، اقرء ..

Whenever you create a multithreaded Windows program, you need to change something in the Project Settings dialog box. Select the C/C++ tab, and select Code Generation in the Category combo box. In the Use Run-Time Library combo box, you should see Single-Threaded for the Release configuration and Debug Single-Threaded for the Debug configuration. Change these to Multithreaded and Debug Multithreaded, respectively. This will change a compiler flag to /MT, which the compiler needs to compile a multithreaded application. In particular, the compiler inserts the LIBCMT.LIB filename in the .OBJ file rather than LIBC.LIB. The linker uses this name to link with the run-time library functions .

سؤال اخر ..

اقتباس
الخطوة الاولى عليك بتحديد رسالة جديدة, وذلك بتحديد عنوان للرسالة و طريقة تفاعل معى الرسالة.. على النحو التالى

#define WM_MYMESSAGE WM_USER+1
........

تستطيع ان تحدد اكثر من 65 الف رسالة شخصية بإضافتها للثابت WM_USER يعنى WM_USER+X وتضع فى مكان الX اى رقم فى حدود int ولكن غير مسموح ان تضع نفس الرقم لرسالتين مختلفتين..

للاستجابة للرسالة نقوم نقوم بالتالي..

case WM_MYMESSAGE
افعل ما تريد القيام به هنا
break;

ممكن شوية توضيح .. بصراحة لم افهم .. يعني متى ستتنفذ هذه الرسائل الشخصية ؟؟

ارجو ان يتسع صدركم لي .. انا صارلي فترة اقرء في موضوع الثريد لكن وبصراحة حسيته صعب واصابني الضجر وحاولت ان احيي الكثير من المواضيع الميته في هذا المنتدى التي هجرها كتابها لأن لم يجدو التفاعل حينها لكن دون جدوى .. وللأسف الكثير من المحترفين غادرو المنتدى لسبب او لأخر .. اولهم الاستاذ هاني الاتاسي ,, واخيرا (ولو هذا ما لا اتمناه) لكن صارلنا زمان لم نقرء مواضيع jaas الاكثر من رائعة .. بصراحة حاجة تقهر .. لكن ان شاء الله فيكم الخير والبركة ..

انا رجعلي الامل بعد ان قرأت هذا الموضوع (شكرا للمشرف محمد عبد العزيز الذي اعطاني الرابط ) وقرأت كلام الاستاذ احمد ..

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

هناك الكثير من الدوال التى يجب ان نناقشها وخاصة فى موضوع الـThreading و الـException handling و الـMemory Management و و و مواضيع لا حصر هلا ولم نناقش حتى الان سوى بيئة المستخدم ...

للحديث بقية

اخ احمد انا في الانتظار ..

اخي cipher .. الكلام موجه لك ايضا ;) .. لا تحرمنا من علمك

..

اما بخصوص ال CreateProcess فسأحاول ان اقرءها هل يومين واعود لأسأل ..

واتمنى ان ارى تكملة الموضوع ،

مثلا thread تعمل بشكل غير متزامن وهذا ممكن ان يسبب اخطاء ، ولتفادي هكذا نوع من الاخطاء يجب ان نزامن العمل Synchronizing Threads ، مثلا نستخدم الغرض mutex (mutual exclusion) وايضا ماذا عن ال Critical Section و و و و .. الكثير من الامور التي أن الاوان لتأخذ مكانها ..

و السلام عليكم ..

/index.php/topic/264448-%D8%A7%D9%84%D8%A8%D8%AF%D8%A7%D9%8A%D8%A9-%D9%85%D8%B9-%D8%A7%D9%84%D8%A7%D9%86%D8%AF%D8%B1%D9%88%D9%8A%D8%AF/

 

اني وان كنت الاخير زمانه ---- لأتِ بما لم تستطعه الاوائلُ

#32

شخصياً ليس لدي الوقت حالياً فانا مشغول بموضوع ACL و في هذه اللحظة مشغول جداً بـ Disassembling Regedit.exe ...

ربما أضع رد لاحقاً عن النقاط التي سألتها ولكن في البداية أنصحك بقرآة أي مقال او كتاب يشرح الـ thread لتأخذ فكرة صحيحة ولا تعتمد على أمثلة فقط

هناك نقطة وددت الإشارة اليها وهي بخصوص

#define WM_MYMESSAGE WM_USER+1

يفضل إستعمال التابع RegisterWindowMessage لتسجيل رسالة جديدة

اقتباس
متى ستتنفذ هذه الرسائل الشخصية ؟؟

الجواب : متى تتنفذ أي رسالة من رسائل النظام المعروفة لك؟

"First they ignore you, then they laugh at you, then they attack you, then you win"

===

اقتباس

حُكَّامُـنَا إِنْ تَصَـدّوا لِلْحِمَــى اقْتَحَمُـوا ***** وَإِنْ تَصَدَّى لَـهُ المُسْتَعْمِـرُ انْسَحَبُـوا

هُمْ يَفْرشـُونَ لِجَيْـشِ الغَــزْوِ أَعْيُنَـهُـمْ ***** وَيَدَّعُــونَ وُثُـوبَـاً قَـبْـلَ أَنْ يَثِـبُــوا

الحَاكِمُـونَ و«وَاشُنْـطُـنْ» حُكُومَتُـهُـمْ ***** وَاللامِعُــونَ وَمَـا شَعَّـوا وَلا غَرَبُــوا

القَاتِلُـــونَ نُبُــوغَ الشَّـعْــبِ تَرْضِـيَـــةً ***** لِلْمُعْتَدِيــنَ وَمَـا أَجْـدَتْـهُـمُ الـقُــرَبُ

لَهُمْ شُمُـوخُ «المُثَنَّـى» ظَاهِـرَاً وَلَهُـمْ ***** هَـوَىً إِلَـى بَابَـك الخَرْمِـيّ يُنْتَسَـبُ

البردوني "أبو تمام وعروبة اليوم" 1971

===

اقتباس
عبيد الهوى يحكمون البـلاد ***** ويحكمهــم كلّهـــم درهــــــم

و تقتـادهـم شهـوة لا تنــام ***** وهـــم فـي جـهالتهــم نــــوّم

ففــي كـــلّ ناحيــة ظـالـــم ***** غبــــــيّ يسـلـّطــــه أظلـــم

أيا من شبعتم على جوعــنا ***** وجـــوع بنينـا ألـم تتخمـــوا ؟

ألم تفهموا غضبة الكادحين ***** على الظلـم ؟ لا بدّ أن تفهموا

البردوني "نحن و الحاكمون "

#33

السلام عليكم

للاسف قمت بكتابة رد مطول ولكن المتصفح الغبي اصيب بجنون البقر وحذف كل شئ..

على كل حال دعنى اكتب بإختصار الاجابة التى امضيت فيها نصف ساعة

اولاً لمعرفة الـThreads يحب ان نفهم رسائل الوندوز وكذلك الـCallBack::

هناك طريقتين لارسال الرسائل ونوعين من الرسائل..

الطريقة الاولى هى عن طريق الاستدعاء المباشر باستخدام الدالة

SendMessage

او باستدعاء الدوال الجاهزة مثل

ValidateRgn

RedrawWindow

الخ

هناك العديد من الرسائل ولكل رسائلة من رسائل الوندوز هناك عدة طرق لاستدعائها...

اما انواع الرسائل فهى إما ان تكون رسائل الوندوز او الرسائل التى تم إنشائها من قبل المستخدم وهى كما ذكرنا سابقاً 65 الف رسالة تقريباً يستطيع المستخدم إنشائها..

طبعاً الرقم كبير جداً ولن يحتاج المستخدم لكل هذا الكم من الرسائل ولكن ذكرت ذلك فقط حتى يعرف المستخدم ماهى الحدود المتاحه...

للقيام بعمل مثل هذه الرسائل نقوم بتعريفها عن طريق المتغير WM_USER طبعاً تستطيع ان تسميها ما شئت .. ولكن التسمية المتعارف عليها دائماً تبداء ب WM_.

لاستدعاء هذه الرسائل يمكنك إستخدام الدالة SendMessage ويمكنك اثضاً ارسائل متغيرات معى الدالة دعنى اضع مثال توضيحي بسيط

#define WM_MYMESSAGE WM_USER+1
........

الان تم تعريف WM_MYMESSAGE كرسالة جديدة فى البرنامج نقوم الان بإستدعائها نم WM_COMMAND على النحو التالي..

case uMsg==WM_COMMAND
SendMessage(hWnd,WM_MYMESSAGE,1,2)
........
case uMsg==WM_MYMESSAGE
if(WPARAM==1&&LPARAM==2)
DoSomthing();
ELSE
DoNothing();
......

وطبعاً تستطيع ان تستدعي الرسالة من اي مكان فى البرنامج..

بالنسبة لفهمك للمثال المطروح فى MSDN فهو جيد ...

لي عودة إن شاء الله عن ما قريب

والسلام عليكم

لا إله إلا الله محمد رسول الله

busbar : يجب ان تدرك انه هناك حد ادنى للمعرفة المطلوبة قبل البدء في عمل أي شئ.

#34

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

الحمد لله .. وشكرا على الرد ..

اخي

اقتباس
ليس لدي الوقت حالياً فانا مشغول

بكل تأكيد انا لا اريد ان ااثر عليكم .. على راحتك اخي الكريم .. وانا في الانتظار ما ان يتسنى لك ذلك ..

اخي احمد ..

شكرا على الرد ..

جاري التحميل .. وسأعود في اقرب فرصة بعد قراءة الردود

/index.php/topic/264448-%D8%A7%D9%84%D8%A8%D8%AF%D8%A7%D9%8A%D8%A9-%D9%85%D8%B9-%D8%A7%D9%84%D8%A7%D9%86%D8%AF%D8%B1%D9%88%D9%8A%D8%AF/

 

اني وان كنت الاخير زمانه ---- لأتِ بما لم تستطعه الاوائلُ

#35

السلام عليكم ..

اقتباس
متى تتنفذ أي رسالة من رسائل النظام المعروفة لك؟

سؤال محرج ؟؟

مثلا .. الرسالة WM_LBUTTONUP تنفذ بعد الضغط على الزر الايسر للماوس (بعد رفع اليد) .. وهكذا كل رسالة مرتبطة بحدث معين ..

لكن هذه الرسايل ؟؟

يعني هل معنى هذا اني انا ممكن ان اكتب رسالة لحدث معين ثم اجعل برنامجي يستجيب لهذا الحدث ..

اقتباس
دعنى اضع مثال توضيحي بسيط

#define WM_MYMESSAGE WM_USER+1
........

الان تم تعريف WM_MYMESSAGE كرسالة جديدة فى البرنامج نقوم الان بإستدعائها نم WM_COMMAND على النحو التالي..

case uMsg==WM_COMMAND
SendMessage(hWnd,WM_MYMESSAGE,1,2)
........
case uMsg==WM_MYMESSAGE
if(WPARAM==1&&LPARAM==2)
DoSomthing();
ELSE
DoNothing();
......

وطبعاً تستطيع ان تستدعي الرسالة من اي مكان فى البرنامج..

بصراحة .. لا زلت لا افهم ؟؟؟؟

اعتقد المثال التوضيحي ناقص .. يعني مازلت لا اعرف ..

الرسالة التي عرفناها تحديدا متى ستستدعى ؟؟

يعني متى سيتحقق هذا الجزء

case uMsg==WM_MYMESSAGE

اسف على الإلحاح بس عاوز افهم ..

==

بخصوص الدالة CreateProcess

هل تستخدم لتنفيذ برنامج معين موجود مسبق .. فقط ؟؟ ام تستخدم ايضا في تكوين برنامج ؟؟

وماذا ستفرق عن openprocess ؟؟

..

بالنسبة للدوال

ExitProcess
CloseHandle
TerminateProcess
GetExitCodeProcess

هذا كود مأخوذ من احد الكتب

DWORD ExitCode;
GetExitCodeProcess (ProcessInfo.hProcess , &ExitCode);
if(ExitCode ==STILE_ACTIVE)
//  process is still running …
Else
// process has terminated & exit code contains its exit code ..

في الكود السابق اذا لم يتحقق الشرط ، ماذا سأضع ؟؟ ، هل اكتب ExitProcess

و متى لن سيتحقق الشرط اساسا ؟؟؟

اقتباس
انا استخدمها احياناً عند تشغيل برنامج غير موثوق المصدر, بحيث احدد له صلاحيات معينه وامنعه مثلاً من إغلاق الجهاز

هل يتم ذلك بأستخدام الباراميتر الرابع والثالث lpsaProcess and lpsaThread ؟؟

ياريت يا اخ احمد ان تضع لنا مثال (بدائي وسهل) .. لكن غير الذي موجود في ال MSDN

اخيرا ..

و ارجو ان يتسع صدركم لأسئلتي الكثيرة !!!!

المقطع التالي ...

CreateProcess(NULL, "\"C:\Program Files\MyApp.exe\" -L -S", ...)

ما معنى هذا -L –S ؟؟

ارجو التواصل

السلام عليكم ...

/index.php/topic/264448-%D8%A7%D9%84%D8%A8%D8%AF%D8%A7%D9%8A%D8%A9-%D9%85%D8%B9-%D8%A7%D9%84%D8%A7%D9%86%D8%AF%D8%B1%D9%88%D9%8A%D8%AF/

 

اني وان كنت الاخير زمانه ---- لأتِ بما لم تستطعه الاوائلُ

#36

ربما الأخ أحمد يكتب رد مطول الآن لانه متواجد في الموضوع

على العموم أنا سأكتب رد مختصر

اقتباس
بصراحة .. لا زلت لا افهم ؟؟؟؟

اعتقد المثال التوضيحي ناقص .. يعني مازلت لا اعرف ..

الرسالة التي عرفناها تحديدا متى ستستدعى ؟؟

لو لاحظت كود الأخ أحمدستجد هذا السطر

SendMessage(hWnd,WM_MYMESSAGE,1,2)

ماذا يعني ؟

اقتباس
بخصوص الدالة CreateProcess

هل تستخدم لتنفيذ برنامج معين موجود مسبق .. فقط ؟؟ ام تستخدم ايضا في تكوين برنامج ؟؟

وماذا ستفرق عن openprocess ؟؟

هذه هي الأسئلة التي تجلعنا نترك هذه المواضيع .. هل قرأت MSDN جيداً قبل أن تسأل؟

لن يأتي شخص ليوضح لك جميع النقاط هنا خصوصاً تلك التي تجدها في MSDN بشكل واضح ..

اقتباس
ما معنى هذا -L –S ؟؟

هل قرأت عن command line؟

ربما طريقتي في الإجابة لن تعجبك .. لكن هناك أشياء يجب أن تعلمها قبل وضع أي تساؤل ..

هذه المواضيع تحتاج مزاج رائق وتركيز شديد ... التسرع شئ سئ جداً . عليك أن تتأنى حين تقرأ , إقرأ الموضوع 5 مرات على الأقل ..

تم تعديل هذه المشاركة بواسطة cipher في 6 أغسطس 2006 في 19:16

"First they ignore you, then they laugh at you, then they attack you, then you win"

===

اقتباس

حُكَّامُـنَا إِنْ تَصَـدّوا لِلْحِمَــى اقْتَحَمُـوا ***** وَإِنْ تَصَدَّى لَـهُ المُسْتَعْمِـرُ انْسَحَبُـوا

هُمْ يَفْرشـُونَ لِجَيْـشِ الغَــزْوِ أَعْيُنَـهُـمْ ***** وَيَدَّعُــونَ وُثُـوبَـاً قَـبْـلَ أَنْ يَثِـبُــوا

الحَاكِمُـونَ و«وَاشُنْـطُـنْ» حُكُومَتُـهُـمْ ***** وَاللامِعُــونَ وَمَـا شَعَّـوا وَلا غَرَبُــوا

القَاتِلُـــونَ نُبُــوغَ الشَّـعْــبِ تَرْضِـيَـــةً ***** لِلْمُعْتَدِيــنَ وَمَـا أَجْـدَتْـهُـمُ الـقُــرَبُ

لَهُمْ شُمُـوخُ «المُثَنَّـى» ظَاهِـرَاً وَلَهُـمْ ***** هَـوَىً إِلَـى بَابَـك الخَرْمِـيّ يُنْتَسَـبُ

البردوني "أبو تمام وعروبة اليوم" 1971

===

اقتباس
عبيد الهوى يحكمون البـلاد ***** ويحكمهــم كلّهـــم درهــــــم

و تقتـادهـم شهـوة لا تنــام ***** وهـــم فـي جـهالتهــم نــــوّم

ففــي كـــلّ ناحيــة ظـالـــم ***** غبــــــيّ يسـلـّطــــه أظلـــم

أيا من شبعتم على جوعــنا ***** وجـــوع بنينـا ألـم تتخمـــوا ؟

ألم تفهموا غضبة الكادحين ***** على الظلـم ؟ لا بدّ أن تفهموا

البردوني "نحن و الحاكمون "

#37

وعليكم السلام

اقتباس
سؤال محرج ؟؟

مثلا .. الرسالة WM_LBUTTONUP تنفذ بعد الضغط على الزر الايسر للماوس (بعد رفع اليد) .. وهكذا كل رسالة مرتبطة بحدث معين ..

لكن هذه الرسايل ؟؟

يعني هل معنى هذا اني انا ممكن ان اكتب رسالة لحدث معين ثم اجعل برنامجي يستجيب لهذا الحدث ..

بالتاكيد يمكنك عمل رسائل خاصة بك, انت تحدد الحدث واتحدد ايضاً الرسالة...

اقتباس
بصراحة .. لا زلت لا افهم ؟؟؟؟

اعتقد المثال التوضيحي ناقص .. يعني مازلت لا اعرف ..

الرسالة التي عرفناها تحديدا متى ستستدعى ؟؟

الرسالة التى حددناها نستدعيها عن طريق الدالة

SendMessage(hWnd,WM_MYMESSAGE,1,2)

وهذه الدالة يمكننا ان نستدعيها من اي مكان فى البرنامج ...

اقتباس
بخصوص الدالة CreateProcess

هل تستخدم لتنفيذ برنامج معين موجود مسبق .. فقط ؟؟ ام تستخدم ايضا في تكوين برنامج ؟؟

وماذا ستفرق عن openprocess ؟؟

نعم CreateProcess هى لتنفيذ برامج مثل ShellExecute ولكن تستطيع هنا تحديد صلاحيات البرنامج وتحديد صلاحيات المستخدم, يعنى عن طريق CreateProcess تستطيع ان تجعل البرنامج يعمل فى بيئة المستخدم العادي بدل ان يعمل فى بيئة الAdministrator ... وهكذا...

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

GetExitCodeProcess نستخدمها للحصول على كود خروج برنامج, يعنى إذا برنامج انهى عمله فإن الدالة ExitCode ستحصل على رقم يحدد ما إذا انهى عمله بدون مشاكل ام ان هناك خلل اثناء إنهاء العمل, الدالة نفسها تعيد boolean يعنى يا 0 يا 1, إذا حصلنا من الدالة على 0 معنى ذلك انها لم تستطع التحقق من ما إذا كان البرنامج انهى مهمته بسلام ام لا...

اقتباس
في الكود السابق اذا لم يتحقق الشرط ، ماذا سأضع ؟؟ ، هل اكتب ExitProcess

و متى لن سيتحقق الشرط اساسا ؟؟؟

يتوقف على ما تنوي عمله, ولكن حسب الدالة GetExitCodeProcess فإن البرنامج لم يعد فى الذاكرة وبذلك ان تستطيع عمل ExitProcess..

طبعاً يجب الاول التحقق ان الداله GetExitCodeProcess اعادت True يعنى يجب ان تتحقق من ان الدالة استكمت مهمتها بنجاح.. وبعد ذلك تقوم تقوم بالتحقق من ما إذا كان البرنامح مازال فى الذاكرة ام لا...

اقتباس
هل يتم ذلك بأستخدام الباراميتر الرابع والثالث lpsaProcess and lpsaThread ؟؟

ياريت يا اخ احمد ان تضع لنا مثال (بدائي وسهل) .. لكن غير الذي موجود في ال MSDN

إجابة السؤال الاول هى نعم

LPSECURITY_ATTRIBUTES lpProcessAttributes,
  LPSECURITY_ATTRIBUTES lpThreadAttributes,

هى التى تحدد الصلاحيات

اما بالنسبة للمثال للاسف ليس لدي كمبايلر C الان ولكن يوجد العدد من الامثلة فى الانترنت يمكنك إستخدام google وستحصل على الاف الامثلة إن شاء الله..

اقتباس
ما معنى هذا -L –S ؟؟

هذا جزء من البرنامج مثل عندما تكتب فى اومر الدوس

dir /s

ومازال التواصل مستمر...

والسلام عليكم

لا إله إلا الله محمد رسول الله

busbar : يجب ان تدرك انه هناك حد ادنى للمعرفة المطلوبة قبل البدء في عمل أي شئ.

#38

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

سأقرء الرد ولي عودة بعون الله

بس عالسريع

اقتباس
هذه هي الأسئلة التي تجلعنا نترك هذه المواضيع .. هل قرأت MSDN جيداً قبل أن تسأل؟

ما شي يعم .. حقك علينا ..

اعدك سأبذل قصار جهدي قبل ان اسئل مرة اخرى ..

لكن لا تنسى بأني مبتدأ جدا جدا .. و لا زلت في اول الطريق ..

ارجو منك ومن اخي احمد التواصل ..

فلولا وجودكما لما استمريت في هذا الموضوع ، فمجرد ردكم هو تشجيع لي ..

اخ cipher ،

كنت اتمنى ردك في سؤالي عن الهوك في منتدي السي لأني اعرف مدى علمك في هذا الموضوع ،،

لكن يبدو ان سؤالي لم يعجبك ;) لأنه متواضع جدا

سأحاول ان شاء الله ان ارفع من مستواي ..

بعون الله .. ثم بوجودكم ..

جزاكم الله كل خير ..

/index.php/topic/264448-%D8%A7%D9%84%D8%A8%D8%AF%D8%A7%D9%8A%D8%A9-%D9%85%D8%B9-%D8%A7%D9%84%D8%A7%D9%86%D8%AF%D8%B1%D9%88%D9%8A%D8%AF/

 

اني وان كنت الاخير زمانه ---- لأتِ بما لم تستطعه الاوائلُ

#39
اقتباس
اخ cipher ،

كنت اتمنى ردك في سؤالي عن الهوك في منتدي السي لأني اعرف مدى علمك في هذا الموضوع ،،

لكن يبدو ان سؤالي لم يعجبك لأنه متواضع جدا

:wacko:

ما هذا الكلام؟

أنا وضعت رد هناك قبل أن أقرأ ردك هنا ..

"First they ignore you, then they laugh at you, then they attack you, then you win"

===

اقتباس

حُكَّامُـنَا إِنْ تَصَـدّوا لِلْحِمَــى اقْتَحَمُـوا ***** وَإِنْ تَصَدَّى لَـهُ المُسْتَعْمِـرُ انْسَحَبُـوا

هُمْ يَفْرشـُونَ لِجَيْـشِ الغَــزْوِ أَعْيُنَـهُـمْ ***** وَيَدَّعُــونَ وُثُـوبَـاً قَـبْـلَ أَنْ يَثِـبُــوا

الحَاكِمُـونَ و«وَاشُنْـطُـنْ» حُكُومَتُـهُـمْ ***** وَاللامِعُــونَ وَمَـا شَعَّـوا وَلا غَرَبُــوا

القَاتِلُـــونَ نُبُــوغَ الشَّـعْــبِ تَرْضِـيَـــةً ***** لِلْمُعْتَدِيــنَ وَمَـا أَجْـدَتْـهُـمُ الـقُــرَبُ

لَهُمْ شُمُـوخُ «المُثَنَّـى» ظَاهِـرَاً وَلَهُـمْ ***** هَـوَىً إِلَـى بَابَـك الخَرْمِـيّ يُنْتَسَـبُ

البردوني "أبو تمام وعروبة اليوم" 1971

===

اقتباس
عبيد الهوى يحكمون البـلاد ***** ويحكمهــم كلّهـــم درهــــــم

و تقتـادهـم شهـوة لا تنــام ***** وهـــم فـي جـهالتهــم نــــوّم

ففــي كـــلّ ناحيــة ظـالـــم ***** غبــــــيّ يسـلـّطــــه أظلـــم

أيا من شبعتم على جوعــنا ***** وجـــوع بنينـا ألـم تتخمـــوا ؟

ألم تفهموا غضبة الكادحين ***** على الظلـم ؟ لا بدّ أن تفهموا

البردوني "نحن و الحاكمون "

#40

انا امزح فقط ..

بارك الله فيك ..

اقرء

اقتباس
سأحاول ان شاء الله ان ارفع من مستواي ..

بعون الله .. ثم بوجودكم ..

/index.php/topic/264448-%D8%A7%D9%84%D8%A8%D8%AF%D8%A7%D9%8A%D8%A9-%D9%85%D8%B9-%D8%A7%D9%84%D8%A7%D9%86%D8%AF%D8%B1%D9%88%D9%8A%D8%AF/

 

اني وان كنت الاخير زمانه ---- لأتِ بما لم تستطعه الاوائلُ

#41

السلام عليكم ،

نرجع للموضوع ..

شكرا اخي احمد على الاجابة ... ومشكور اخي cipher على النصيحة ..

لقد قررت ان اعود من البداية وامسك الموضوع رويدا رويدا واحاول ان اقرء كل شيء على مهل ..

اقتباس
هذه المواضيع تحتاج مزاج رائق وتركيز شديد ... التسرع شئ سئ جداً . عليك أن تتأنى حين تقرأ , إقرأ الموضوع 5 مرات على الأقل ..

هذه المواضيع من ال msdn

•	About Processes and Threads 
•	Using Processes and Threads 
•	Process and Thread Reference

وجدتها تحت عنوان Processes and Threads

وكل واحدة منها متفرعة الى عدة اقسام ..

المهم سأحاول اقرءها الواحدة بعد الاخرى وايضا القراءة في بعض الكتب التي لدي ..

وسأعود لكم كل حين لوضع اسئلتي واستفساراتي ..

وارجو ان لا ازعجكم ..

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

واذا لديكم نصيحة .. او مصادر ربما تفيدني في قراءتي ..

فأرجو ان تدلوني عليها ..

،،،،،،،

المهم ،

بالنسبة لأضافة رسائل ،

قرأت مقال في احدى المواقع الاجنبة بعنوان message management

بصراحة لم انتهي منه بعد ، لكنه مفيد

بس لدي استفسار ..

صاحب المقالة عندما تكلم عن WM_USER

قال ،،

This technique is obsolete. There were too many problems with WM_USER-based symbols conflicting with messages that Microsoft was using. The new method is to use WM_APP as the base. If you have something that uses WM_USER, the usage is identical to the usage of messages based on WM_APP.

ما هذا الكلام ؟؟؟؟؟

و شيء اخر ،

There is a program which is part of the SDK, called GUIDGEN.

ما هذا البرنامج وكيف يستخدم ؟؟

قرأت بس ما فهمت :^)

اعتذر من الاخ احمد اذا خرجت عن الموضوع الاساسي ،

لي عودة عن قريب ان شاء ربي بعد قراءة مواضيع الثريد و البروسيس ،،

ارجو ان يتسع صدركم لي ..

اقتباس
ومازال التواصل مستمر...

هذا جل ما اتمناه منك اخي ومن الاخ cipher ،

فما زال مشوراي طويل ،،

السلام عليكم ..

/index.php/topic/264448-%D8%A7%D9%84%D8%A8%D8%AF%D8%A7%D9%8A%D8%A9-%D9%85%D8%B9-%D8%A7%D9%84%D8%A7%D9%86%D8%AF%D8%B1%D9%88%D9%8A%D8%AF/

 

اني وان كنت الاخير زمانه ---- لأتِ بما لم تستطعه الاوائلُ

#42
اقتباس
ما هذا الكلام ؟؟؟؟؟

المقال الذي تكلمت عنه واضح جداً Message Management. وهذه النقطة مشار إليها من زمان ..

بامكانك عمل مثال للتأكد من حكاية الـ conflict ..فقط يقوم برنامجين مختلفين بتعريف نفس الرسالة وقد ينجم عن ذلك مشاكل ...

لهذا انا قلت في رد سابق لي

اقتباس
يفضل إستعمال التابع RegisterWindowMessage لتسجيل رسالة جديدة

في نقاط كثيرة العديد من البرامج لا تهتم بها منها تسجيل رسالة جديدة , تسجيل hotkey ...

اقتباس
ما هذا البرنامج وكيف يستخدم ؟؟

بالنسبة لـ GUIDEN فستجده هنا

Microsoft Exchange Server GUID Generator

إن كنت قرأت عن COM Programming فسيمر عليك هذا المصطلح GUID وهي قيمة وحيدة -من الصعب تكررها- يتم الحصول عليها بخوارزمية معقدة (قام بتعريفها Open Software Foundation ) حيث يؤخذ بعين الإعتبار عدة أشياء منها التاريخ والوقت و الـ network card -إن وجد- وكما تعلم أن لكل network card هنا MAC وحيد ..

بامكانك الحصول على GUID جديد باستعمال CoCreateGuid ...

لمعلومات أكثر عن GUID راجع GUID

تم تعديل هذه المشاركة بواسطة cipher في 13 أغسطس 2006 في 19:40

"First they ignore you, then they laugh at you, then they attack you, then you win"

===

اقتباس

حُكَّامُـنَا إِنْ تَصَـدّوا لِلْحِمَــى اقْتَحَمُـوا ***** وَإِنْ تَصَدَّى لَـهُ المُسْتَعْمِـرُ انْسَحَبُـوا

هُمْ يَفْرشـُونَ لِجَيْـشِ الغَــزْوِ أَعْيُنَـهُـمْ ***** وَيَدَّعُــونَ وُثُـوبَـاً قَـبْـلَ أَنْ يَثِـبُــوا

الحَاكِمُـونَ و«وَاشُنْـطُـنْ» حُكُومَتُـهُـمْ ***** وَاللامِعُــونَ وَمَـا شَعَّـوا وَلا غَرَبُــوا

القَاتِلُـــونَ نُبُــوغَ الشَّـعْــبِ تَرْضِـيَـــةً ***** لِلْمُعْتَدِيــنَ وَمَـا أَجْـدَتْـهُـمُ الـقُــرَبُ

لَهُمْ شُمُـوخُ «المُثَنَّـى» ظَاهِـرَاً وَلَهُـمْ ***** هَـوَىً إِلَـى بَابَـك الخَرْمِـيّ يُنْتَسَـبُ

البردوني "أبو تمام وعروبة اليوم" 1971

===

اقتباس
عبيد الهوى يحكمون البـلاد ***** ويحكمهــم كلّهـــم درهــــــم

و تقتـادهـم شهـوة لا تنــام ***** وهـــم فـي جـهالتهــم نــــوّم

ففــي كـــلّ ناحيــة ظـالـــم ***** غبــــــيّ يسـلـّطــــه أظلـــم

أيا من شبعتم على جوعــنا ***** وجـــوع بنينـا ألـم تتخمـــوا ؟

ألم تفهموا غضبة الكادحين ***** على الظلـم ؟ لا بدّ أن تفهموا

البردوني "نحن و الحاكمون "

#43

السلام عليكم ..

مشكور اخي الكريم وما قصرت والله ،

جاري التحميل ،

و العودة .. في اقرب فرصة ان شاء الله

/index.php/topic/264448-%D8%A7%D9%84%D8%A8%D8%AF%D8%A7%D9%8A%D8%A9-%D9%85%D8%B9-%D8%A7%D9%84%D8%A7%D9%86%D8%AF%D8%B1%D9%88%D9%8A%D8%AF/

 

اني وان كنت الاخير زمانه ---- لأتِ بما لم تستطعه الاوائلُ

#44

السلام عليكم ،

قرأت انه لعمل ثريد نستخدم اما دالة CreateThread او نستخدم CreateRemoteThread

الدالة الاولى واضحة و لكن الدالة الثانية ، ماذا تفرق عن الاولى ..

انا قرأت في ال msdn الذي قول :

The CreateRemoteThread function creates a thread that runs in the virtual address space of another process.

لكن ممكن شوية توضيح !!

فمن الصعب علي ان استوعب دالة بسطر واحد ،

يعني ممكن توضيح تطبيقات هذه الدالة وكيف تفيد ؟

--

ان احد باراميترت هذه الدالة هو

dwStackSize 
[in] Specifies the initial commit size of the stack, in bytes. The system rounds this value to the nearest page.

ممكن توضيح ،

طبعا بانظر ال msdn

Thread Stack Size
Each new thread receives its own stack space, consisting of both committed and reserved memory. The system will commit one page blocks from the reserved stack memory as needed, until the stack cannot grow any farther.

بصراحة ماعد استوعب يمكن لأنني اساسا لا اعرف كيف يتم التعامل مع الذاكرة :(

/index.php/topic/264448-%D8%A7%D9%84%D8%A8%D8%AF%D8%A7%D9%8A%D8%A9-%D9%85%D8%B9-%D8%A7%D9%84%D8%A7%D9%86%D8%AF%D8%B1%D9%88%D9%8A%D8%AF/

 

اني وان كنت الاخير زمانه ---- لأتِ بما لم تستطعه الاوائلُ

#45

السلام عليكم

ساشرح بإختصار شديد لان ا غلب هذه الامور موجودة ومشروحة بإستفاضة فى MSDN ..

بارمج الوندوز تسمي Process كل Process يحتوى على الاقل على Thread واحد ويمكنه إنشاء اكثر من Thread فى هذه الحالة يسمي البرنام جMulti Threaded كما يمكنه إنشاء ChildProcess والذي بدورة يحتوى على الاقل على Thread واحد وهاكذا...

الThread تستطيع ان تحتوي على Fiber والFiber هى عبارة عن Thread مصغر يستطيع عمل تشغيل ذاتي للThread فى وقت معين يحدده المبرمج ويسمي Scheduled Thread .

Job هو عبارة عن وعاء يحتوى على مجموعة من الProcess وذلك لتسهيل عملية التحكم فى اكثر من Process فى ان واحد, مثلاُ إعطاء جميع الProcess التى تقع تحت نفس الJob صلاحيات معينة...

الدالة CreateThread تستطيع إنشاء Thread فى نفس الProcess الذي تنتمي له فى حين CreateRemoteThread تستطيع إنشاء Thread فى Process اخر معى مراعاة الصلاحيات التى تسمح لها بعمل ذلك..

بالنسبة للStack فكل Thread مستقل وله Stack خاص به والذاكرة Local memory خاصة به فى حين انه يشترك معى باقي الThreads فى الذاكرة العامة Global memory ...

افترض الان ان لديك 2 Threads ينتمو لنفس الProcess إذا قام الThread الاول بتغير متغير من نوع Global ثم جاء اللThread الثاني وقام بتغير نفس المتغير وإعطائة قيمة مختلف فلن تستطيع استغلال القيمة الاولى التى وضعها الThread الاول, لذلك عليك ان تستخدم تقنية الSynchronizing Execution وهذه تقنية يطول شرحها ولكن دعها الان حتى ياتي وقتها, بالنسبة للLocal memory يمكنك ان تغير المتغيرات التى تخص اي Thread بدون ان تتاثر بباقي الThreads الاخرى لانها لن تؤاثر على سير البرنامج..

ارجو ان اكون قد وضحت ولو القليل ويمكنك ان تراجع الامثلة فى MSDN لان بها الاجابة الشافية لمثل هذه المواضيع...

والسلام عليكم

لا إله إلا الله محمد رسول الله

busbar : يجب ان تدرك انه هناك حد ادنى للمعرفة المطلوبة قبل البدء في عمل أي شئ.

#46

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

اقتباس
ارجو ان اكون قد وضحت ولو القليل

الله يفتح عليك ..

و الله ما قصرت يا اخي ،

وكما يقال خير الكلام ما قل و دل ;)

---

اقتباس
CreateRemoteThread تستطيع إنشاء Thread فى Process اخر معى مراعاة الصلاحيات التى تسمح لها بعمل ذلك..

جميل جدا ،

اظنه موضوع ممتع ..

يارب .. متى أصل الى هذا المستوى :(

/index.php/topic/264448-%D8%A7%D9%84%D8%A8%D8%AF%D8%A7%D9%8A%D8%A9-%D9%85%D8%B9-%D8%A7%D9%84%D8%A7%D9%86%D8%AF%D8%B1%D9%88%D9%8A%D8%AF/

 

اني وان كنت الاخير زمانه ---- لأتِ بما لم تستطعه الاوائلُ

#47

السلام عليكم ،،

واخيرا ،، بدأت افهم !!!!

شكرا لكما ..

كان لدي لخبطة في الدالة createprocess ، وهذا لأني لا كنت اعرف تعريف دقيق لل process !!

لكن بعد قراءة رد الاستاذ احمد

وقراءة التالي ، اتضحت تماما ..

A program is an EXE file that you can launch in various ways in Windows. Once a program is running, it's called a process. A process owns its memory, file handles, and other system resources. If you launch the same program twice in a row, you have two separate processes running simultaneously.

ومع قراءة مثال بسيط ،، اتضحت الصورة اكثر ،،

بقي الان ان افوت بتفاصيل هذه الدالة وكيفية استخدام خصائصها بعون الله ،

بس ممكن توضيح على هذا ..

Sometimes the need arises to launch a process and delay just long enough to make sure the process is started and responding to user input. If process A launches process B and process B creates a window, for example, and process A wants to send that window a message, process A might have to wait for a moment after ::CreateProcess returns to give process B time to create a window and begin processing messages. This problem is easily solved with the Win32 ::WaitForInputIdle function:
STARTUPINFO si;
::ZeroMemory (&si, sizeof (STARTUPINFO));
si.cb = sizeof (STARTUPINFO);
PROCESS_INFORMATION pi;

if (::CreateProcess (NULL, _T ("C:\\Windows\\Notepad"), NULL,
	NULL, FALSE, NORMAL_PRIORITY_CLASS, NULL, NULL, &si, π)) {
	::CloseHandle (pi.hThread);
	::WaitForInputIdle (pi.hProcess, INFINITE);
	// Get B's window handle and send or post a message.
	::CloseHandle (pi.hProcess);
}
::WaitForInputIdle suspends the current process until the specified process begins processing messages and empties its message queue. I didn't show the code to find the window handle because there isn't a simple MFC or API function you can call to convert a process handle into a window handle. Instead, you must use ::EnumWindows, ::FindWindow, or a related function to search for the window based on some known characteristic of the owning process.

لم افهم هذه المشكلة !!!!!

وايضا هذا ..

To create a process that runs in a different security context, use the CreateProcessAsUser or CreateProcessWithLogonW function.

لم افهم معنى

different security context

بقي الان ،،

الدالة CreateRemoteThread

انا حابب اطبق عمليا هذه الدالة لكن ،، لا زلت لا افهمها ،،

اقتباس
CreateRemoteThread تستطيع إنشاء Thread فى Process اخر معى مراعاة الصلاحيات التى تسمح لها بعمل ذلك..

كيف يتم هذا ،،

ممكن توضيح ،

يعني البروسيس عبارة عن برنامج يتنفذ ،

كيف اكتب ثريد تعمل معه ؟؟

اتمنى توضيح على هذه النقطة ..

أسأل الله ان لا اكون ازعجكم بأسئلتي ..

جزاكم الله كل خير ،،

********

الى الاستاذ احمد ،،

لكونك صاحب الموضوع ،،

هل تسمج لي بالاستمرار بإضافة اسئلتي هنا ، فالموضوع موضوعك ،،

كما قرأتُ ، وصف الموضوع هو .. موضوع للمناقشة ..

وهذا ما دفعني لكي اضع اسئلتي هنا ،،

اذا كان يغضبك هذا الشيء ، فأرجو ان تخبرني ،،

اعرف كان المفروض اخذ الأذن من زمان ،،

لكن .....

- وما انسانيه الا الشيطان ان اذكره –

السلام عليكم

/index.php/topic/264448-%D8%A7%D9%84%D8%A8%D8%AF%D8%A7%D9%8A%D8%A9-%D9%85%D8%B9-%D8%A7%D9%84%D8%A7%D9%86%D8%AF%D8%B1%D9%88%D9%8A%D8%AF/

 

اني وان كنت الاخير زمانه ---- لأتِ بما لم تستطعه الاوائلُ

#48

Three Ways to Inject Your Code into Another Process: III - The CreateRemoteThread & WriteProcessMemory Technique

وكتاب Programming Applications for Microsoft Windows الفصل رقم 22 DLL Injection and API Hooking

واقرأ المواضيع اكثر من مره , ولا تنتقل من نقطة للاخرى الا بعد فهم الاولى

تم تعديل هذه المشاركة بواسطة Asm4all في 26 أغسطس 2006 في 13:00

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

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