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

[ تمت الإجابة ]كيف أتعامل مع Device في Windows

مغلق
بدأه برق في 22 يوليو 2008 · 6 رد · 3,123 مشاهدة · في أرشيف قسم Windows APIs
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

سؤال بريء B)

لو أردت التعامل مع نوع معين من device ، مثل keyboard ,network card, hard disk ,..... ، فكيف يمكن ذلك ؟ وبأي دالة

فمثلا عندنا في اللينوكس ، كل device له major and minor number ومن خلالهما يمكن التعامل مع device بالدوال العادية

بالنسبة لل windows api ، هل الدوال التي بداخله هي التي تتعامل مع النواة مباشرة أم هناك دوال آخرى؟

توضيح: عندنا في اللينوكس الدوال الخاصة بلغة C مثل printf ، تعتمد في كتابتها على دوال تسمى system call ، وهذه الدوال أي system call هي التي تتعامل مع النواة مباشرة

سؤال آخر وأكون شاكر

لاحظت وجود الاسم الأتي

Visual Studio 2008 Professional Edition

هل هناك edition أخرى؟

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

System Engineer

Red Hat Certified Engineer

Red Hat Certificate Number

805010381752078

#2

لا أعرف الرد على سؤالك

لكن هناك إيديشنز أخرى

Standard Edition

Express Edition

rasool4k.gif

[وسط]mimetex.cgi?MSN:root@root-shell.net.

[/وسط]

#3

كل device له مفتاح رجستري خاص به ,, مثلا الكيبورد : "\\Device\\KeyboardClass0"

يمكنك فتح مقبض للتعامل معه عن طريق NtCreateFile .

في انظمة الـNT يتم فصل المستخدم عن النواة لذلك فدوال WinApi اغلبها عبارة عن stub فقط يستدعي الروتينات الحقيقية التي بالكرنل (كما يفعل لينكس) .

تم تعديل هذه المشاركة بواسطة GamingMasteR في 22 يوليو 2008 في 06:59

mov eax, dword ptr ds:[0xffdf0308]

jmp dword ptr [eax+0xfc]

#4

السلام عليكم

اقتباس
بالنسبة لل windows API ، هل الدوال التي بداخله هي التي تتعامل مع النواة مباشرة أم هناك دوال آخرى؟

دوال ال API عبارة عن تغليف لدوال ال Native و التي بدورها تستدعي دوال الكرنل

الموجودة فب ملف ال Ntoskernel.exe وغيرها من ال SubSystem

اذا اردت الوصول الى هذه الدوال مباشرة فيلزمك كتابة Device Driver الذي يمكنك من الدخول

الى نواة النظام و التعامل مع هذه الدوال .

--

ماذا تريد بهذه المعلومات و لماذا تبحث وراء الويندوز ؟؟؟؟؟!!!!!

ياريت تعطينا شوي من معلوماتك في البرمجة على بيئة اللينكس

تقبل تحياتي

/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/

 

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

#5

السلام عليكم

الأخ GamingMaster

اقتباس
كل device له مفتاح رجستري خاص به ,, مثلا الكيبورد : "\\Device\\KeyboardClass0"

يمكنك فتح مقبض للتعامل معه عن طريق NtCreateFile .

ما معنى مقبض؟ أرجو أن تكتب المصطلح ب E

كما أرجو التوضيح أكثر ، ويا ليت تكون هناك مقالة أو كتاب عن هذا الموضوع

اقتباس
في انظمة الـNT يتم فصل المستخدم عن النواة لذلك فدوال WinApi اغلبها عبارة عن stub فقط يستدعي الروتينات الحقيقية التي بالكرنل (كما يفعل لينكس) .

في اللينوكس ، يتم الأتي ، البرامج تتم كتابتها بدوال مكتبة C القياسية ، (ولا يفضل أن تكتبها ب system call، حيث أنك تستطيع فعل ذلك ، ولكن حتى لا تقوم بأخطاء غير مقصودة ) و هذه الدوال القياسية تقوم باستدعاء system call ، و كل system call يقوم بارسال interrupt للنواة مصاحبا له رقم يميزه عن أي system call آخر ، و من ثم يتم تنفيذ interrupt handler الخاص به .

الأخ الأخير زمانه

اقتباس
دوال ال API عبارة عن تغليف لدوال ال Native و التي بدورها تستدعي دوال الكرنل

الموجودة فب ملف ال Ntoskernel.exe وغيرها من ال SubSystem

اذا اردت الوصول الى هذه الدوال مباشرة فيلزمك كتابة Device Driver الذي يمكنك من الدخول

الى نواة النظام و التعامل مع هذه الدوال .

ما هي الدوال Native ، وما هي دوال الكرنل؟

System Engineer

Red Hat Certified Engineer

Red Hat Certificate Number

805010381752078

#6
اقتباس
ما معنى مقبض؟

Handle ، و هو القيمة المعادة من الدالة CreateFile.

عند استدعاء دالة API تمر بعدة خطوات للوصول الى دوال الكرنل ،

الصورة المرفقة توضح الامر .

دوال ال Native هي في ال user mode يتم داخلها تحميل الرجستري AX بعنوان الدالة المقابلة لها في الكرنل

ثم يتم تنفيذ ايعاز SYSENTER وهو الذي ينتقل الى ال kernel mode ومن ثم الى الدالة المطلوبة.

هذه الدوال هي Undocumented و مايكروسوفت لا تعطي معلومات عنها .

لم اقم بكتابة driver يتعامل مع device معين لكن عموما موقع ال codeproject سيفيدك بتأكيد

و خاصة هنا

حديثا هناك حزمة جديدة للتعامل مع ال device driver تعتمد مبدأ ال oop ، وهذا كتاب وضعه اخي محمد عن هذه الحزمة .. هنا

و أذا اردتَ شيئا فأنا في الخدمة رغم ان معلوماتي متواضعة جدا

post-47438-1216715929_thumb.jpg

تم تعديل هذه المشاركة بواسطة الاخير زمانه في 22 يوليو 2008 في 12:03

/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/

 

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

#7
اقتباس
كل device له مفتاح رجستري خاص به ,, مثلا الكيبورد : "\\Device\\KeyboardClass0"

معلومة غير صحيحة كنت مخطئ عندما ذكرتها .

الصحيح ان الـDevice Drivers يوجد منها نوعين named و unnamed ، عندما يتم عمل I/O request من مستوى المستخدم فلابد له ان يصف اسم الـDevice Driver و يقوم الـobject manager بتحديد وجهة الـI/O request عن طريق هذا الاسم .

شئ آخر هو ان اغلب الـPhysical Devices (مثل الكيبورد)تقوم الـDrivers الخاصة بها بانشاء Named Device Drivers .

mov eax, dword ptr ds:[0xffdf0308]

jmp dword ptr [eax+0xfc]

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

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