# برنامه نویسی سطح پایین > توسعه‌ی هسته‌ی سیستم عامل >  ساختار سیستم عامل ویندوز

## HadiDelphi

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

----------


## Mehdi Asgari

جواب سوال اولت مثبت هست (درایور ها در پایین ترین سطح اجرا میشن، ولی همچنان برای دسترسی مستقیم به سخت افزار ، باید از HAL عبور کنن که این امر طبیعی هست)
جواب سوال دوم منفی هست چون درایور های سطح کرنل ویندوز به توابع کرنل ویندوز وابسته هستن (مثلا برای تخصیص حافظه باید از ExAllocatePoolWithTag استفاده کنن که این تابع مختص سیستم عامل ویندوز هست)

----------


## HadiDelphi

با تشکر
اگر امکان دارد کمی در مورد HAL توضیحاتی بدین 
و  در مورد سوال دومم ، یعنی اگر تو همون درایور API های مختص هر سیستم عامل استفاده شود کار تمام است ؟ یا که نه به غیر از API ها موارد دیگری هم هست ؟

----------


## Mehdi Asgari

HAL یا لایۀ تجرید سخت افزار، به سیستم عامل (و دیگر مصرف کننده ها) اجازه میده با یک اینترفیس مشخص با دستگاه های سخت افزاری مختلف و معماری های مختلف سخت افزاری ارتباط برقرار کنند.
http://en.wikipedia.org/wiki/Hardware_abstraction_layer
نخیر، باز هم نمیشه. اصولا مدل برنامه نویسی سطح کرنل، توابع استفاده شده، و کلا زیر سیستمی که کد درایور برای اجرا به اون وابسته هست، در سیستم عامل های مختلف، متفاوته

----------


## jeson_park

با سلام
ساختار سيستم عمال ويندوز به طور كامل در كتاب windows internals گفته شده

----------


## Arman_1367

اینم ببینی بد نیست 
*React Operating System*

----------


## mahmood0197

یک سوال داشتم آیا با کد های یک درایور میشه فایل ایجاد کرد؟منظور دستورات user mode  رو در kernel mode  اجرا کرد؟

----------


## jeson_park

> یک سوال داشتم آیا با کد های یک درایور میشه فایل ایجاد کرد؟منظور دستورات user mode  رو در kernel mode  اجرا کرد؟


بله برای ایجاد فایل از توابع native مثل  ZwCreateFile و برای نوشتن توی فایل از ZwWriteFile استفاده میشه

یه مثال هم در اینجا به طور کامل تشریح شده 
موفق باشید

----------

