مصطفى 36a2

ما السبيل للوصول إلى التحكم الكامل في الحاسب الشخصي

15 ردود في هذا الموضوع

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

هدفي هو معرفة كيفية التحكم بطرفيات الحاسبTerminals وبواباته Ports ..جميع أدوات الدخل والخرج على السواء .. كل ما يمكن للحاسب فعله إلى أقصى درجة ..

إذا كان نظام التشغيل هو المسؤول عن كل ما سبق ..

فأنا أبحث عن التحكم الكامل في العمليات التي يديرها نظام التشغيل .. أو بعبارة أخرى .. أبحث عن قمرة القيادة اليدوية لنظام التشغيل ...

وصلت في بحثي إلى أهمية الWindows API في هذا المجال ... ولم أر لها حتى الآن حدوداً أو مجالات لا يمكنها التحكم بها ...

فإذا اعتبرنا الWindows API بحراً من الدوال الموجودة خصيصاً للتحكم بالحاسب ... فما هي بحار التحكم الأخرى ..

هل تكفي Windows API لما أريد الوصول إليه ؟

هل هناك أدوات أخرى لازمة للتحكم بالجهاز ؟

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

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

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

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

اعتقد ان التحكم فى ال port يتم عن طريق اوامر ال DOS لان الدوس يوصلك الى اقصى الحدود فى التعامل مع الويندوز و ايضا هناك لغة الاسامبلى او اللغات ذات المستوى المنخفض فهى تتحكم بكل ما فى الجهاز و لكن اوامرها طويلة جدا و هى افضل الطرق التى توصلك الى التحكم بكل ما فى الجهاز و تقبل تحياتى و مرورى و اطلعنا على الجديد فهذا اتلموضوع شيق :)

1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

نعم أخي عمر أوامر الدوس ..إضافة إلى مفاتيح الريجستري .. تؤمن بعض التحكم ...

ولكن لا تنس أن الدوس نظام تشغيل والويندوز نظام تشغيل قائم بذاته لا يعتمد على الدوس في كل صغيرة وكبيرة ... والله أعلم ..

أبحث عما هو أعمق من Windows API وأكثر تحكما ...

بحيث تكون كل موارد الجهاز مسخرة للاستخدام الحر من قبل المبرمج ...

وكما قلت ..الموضوع شائق ويحتاج إلى بحث ... شكرا لك smile.gif

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

اعتقد اذا اردت الوصول الى ما ابعد من ذلك فسنذهب الى برمجة ال BIOS و لقد وجدت موضوع و قرات بدايته و اعتقد انه جيد و لكنى ساكمل قرائتى غدا لان الوقت تاخر :D

تفضل هذا هو الموقع http://www.abnorkemiathanwya.com/vb/showthread.php?t=4927 اقراه و اخبرنى ان كان افادك و ان كنت تنوى فى الاكمال فى معرفة المزيد عن BIOS حتى انضم لك :)

1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

عزيزي عمر .. أقتبس لك من النص الذي أرفقته بما أنك لم تقرأ النص كاملاً :

ماهو bios : عبارة عن برنامج مخزن في ذاكرة على اللوحة الأم تسمى الذاكرة ROM
كتابة برنامج إقلاع في القطاع الأول شغلة سهلة لأن الموضوع يتطلب فهم أمرين فقط

الأول: إستخدام مقاطعات الBIOS

هل مرت عليك أنظمة الملفات مثل FAT ,NFS ,ex2..3 وغيرها من أنظمة ملفات وندوز ولينكس

بإختصار برنامج bios لا يعرف شيء عن هذة الخرابيط ولا يعرف حتى أسامي الملفات ولا أين تبدأ وأين تنته

ما يعرفة bios هو تركيب القرص الفيزيائي مثل الرأس و الإسطوانة و القطاع والمسار

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

الآن قم بإدخال القرص المضغوط( الفلوبي )

أخي عمر باختصار ...

الموضوع المطروح مثير للاهتمام ... ولكنه لا يجيب عن سؤالي .. كما أنه كما رأيت ..

البيوس يستعمل المقاطعات ... وهذا (على حد علمي ) خاص بالأنظمة 16 بت .. ولا يصلح للانظمة الحديثة 32 بت ...

قراه و اخبرنى ان كان افادك و ان كنت تنوى فى الاكمال فى معرفة المزيد عن BIOS حتى انضم لك

حسنا لقد قرأته ولم يفدني laugh.gif ولا أنوي معرفة المزيد ...smile.gif شكرا لك على أي حال ...

بالتوفيق

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

لا تنسى البحث عن Native API وهي مشابهة Windows API لكن مايكروسوفت لم تقوم بتوثيقها وتوفير شرح لها :wink:

وهذا المقال عن الموضوع من المنتدى

http://www.arabteam2000-forum.com/index.php?showtopic=87756

تم تعديل بواسطه W.A.R.D
1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

حتي تكون علي بينة من الامر لماذا تتعامل مع الامر كأن نظام التشغيل Windows هو نظام التشغيل الوحيد الموجود

والاجابة لسؤالك تتطلب منك دراسة كيف يتم تطوير API

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

نعم قرأت المقال شكرا جزيلاً لك ..أخي ..W.A.R.D

استعملت الNative API من قبل ... وبالفعل إنها تدعو للعجب ..

هذا أحد الأكواد الذي يقوم بسرقة 4 دوال Native API وجعلها صالحة للاستخدام البشري :

ملاحظة : الاكواد خاصة بتغيير حجم خط الكونسول .. ولا يوجد لها مثيل في Windows API


#include<windows.h>
#include<stdlib.h>
#pragma once

typedef struct _CONSOLE_FONT {
DWORD index;
COORD dim;
} CONSOLE_FONT;

BOOL WINAPI SetConsoleFont(HANDLE hOutput, DWORD fontIndex);
BOOL WINAPI GetConsoleFontInfo(HANDLE hOutput, BOOL bMaximize, DWORD numFonts, CONSOLE_FONT* info);
DWORD WINAPI GetNumberOfConsoleFonts();
BOOL WINAPI SetConsoleIcon(HICON hIcon);

BOOL WINAPI SetConsoleFont(HANDLE hOutput, DWORD fontIndex) {
typedef BOOL (WINAPI *PSetConsoleFont)(HANDLE, DWORD);
static PSetConsoleFont pSetConsoleFont = NULL;

if(pSetConsoleFont == NULL)
pSetConsoleFont = (PSetConsoleFont)GetProcAddress(GetModuleHandle("kernel32"), "SetConsoleFont");
if(pSetConsoleFont == NULL) return FALSE;
return pSetConsoleFont(hOutput, fontIndex);
//Some Notes On This Functions :
//WINBASEAPI HMODULE WINAPI GetModuleHandleA(LPCSTR lpModuleName);
//typedef CONST CHAR *LPCSTR, *PCSTR;
//WINBASEAPI FARPROC WINAPI GetProcAddress(HMODULE hModule,LPCSTR lpProcName);
//DECLARE_HANDLE(HINSTANCE);
//typedef HINSTANCE HMODULE; /* HMODULEs can be used in place of HINSTANCEs */
//#define DECLARE_HANDLE(name) struct name##__ { int unused; }; typedef struct name##__ *name
}

BOOL WINAPI GetConsoleFontInfo(HANDLE hOutput, BOOL bMaximize, DWORD fontIndex, CONSOLE_FONT* info) {
typedef BOOL (WINAPI *PGetConsoleFontInfo)(HANDLE, BOOL, DWORD, CONSOLE_FONT*);
static PGetConsoleFontInfo pGetConsoleFontInfo = NULL;
if(pGetConsoleFontInfo == NULL)
pGetConsoleFontInfo = (PGetConsoleFontInfo)GetProcAddress(GetModuleHandle("kernel32"), "GetConsoleFontInfo");
if(pGetConsoleFontInfo == NULL) return FALSE;

return pGetConsoleFontInfo(hOutput, bMaximize, fontIndex, info);
}

DWORD WINAPI GetNumberOfConsoleFonts() {
typedef DWORD (WINAPI *PGetNumberOfConsoleFonts)();
static PGetNumberOfConsoleFonts pGetNumberOfConsoleFonts = NULL;
if(pGetNumberOfConsoleFonts == NULL)
pGetNumberOfConsoleFonts = (PGetNumberOfConsoleFonts)GetProcAddress(GetModuleHandle("kernel32"), "GetNumberOfConsoleFonts");
if(pGetNumberOfConsoleFonts == NULL) return 0;
return pGetNumberOfConsoleFonts();
}

BOOL WINAPI SetConsoleIcon(HICON hIcon) {
typedef BOOL (WINAPI *PSetConsoleIcon)(HICON);
static PSetConsoleIcon pSetConsoleIcon = NULL;
if(pSetConsoleIcon == NULL)
pSetConsoleIcon = (PSetConsoleIcon)GetProcAddress(GetModuleHandle("kernel32"), "SetConsoleIcon");
if(pSetConsoleIcon == NULL) return FALSE;
return pSetConsoleIcon(hIcon);
}

بالمناسبة أخي W.A.R.D هل أعتبر إجابتك هذه بمثابة قولك للعبارة التالية : "إن Native API هي الحلقة المفقودة والتي تبحث عنها للتحكم الكامل بالحاسب الشخصي " ؟

هل WinAPI وال NativeAPI تشمل كل الطرفيات والأجهزة الداخلية ؟

هل ينتهي بحثي هنا ؟

خلاصة ما وصلت إليه : أنه بواسطة دوالWindows API الموثقة في MSDN وبواسطة الNative API

وباستخدام أوامر الDOS والتحكم بقيم مفاتيح الريجستري .. يمكن التحكم بكل شيء في الحاسب دون أي استثناءات ...

هل ما وصلت إليه خاطئ ؟ ناقص ؟ غير دقيق ؟

وشكرا لكم ..

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
حتي تكون علي بينة من الامر لماذا تتعامل مع الامر كأن نظام التشغيل Windows هو نظام التشغيل الوحيد الموجود

والاجابة لسؤالك تتطلب منك دراسة كيف يتم تطوير API

شكرا لك أخيMohamedIBrahim

..

كلامك صحيح ... كنت أفكر في جعل السؤال عاماً ... ولكن هذا سيشتّتني أكثر ما أنا مشتت ...

إن كان هناك كلام ينطبق على كل أنظمة التشغيل فيا حبذا ...وإلا فالأفضل بالنسبة لي التركيز على نظام واحد واخترت windows بدون اي سبب ...happy.gif

بالنسبة لتطوير دوال API بشكل عام .. فالأمر لا يتعدى abstract للتوابع ... ولكن المحتوى هو المهم ... ( فهل تقصد المحتوى ؟ )

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

تم تعديل بواسطه مصطفى 36a2
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

اعتقد ان الانظمة الاقدم قد تفيدك اكثر لانها كانت تتعامل مباشرة اكثر مع عتاد الحاسب و تعتمد على لغات برمجية منخفضة المستوى :)

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

السلام عليكم

الذي سيفيدك في هذا هو معرفة بنية أنظمة التشغيل أي عليك بمقرر أنظمة التشغيل

والدخول في الكيرنل ونواة النظام , ربما محظور عليك هذا في windows ولكن الأمر مفتوح لمن يريد هذا على Linux

ومدى دعم نواة النظام لتعريفات قطع العتاد الصلبة

تركت هذا المجال لأني لا أريد صنع نظام تشغيلsmile.gif -ربما تستطيع أن تبدأ ولكن المشوار واااايد طويل - , الأنظمة موجودة والحمد لله laugh.gif وبدل من صنع نظام أنوية لينكس الوليده ما أكثرها

1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

شكرا لكم على النقاش المفيد ...

ختاما هل هناك مصادر غنية يمكن الاستفادة منها ..حتى يتكامل الموضوع أكثر ...

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

والله ولي التوفيق

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

يمكنك برمجة kernel-mode driver

عندها يمكنك الوصول الى كامل العتاد بلا قيود عن طريق DMA او PIO مثلا.

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

أخي مصطفى ...

خبرني شو مشكلتك مع لغات البرمجة ..بدك تخترع لغة برمجة جديدة ؟؟ ههههه

شو المشكلة بظبط ..؟؟

من خلال API تستطيع ان تفعل ماتريد ...بأمكانك حتى التحكم بأدنى الاجزاء مثلا تتحكم بpin لاي مأخذ فيزيائي فتخليه فيه 1 او 0 ..

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

بس انا نفسي اعرف شو شيء يلي ببالك وماعم تقدر تعمله ..؟؟ بلغات البرمجة والمكتبات يلي تم تطويرها مسبقا

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

laugh.gif@Laz0rd

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

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

بأمكانك حتى التحكم بأدنى الاجزاء مثلا تتحكم بpin لاي مأخذ فيزيائي فتخليه فيه 1 او 0 ..

هذا بالضبط هو المستوى الذي أريد الوصول إليه ...

أرجو منك إفادتي بمرجع يحتوي مثل هذا المستوى العميق من التحكم ...

لا أقول لك أعطني الدالة ..ولكن دلني من أين حصلت عليها ...wink.gif

شكرا جزيلا لك ...

بالتوفيق

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .