راه اصولیش اینه که باید برا این کار یه درایور بنویسید
اما درایور نویسی (کمی تا نیمه ابری) سخته و با زبانهای دات نت نمیشه درایور نوشت باید برید سراغ زبانهای Native
اسمبلی - C - دلفی ( هر چند بهترین حالت C هست و اسمبلی کار زیادتری میبره)
میتونید WDK مایکروسافت رو یه نیمه نیگا بندازید ببینید چه خبره
http://www.microsoft.com/download/en....aspx?id=11800
حدود 650 مگ هستش و شامل تمام ابزارهای لازمه برای نوشتن و تست درایور هست
این سایت هم یه مرجع هست تو زمینه درایور نویسی و برنامه های سیستمی
www.osronline.com
و اما درایور:
بصورت ساده یه فایل اجرایی که تو فاز لود سیستم عامل لود میشه و میتونه تو دو سطح یوزر یا کرنل کار کنه،درایور های سطح کرنل قدرت نامحدودی تو دسترسی به سخت افزار دارن
میشه گفت عملا جزئی از سیستم عامل بشمار میرن ، معمولا با پسوند sys هستند ، سرویسهای ویندوز هم تقریبا یه شباهتهایی با درایورها دارن (جفتشون یجور مدیریت میشن)
برنامه هایی که ما مثلا با C++ یا دلفی مینویسیم (Native)یا برنامه هایی که با پلتفرم دات نت مینویسیم تو بالاترین لایه ویندوز اجرا میشن
(User Mode) در نتیجه جهت دسترسی به سخت افزار مجبورن از لایه های پایین تر عبور کنن اونجاس که تازه با آقایون مدیر (Memoey- IO - Security , ...)
باید سلام علیکی بکنن ببینن اجازه دارن برن پایین یا بهشون گفته میشه (ورود خروس ممنوع) شما اینجا باش هرچی خاستی بگو من ببینم میتونم برات بیارم یا باید بیخیالش بشی
و اونچه ما میگیم درسته.
ولی درایور های سطح هسته خودشون همون پایین پایینا کنار این آقایون مدیر هستن و دوستی خوبی با جناب HAL دارن (Hardware abstraction Layer)
http://en.wikipedia.org/wiki/Hardware_abstraction
لایه HAL آخرین لایه سیستم عامل هست که سیستم عامل رو از سخت افزار جدا میکنه مثل همون لایه DAL خودمون
خب تا اینجا گفتیم که دایور هم یه فایل اجرایی هست ولی به یه شکل دیگه پس اگه فایل اجرایی هست
چطوری اجرا میشه خب همین برنامه هایی که با رفیق C# مینویسیم رو نیگا کنید
میبینید همیشه یه متد Main داره که نقطه آغاز برنامس چون سیستم عامل بیچاره از این همه کد شلوغ پلوغ باید یه جاشو بگیره به عنوان نقطه آغازی برنامه و از اونجا کد رو اجرا کنه
قبلنا ORG 100 برامون خیلی آشنا بود (یادش بخیر)
درایور ها هم یه نقطه شروع دان
NTSTATUS DriverEntry(PDRIVER_OBJECT DriverObject, PUNICODE_STRING RegistryPath)
{
DbgPrint("My First Driver\n");
return STATUS_SUCCESS;
}
این برای شروع درایور که کلمه My First Driver رو موقع لود درایور نشون میده (البته مثل Console Application نباید انتظار اون صفحه سیاه رو داشته باشید)
با استفاده از Dbgview.exe باید تعاملات درایور رو ببینید ، برا نصب و اینیت و لود درایور هم فعلا میتونید از osrloader.exe استفاده کنید.
حالا میرسیم به کامپایل و ساخت فایل SYS
یه فایل درست کنید بنام مثلا MyDriver.c
با این کد
#include <ntddk.h>
NTSTATUS DriverEntry(PDRIVER_OBJECT DriverObject, PUNICODE_STRING RegistryPath)
{
DbgPrint("My First Driver\n");
return STATUS_SUCCESS;
}
کدها رو به زبان C++ نوشتم دوست داشتید از اسمبلی استفاده کنید و خودتونو بیچاره کنید
یه فایل دیگه درست میکنید بنام makefile بدون پسوند شامل
!INCLUDE $(NTMAKEENV)\makefile.def
یه فایل دیگه درست میکنید بنام Sources بدون پسوند شامل
TARGETNAME = MyDriver
TARGETPATH = obj
TARGETTYPE = DRIVER
INCLUDES = %BUILD%\inc
LIBS = %BUILD%\lib
SOURCES = MyDriver.c
اینجا MyDriver.c همون فایلی هست که تو مرجله اول ساختید و شامل سورس درایورتون هس ، همه این سه فایل رو بریزید تو یه مسیر ساده مثلا
D:\MyDriver
بعد با فرض نصب WDK از استارت منو Windows Driver Kit رو پیدا کنید و از زیر شاخه WDK مربوطه
x86 Checked Build Environment رو اجرا کنید و به مسیر D:\MyDriver برید
بعد بنویسید Build
منظر بمونید تا کار بیلد تموم بشه اگه کدتون مورد نداشته باشه کامپایل میشه و تو همون مسیر میبینید یکی دو تا فولدر ایجاد شد از فولدر obj میتونید درایور ساخته شده رو پیدا کنید
بعد با osrloader.exe نصب و اینیت و لودش کنید
حواستون باشه کوچکترین اشتباهی ممکنه باعث BSOD بشه
http://en.wikipedia.org/wiki/Blue_Screen_of_Death
اینجا دیگه سی شارپ نیس با یه اکسپشن ساده و کلوز قضیه رو رفع و رجوع کنیم
اینا تازه مثل اینه که شما تو سی شارپ همون Hello World مرسوم رو بعنوان اولین برنامه نوشتید
این همه داستان راستان گفتم تا بدونید اگه خودتون بخاید یه پرینتر مجازی بنویسید که کار پرینت به PDF یا عکس یا هر کوفت و زهر مار دیگه ای رو انجام بده واقعا باید وقت بذارید
همین کار رو وقتی که میخای روش بذاری مثل یادگرفتن کل سی شارپ با مخلفاتش در نظر بگیر شایدم بیشتر
چون اینجا مجبوری C++ یاد بگیری ، با ساختار سیستم عامل های خانواده NT آشنا باشی و تازه شروع کنی با WDK کار کردن
قصدم مایوس کردن شما نیس خاستم عمق فاجعه رو نشون بدم
کلک مرغابی هم میشه سوار کرد اما به شرطها و شروطها
موفق باشید.