درایور نام برنامه ای است که در سطح کرنل اجرا میشود (در برخی موارد تنها در سطح یوزر نوشته و اجرا میشود) و اجازه میدهد یک سیستم عامل با یک دستگاه در ارتباط باشد و همچنین از کاربرد دیگر آن ، درایور به برنامه نویس این توانایی را میدهد که تغییراتی را که میخواهد در سطح کرنل انجام دهد اعمال کند .

فرض کنید یک برنامه نیاز دارد که یک مقدار اطلاعات را از دستگاهی بخواند . برنامه یک تابع اجرایی را به وسیله سیستم عامل صدا میزند و سیستم عامل نیز یک تابع از درایور را برای گرفتن اطلاعات از دستگاه فراخوانی میکند.
درایوری که به وسیله کمپانی طراحی شده میداند که چگونه باید با سخت افزار وسیله خود ارتباط برقرار کند .
بعد از اینکه درایور اطلاعات را از دستگاه گرفت آن را در اختیار سیستم عامل قرار میدهد و سیستم عامل نیز آن را به برنامه مورد نظر میدهد تا از آن استفاده کند

driver


همه درایور ها لازم نیست که توسط کمپانی دستگاه نوشته شوند . در اکثر موارد دستگاه با توجه به سخت افزار منتشر شده استاندارد طراحی میشود . این به این معنی است که درایور میتواند توسط خود ماکروسافت نوشته شود و دیگر طراح لازم نیست آن را بنویسد .

 

بعضی درایور ها به طور مستقیم با دستگاه ارتباط برقرار نمیکنند . برای گرفتن درخواست ورود و خروج (مانند  در خواست خواندن و نوشتن دستگاه) اغلب چندین درایور وجود دارد ، که در استک به صورت لایه ای دسته بندی شده اند و به درخواست رسیدگی میکنند . استک میتواند حاوی چندین درایور باشد که هر کدام نتیجه پردازش های خود را در اختیار درایور بالایی یا پایینی خود قرار میدهد . این درایور ها به طور مستقیم با دستگاه در ارتباط نیستن و تنها درخواست های ورودی یا خروجی را دسکاری میکنند و سپس آن را به درایور بعد یا قبل از خود منتقل میکنند.

 درحقیقت درایور یا میتواند به تنهایی کاری را انجام دهد یا زنجیره ای از درایورها را تشکیل داده تا با عبور از هر درایور بخشی از پردازش روی دیتا اعمال شود و در نهایت حاصل کار کامل شده ای را تحویل دهند .


driver_02

درایوری که در استک قرار دارد و به طور مستقیم با دیوایس در ارتباط میباشد function driver(FDO) نام دارد .
همچنین درایوری که پردازش های کمکی را انجام میدهد
filter driver(FiDO) نامیده میشد .
برخی از فیلتر درایور ها کار مشاهده ، ضبط اطلاعات یا مثلا با قرار دادن آن ها قبل از درایور دیسک ، گرفتن لاگ از اطلاعات ورودی خروجی یا رمز گزاری اطلاعات را انجام میدهند.

شما میتوانید برای دسترسی به اطلاعات کرنل ویندوز یا اطلاعات درایور های موجود در آن برنامه ای نوشته تا بتوانید به آن ها دسترسی پیدا کنید . این برنامه باید دارای دو بخش کرنل و یوزر باشد . بخش کرنل آن
software driver نامیده میشود ، و بخش یوزر آن application نامیده میشود .




بغیر از
function driver و filter driver نوع دیگری در درایور ها به نام bus driver وجود دارد که ابتدا مفهوم Device Stack را شرح میدهیم :
به طور کلی در
Device Tree هر گره یک Device نامید میشود ، و هر دیوایس شامل یک استک میباشد که
Device Stack نامیده میشود که در این استک ، دیوایس آبجکت ها و درایور های آن قرار میگیرند . دلیل وجود این درخت این است که سیستم عامل بداند برای درخواست به یک دیوایس باید از چه دیوایسهای دیگری عبور کند .

Device

در تصویر بالا یک PCI Bus به تعداد زیادی device اشاره می کند . به طور کلی به دیوایس های این نوع درایور PDO (Physical Device Object) میگویند . درایور های Bus به طور مستقیم با سخت افزار در ارتباط هستند .
و در صورت متصل شدن دستگاه جدید از طریق PnP Manger از وجود device جدید مطلع می شوند. در هنگام بالا آمادن سیستم عامل نیز PnP Manager از درایورهای Bus می خواهد تمام device های متصل به خود را شناسایی کنند. و در این هنگام درایور PCI شروع به ایجاد گره device های متصل به خود می کند.

به عنوان نکته آخر در توضیحات کلی درایور در ویندوز باید موارد زیر را نیز به آن اضافه کنیم :
مکانیزمی به نام
Driver Verifier وجود دارد که به نویسندگان درایور ها کمک میکند تا مشکلاتی که در کد آنها به وجود می آیند و امنیت آن ها را کاهش میدهند (مانند سرریز بافر یا نشت حافظه) را به آن ها اطلاع دهد .(برای اطلاع بیشتر به سایت مایکروسافت مراجعه کنید)
مکانیزم دیگر که در سیستم عامل های 64 بیت فعال گردید مکانیزم KMCS میباشد که درایورها را مجبور میکند تا با کلید رمزی که توسط یکی از مراجع بزرگ مسئول تصدیق کد واگذار میشود ، امضا شوند . در این سیستم ها حتی با داشتن دسترسی سطح ادمین نیز نمیتوان سیستم را مجبور به نصب درایور بدون امضای معتبر کرد . البته  میتوان این سیستم را غر فعال کرد ، به این صورت که در هنگام راه اندازی ویندوز کلید F8 را فشار داد و مطابق عکس زیر آن را غیر فعال کرد . با غیر فعال کردن آن در ویندوز پیغامی نشان میدهد که به شما اطلاع میدهد این مکانیزم غیر فعال گردیده.
KMCS

KMCS