
در شکل 2-1، ابتدا به خطی که قسمتهای حالت کاربر و حالت هسته سیستمعامل ویندوز را تقسیم میکند توجه کنید. جعبههای بالای این خط نشاندهنده فرآیندهای حالت کاربر هستند و اجزای زیر خط خدمات سیستمعامل در حالت هسته را نشان میدهند. همانطور که در فصل 1 ذکر شد، رشتههای حالت کاربر در فضای آدرس خصوصی خود اجرا میشوند (اگرچه در هنگام اجرای حالت هسته به فضای سیستم دسترسی دارند). بنابراین، فرآیندهای سیستمی، خدماتی، کاربری و زیرسیستمهای محیطی هرکدام فضای آدرس خصوصی خاص خود را دارند. خط تقسیم دومی نیز بین قسمتهای حالت هسته ویندوز و هایپروایزر وجود دارد. بهطور دقیقتر، هایپروایزر با همان سطح امتیاز CPU (0) مانند هسته اجرا میشود، اما از آنجایی که از دستورات مخصوص CPU (VT-x بر روی اینتل، SVM بر روی AMD) استفاده میکند، میتواند خود را از هسته جدا کرده و در عین حال به نظارت بر آن (و برنامهها) بپردازد. به همین دلایل، ممکن است اغلب اصطلاح "ring -1" را بشنوید (که ناچیز است).
چهار نوع اصلی از فرآیندهای حالت کاربر به شرح زیر هستند:
1. فرآیندهای کاربر: این فرآیندها میتوانند یکی از انواع زیر باشند: ویندوز 32 بیتی یا 64 بیتی (برنامههای ویندوز که بر روی Runtime ویندوز در ویندوز 8 و بالاتر اجرا میشوند در این این دسته قرار میگیرند)، ویندوز 3.1 16 بیتی، MS-DOS 16 بیتی، یا POSIX 32 بیتی یا 64 بیتی. توجه داشته باشید که برنامههای 16 بیتی فقط بر روی ویندوز 32 بیتی قابل اجرا هستند و برنامههای POSIX از ویندوز 8 به بعد دیگر پشتیبانی نمیشوند.
2. فرآیندهای خدماتی: این فرآیندها میزبان خدمات ویندوز مانند وظیفهنگار و خدمت چاپ هستند. خدمات معمولاً نیاز دارند که به طور مستقل از ورود کاربر اجرا شوند. بسیاری از برنامههای سرور ویندوز، مانند Microsoft SQL Server و Microsoft Exchange Server، شامل اجزایی هستند که به عنوان خدمات اجرا میشوند.
3. فرآیندهای سیستمی: اینها فرآیندهای ثابت و سختافزاری هستند، مانند فرآیند ورود و مدیر جلسه، که خدمات ویندوز نیستند. به عبارت دیگر، این فرآیندها توسط مدیر کنترل خدمات آغاز نمیشوند.
4. فرآیندهای سرور زیرسیستم محیطی: این فرآیندها بخشی از پشتیبانی برای محیط OS یا شخصیت ارائهشده به کاربر و برنامهنویس را پیادهسازی میکنند. ویندوز NT در ابتدا با سه زیرسیستم محیطی عرضه شد: ویندوز، POSIX، و OS/2. با این حال، زیرسیستم OS/2 آخرین بار با ویندوز 2000 و زیرسیستم POSIX آخرین بار با ویندوز XP عرضه شد. نسخههای Ultimate و Enterprise از ویندوز 7 کلاینت و همچنین تمام نسخههای سرور ویندوز 2008 R2 شامل پشتیبانی از یک زیرسیستم POSIX بهبود یافته به نام زیرسیستم برای برنامههای مبتنی بر UNIX (SUA) هستند. SUA اکنون متوقف شده و دیگر به عنوان بخشی اختیاری از ویندوز (چه کلاینت و چه سرور) ارائه نمیشود.
در شکل بالا، به جعبه DLLهای زیرسیستم که در زیر جعبههای فرآیندهای خدماتی و فرآیندهای کاربر قرار دارد، توجه کنید. در ویندوز، برنامههای کاربری بهطور مستقیم با خدمات بومی سیستمعامل ویندوز تماس نمیگیرند. بلکه آنها از طریق یک یا چند کتابخانه پیوندی دینامیک (DLL) زیرسیستم عمل میکنند. نقش DLLهای زیرسیستم این است که یک عملکرد مستند را به تماسهای داخلی (که معمولاً مستند نیستند) خدمات بومی سیستم تبدیل کنند، که عمدتاً در Ntdll.dll پیادهسازی شدهاند. این ترجمه ممکن است شامل ارسال یک پیام به فرآیند زیرسیستم محیطی باشد که به فرآیند کاربر خدمت میکند یا ممکن است شامل آن نباشد.
اجزای حالت هسته ویندوز شامل موارد زیر است:
1. مدیریت اجرایی: مدیریت اجرایی ویندوز شامل خدمات پایه سیستمعامل است، از جمله مدیریت حافظه، مدیریت فرآیند و رشته، امنیت، ورودی/خیلیابی (I/O)، شبکه و ارتباطات بین فرآیندی.
2. هسته ویندوز: این شامل عملکردهای پایینسطح سیستمعامل است، مانند زمانبندی رشته، ادغام وقفهها و استثناها، و همگامسازی چند پردازنده. همچنین مجموعهای از روالها و اشیاء پایه را فراهم میکند که بقیه مدیریت اجرایی برای پیادهسازی ساختارهای سطح بالاتر از آن استفاده میکنند.
3. درایورهای دستگاه: این شامل درایورهای دستگاه سختافزاری است که تماسهای عملکرد ورودی/خیلیابی کاربر را به درخواستهای ورودی/خیلیابی دستگاه سختافزاری خاص تبدیل میکند و همچنین درایورهای غیرسختافزاری، مانند درایورهای سیستم فایل و شبکه.
4. لایه انتزاع سختافزاری (HAL): این یک لایه کد است که هسته، درایورهای دستگاه و بقیه مدیریت اجرایی ویندوز را از تفاوتهای سختافزاری خاص پلتفرم (مانند تفاوتها بین مادربردها) جداسازی میکند.
5. سیستم پنجرهها و گرافیک: این سیستم عملکردهای رابط گرافیکی کاربر (GUI) را پیادهسازی میکند (که بهطور بهتر به عنوان عملکردهای USER و GDI ویندوز شناخته میشود)، مانند مدیریت پنجرهها، کنترلهای رابط کاربری و کشیدن.
6. لایه هایپروایزر: این لایه از یک مؤلفه واحد تشکیل شده است: هایپروایزر خود. در این محیط هیچ درایور یا ماژول دیگری وجود ندارد. با این حال، هایپروایزر خود از لایهها و خدمات داخلی مختلفی تشکیل شده است، مانند مدیریت حافظه خاص خود، زمانبند پردازشگر مجازی، مدیریت وقفهها و تایمرها، روالهای همگامسازی، مدیریت بخشها (نمونههای ماشین مجازی) و ارتباطات بین بخشها (IPC) و بیشتر.
مرور کلی بر معماری امنیت مبتنی بر مجازیسازی
جداسازی بین حالت کاربر و حالت هسته به حفاظت از سیستمعامل در برابر کدهای حالت کاربر، چه مخرب و چه غیرمخرب، کمک میکند. با این حال، اگر یک قطعه کد ناخواسته در حالت هسته به سیستم نفوذ کند (به دلیل وجود یک آسیبپذیری در هسته یا درایور که هنوز وصله نشده یا به دلیل فریب کاربر برای نصب یک درایور مخرب یا آسیبپذیر)، سیستم اساساً به خطر میافتد زیرا تمام کدهای حالت هسته به طور کامل به کل سیستم دسترسی دارند.
فناوریهایی که در فصل 1 توضیح داده شدهاند و از هایپروایزر برای ارائه تضمینهای اضافی در برابر حملات استفاده میکنند، مجموعهای از قابلیتهای امنیتی مبتنی بر مجازیسازی (VBS) را تشکیل میدهند که جدایی طبیعی مبتنی بر امتیاز پردازنده را از طریق معرفی سطوح اعتماد مجازی (VTLs) گسترش میدهند.
VTLها نه تنها یک روش جدید برای جداسازی دسترسی به منابع حافظه، سختافزار و پردازنده ارائه میدهند، بلکه نیاز به کد و اجزاء جدیدی برای مدیریت سطوح بالاتر اعتماد دارند. هسته و درایورهای رایج که در VTL 0 اجرا میشوند، نمیتوانند اجازه کنترل و تعریف منابع VTL 1 را داشته باشند؛ این کار هدف را بیمعنا خواهد کرد.
شکل زیر معماری ویندوز 10 Enterprise و سرور 2016 را هنگام فعالیت VBS نشان میدهد. (گاهی اوقات اصطلاح حالت امن مجازی (VSM) نیز استفاده میشود.) با نسخه 1607 ویندوز 10 و انتشارهای سرور 2016، اگر توسط سختافزار پشتیبانی شود، به طور پیشفرض همیشه فعال است. برای نسخههای قدیمیتر ویندوز 10، میتوانید آن را با استفاده از یک سیاست یا با کادر گفتگوی افزودن ویژگیهای ویندوز فعال کنید (گزینه حالت کاربر ایزوله را انتخاب کنید).

حالا که به معماری سطح بالا ویندوز نگاهی انداختیم، بیایید عمیقتر به ساختار داخلی و نقش هر یک از اجزای کلیدی سیستمعامل بپردازیم. شکل زیر یک نمودار دقیقتر و کاملتر از معماری و اجزای اصلی سیستم ویندوز است که نسبت به شکل 2-1 ارائه شده است. توجه داشته باشید که این شکل هنوز شامل تمامی اجزا نیست (بهطوری که شبکه بهطور خاص در فصل 10، «شبکهسازی»، در بخش 2 توضیح داده شده است).

بخش اجرایی (Executive)
بخش اجرایی ویندوز، لایه بالایی فایل Ntoskrnl.exe است (لایه پایینی آن «کرنل» نام دارد). این بخش شامل توابع زیر است:
* توابع قابل فراخوانی از حالت کاربر (User-mode): این توابع که «سرویسهای سیستم» نامیده میشوند، از طریق Ntdll.dll صادر میشوند. اکثر آنها از طریق Windows API در دسترس هستند، اما برخی نیز مستند نشدهاند (مانند ALPC و توابع پرسوجوی خاص).
* توابع درایور دستگاه: از طریق تابع DeviceIoControl فراخوانی میشوند و رابطی برای ارتباط حالت کاربر با درایورها فراهم میکنند.
* توابع مخصوص حالت هسته (Kernel-mode): توابعی که در WDK مستند شدهاند و مورد نیاز توسعهدهندگان درایور هستند (مانند مدیریت ورودی/خروجی).
* توابع مستند نشده هسته: توابعی که صادر شدهاند اما در WDK مستند نیستند (مانند توابع درایور ویدئوی بوت).
* توابع داخلی: توابعی که به عنوان نمادهای سراسری تعریف شده اما صادر نشدهاند (مانند توابع داخلی مدیریت حافظه) و توابعی که کاملاً داخلی هستند و فقط توسط بخش اجرایی و هسته استفاده میشوند.
اجزای اصلی بخش اجرایی:
* مدیر پیکربندی (Configuration Manager): مسئول پیادهسازی و مدیریت رجیستری سیستم.
* مدیر فرآیند (Process Manager): ایجاد و خاتمه دادن به فرآیندها (Processes) و رشتهها (Threads).
* ناظر مرجع امنیت (SRM): اجرای سیاستهای امنیتی، حفاظت از منابع سیستم و حسابرسی (Auditing).
* مدیر ورودی/خروجی (I/O Manager): پیادهسازی ورودی/خروجی مستقل از دستگاه و ارسال دستورات به درایورهای مربوطه.
* مدیر نصب و اجرا (PnP Manager): شناسایی درایورهای مورد نیاز برای سختافزارها و تخصیص منابع (مانند IRQ و پورتهای I/O).
* مدیر توان (Power Manager): هماهنگی رویدادهای مربوط به مصرف انرژی و مدیریت وضعیت خواب سیستم.
* توابع WMI: امکان انتشار اطلاعات عملکرد و پیکربندی درایورها به سرویسهای مدیریتی.
* مدیر حافظه (Memory Manager): پیادهسازی حافظه مجازی و مدیریت فضای آدرسدهی فرآیندها.
* مدیر حافظه پنهان (Cache Manager): بهبود سرعت ورودی/خروجی فایلها با نگه داشتن دادههای دیسک در حافظه اصلی.
توابع پشتیبان (Support Functions):
* مدیر اشیاء (Object Manager): ایجاد، مدیریت و حذف اشیاء اجرایی ویندوز (مانند فرآیندها و اشیاء همگامسازی).
* تسهیلات ALPC: انتقال پیام بین فرآیندهای کلاینت و سرور در یک کامپیوتر واحد.
* کتابخانه زمان اجرا (Run-time Library): پردازش رشتهها، عملیات ریاضی و تبدیل دادهها.
* روتینهای پشتیبانی اجرایی: تخصیص حافظه سیستم و مکانیسمهای همگامسازی خاص (مانند Mutexهای سریع).
سایر زیرساختها:
* کتابخانه دیباگر هسته: امکان عیبیابی هسته سیستم.
* چارچوب دیباگ حالت کاربر: مدیریت نقاط توقف (Breakpoints) و رویدادهای دیباگ.
* کتابخانه Hypervisor و /strong> پشتیبانی از محیطهای مجازی امن.
* مدیر خطا (Errata Manager): ارائه راهکار برای سختافزارهای غیراستاندارد.
* تأییدکننده درایور (Driver Verifier): بررسی سلامت و درستی عملکرد درایورهای هسته.
* ردیابی رویداد (ETW): ردیابی رویدادها در سطح سیستم.
* زیرساخت تشخیص ویندوز (WDI): ردیابی هوشمند فعالیتهای سیستم بر اساس سناریوهای تشخیصی.
* پشتیبانی WHEA: چارچوبی برای گزارش خطاهای سختافزاری.
* کتابخانه زمان اجرای فایلسیستم (FSRTL): توابع کمکی برای درایورهای فایلسیستم.
* موتور شیم هسته (KSE): فراهم کردن وصلههای سازگاری برای درایورها.
هسته (Kernel)
هسته شامل مجموعهای از توابع در Ntoskrnl.exe است که مکانیزمهای بنیادی سیستمعامل را فراهم میکند. این وظایف شامل زمانبندی رشتهها (Thread Scheduling)، خدمات همگامسازی و پشتیبانی سطح پایین وابسته به معماری سختافزار (مانند مدیریت وقفهها و استثناها) است. کد هسته عمدتاً به زبان C و در موارد خاص (برای دسترسی مستقیم به دستورالعملهای پردازنده) به زبان اسمبلی نوشته شده است. توابع هسته با پیشوند Ke شناخته میشوند.
اشیاء هسته (Kernel Objects)
هسته با پیادهسازی مکانیزمهای پایه و اجتناب از سیاستگذاری (Policy making)، خود را از بخش اجرایی (Executive) متمایز میکند. هسته تصمیمات سیاستی را به بخش اجرایی واگذار میکند و تنها در مورد زمانبندی و ارسال رشتهها تصمیمگیرنده است.
* تفاوت با اشیاء اجرایی: اشیاء بخش اجرایی دارای سربارِ سیاستگذاری (مانند دستگیرهها، چکهای امنیتی و سهمیهبندی منابع) هستند، اما اشیاء هسته سادهتر و فاقد این سربارند.
* اشیاء کنترلی (Control Objects): برای کنترل توابع مختلف سیستمعامل استفاده میشوند؛ مانند اشیاء APC (فراخوانی رویه نامتقارن)، DPC (فراخوانی رویه با تأخیر) و اشیاء وقفه.
* اشیاء توزیعکننده (Dispatcher Objects): دارای قابلیت همگامسازی هستند و بر زمانبندی رشتهها تأثیر میگذارند؛ مانند Mutex، Event، Semaphore، Timer و Thread.
ساختارهای کنترلی پردازنده (KPCR و KPRCB)
هسته برای ذخیره دادههای مربوط به هر پردازنده از ساختاری به نام KPCR (ناحیه کنترل پردازنده هسته) استفاده میکند.
* KPCR: حاوی اطلاعات پایهای مانند جداول وقفه (IDT)، GDT و TSS است. در سیستمهای ۳۲ بیتی از طریق ثبات fs و در ۶۴ بیتی از طریق ثبات gs قابل دسترسی است.
* KPRCB (بلاک کنترل پردازنده هسته): یک ساختار خصوصی درون KPCR است که فقط توسط کد هسته استفاده میشود و شامل موارد زیر است:
* اطلاعات زمانبندی: رشتههای فعلی، بعدی و رشتههای بیکار (Idle).
* پایگاه داده توزیعکننده: صفهای آمادهبهکار برای سطوح مختلف اولویت.
* صف DPC: لیست فراخوانیهای با تأخیر.
* مشخصات CPU: مدل، سرعت، ویژگیها، تعداد هستهها و ساختار حافظه (NUMA).
* آمارها: آمارهای مربوط به ورودی/خروجی (I/O)، حافظه پنهان (Cache)، مدیریت حافظه و وقفهها.
* بهینهسازی: ذخیره ساختارهای اختصاصی هر پردازنده برای افزایش سرعت دسترسی به حافظه.
پشتیبانی سختافزاری
وظیفه مهم دیگر هسته، انتزاع و جداسازی بخش اجرایی (Executive) و درایورها از تفاوتهای معماری سختافزار است. این کار شامل مدیریت تفاوتها در مواردی مثل وقفهها، ارسال استثناها و همگامسازی در سیستمهای چندپردازندهای است.
* رابطهای قابل حمل: هسته مجموعهای از رابطها را ارائه میدهد که در تمام معماریها از نظر عملکردی یکسان هستند. اکثر کدهای این رابطها نیز در معماریهای مختلف تغییری نمیکنند.
* پیادهسازیهای متفاوت: برخی رابطها (مانند روتینهای Spinlock) بسته به معماری، پیادهسازی متفاوتی دارند یا بخشی از آنها در لایه HAL قرار میگیرد تا با سختافزار خاص هماهنگ شود.
* کدهای اختصاصی معماری:
* پشتیبانی از x86: شامل کدهای خاص برای اجرای برنامههای قدیمی ۱۶ بیتی MS-DOS (در سیستمهای ۳۲ بیتی) و شبیهسازی حالت Real-mode.
* مدیریت کش و TLB: به دلیل تفاوت در ساختار کش پردازندهها، کدهای مدیریت حافظه پنهان و بافر ترجمه (Translation Buffer) برای هر معماری بازنویسی شده است.
* تعویض متن (Context Switching): اگرچه الگوریتم کلی انتخاب رشتهها یکسان است، اما جزئیات ذخیره و بارگذاری وضعیت پردازنده (ثباتها و...) کاملاً به معماری سختافزار بستگی دارد.
لایه انتزاعی سختافزار
یکی از عناصر حیاتی طراحی ویندوز، قابلیت حمل آن در طیف وسیعی از پلتفرمهای سختافزاری است. لایه انتزاعی سختافزار (HAL) بخش کلیدی در امکانپذیری این قابلیت حمل است. HAL یک ماژول قابل بارگذاری در حالت کرنل (Hal.dll) است که رابط سطح پایین را به پلتفرم سختافزاری که ویندوز روی آن اجرا میشود، فراهم میکند. این لایه جزئیات وابسته به سختافزار مانند رابطهای ورودی/خروجی، کنترلکنندههای وقفه و مکانیسمهای ارتباطی چندپردازندهای - هر تابعی که هم خاص معماری و هم وابسته به ماشین باشد - را پنهان میکند.
بنابراین، به جای دسترسی مستقیم به سختافزار، اجزای داخلی ویندوز و درایورهای دستگاه نوشته شده توسط کاربر، با فراخوانی روالهای HAL، زمانی که به اطلاعات وابسته به پلتفرم نیاز دارند، قابلیت حمل را حفظ میکنند. به همین دلیل، بسیاری از روالهای HAL در WDK مستند شدهاند. برای کسب اطلاعات بیشتر در مورد HAL و استفاده از آن توسط درایورهای دستگاه، به WDK مراجعه کنید.
گردانندههای دستگاه (Device Drivers)
گردانندههای دستگاه، ماژولهای قابل بارگذاری در حالت کرنل (فایلهایی با پسوند .sys) هستند که بین مدیر ورودی/خروجی و سختافزار مربوطه ارتباط برقرار میکنند. این گردانندهها در حالت کرنل و در سه زمینه اجرا میشوند:
* در زمینه نخ کاربر که تابع ورودی/خروجی را آغاز کرده است (مانند عملیات خواندن).
* در زمینه یک نخ سیستمی در حالت کرنل (مانند درخواستی از مدیر Plug and Play).
* در نتیجه یک وقفه، و نه در زمینه یک نخ خاص، بلکه در زمینه نخی که در زمان وقوع وقفه فعال بوده است.
گردانندههای دستگاه در ویندوز مستقیماً سختافزار را دستکاری نمیکنند. بلکه توابع موجود در HAL را برای ارتباط با سختافزار فراخوانی میکنند. گردانندهها معمولاً با زبان C و/یا C++ نوشته میشوند.
انواع گردانندههای دستگاه:
* گردانندههای سختافزاری: این گردانندهها از HAL برای دستکاری سختافزار استفاده میکنند تا خروجی را به یک دستگاه فیزیکی یا شبکه بنویسند یا از آن ورودی دریافت کنند. انواع مختلفی از این گردانندهها وجود دارد، مانند گردانندههای گذرگاه، گردانندههای رابط انسانی، گردانندههای ذخیرهسازی انبوه و غیره.
* گردانندههای سیستم فایل: این گردانندهها درخواستهای ورودی/خروجی مبتنی بر فایل را میپذیرند و آنها را به درخواستهای ورودی/خروجی برای یک دستگاه خاص ترجمه میکنند.
* گردانندههای فیلتر سیستم فایل: این گردانندهها شامل مواردی هستند که عملیاتی مانند آینهسازی دیسک و رمزگذاری یا جستجو برای یافتن ویروسها را انجام میدهند، درخواستهای ورودی/خروجی را رهگیری میکنند و قبل از ارسال آنها به لایه بعدی (یا در برخی موارد رد عملیات) پردازش ارزشافزوده انجام میدهند.
* تغییر مسیر دهندهها و سرورهای شبکه: این گردانندهها، گردانندههای سیستم فایلی هستند که درخواستهای ورودی/خروجی سیستم فایل را به یک ماشین در شبکه ارسال میکنند و به ترتیب چنین درخواستهایی را دریافت میکنند.
* گردانندههای پروتکل: این گردانندهها یک پروتکل شبکه مانند TCP/IP، NetBEUI و IPX/SPX را پیادهسازی میکنند.
* گردانندههای فیلتر جریان کرنل: این گردانندهها بهصورت زنجیرهای به هم متصل میشوند تا پردازش سیگنال را روی جریانهای داده، مانند ضبط یا نمایش صدا و تصویر، انجام دهند.
* گردانندههای نرمافزاری: اینها ماژولهای کرنل هستند که عملیاتی را انجام میدهند که فقط در حالت کرنل و از طرف یک فرآیند در حالت کاربر قابل انجام است. بسیاری از ابزارهای Sysinternals مانند Process Explorer و Process Monitor از این گردانندهها برای دریافت اطلاعات یا انجام عملیاتی استفاده میکنند که از طریق APIهای حالت کاربر امکانپذیر نیست.
مدل گرداننده ویندوز(Windows driver model)
مدل گرداننده اصلی در اولین نسخه NT (3.1) ایجاد شد و از Plug and Play (PnP) پشتیبانی نمیکرد. این وضعیت تا زمان ویندوز 2000 (و ویندوز 95/98 در سمت مصرفکننده) ادامه داشت.
ویندوز 2000 پشتیبانی از PnP، گزینههای برق و توسعهای به مدل driver ویندوز NT به نام مدل driver ویندوز (WDM) را اضافه کرد. ویندوز 2000 و نسخههای بعدی میتوانند driver های قدیمی ویندوز NT 4 را اجرا کنند، اما از آنجایی که این driver ها از PnP و گزینههای برق پشتیبانی نمیکنند، سیستمهایی که از این گردانندهها استفاده میکنند، در این دو زمینه قابلیتهای کمتری خواهند داشت.
در ابتدا، WDM یک مدل driver مشترک را فراهم میکرد که (تقریباً) از نظر کد منبع بین ویندوز 2000/XP و ویندوز 98/ME سازگار بود. این کار برای آسانتر کردن نوشتن driver ها برای دستگاههای سختافزاری انجام شد، زیرا به جای دو کد پایه، تنها یک کد پایه مورد نیاز بود. WDM در ویندوز 98/ME شبیهسازی شد. پس از اینکه این سیستمعاملها دیگر مورد استفاده قرار نگرفتند، WDM به عنوان مدل پایه برای نوشتن driver ها برای دستگاههای سختافزاری برای ویندوز 2000 و نسخههای بعدی باقی ماند.
از دیدگاه WDM، سه نوع گرداننده وجود دارد:
* گردانندههای گذرگاه (Bus drivers): یک گرداننده گذرگاه به کنترلر گذرگاه، آداپتور، پل یا هر دستگاهی که دارای دستگاههای فرزند است، خدمات میدهد. گردانندههای گذرگاه گردانندههای ضروری هستند و مایکروسافت معمولاً آنها را ارائه میکند. هر نوع گذرگاه (مانند PCI، PCMCIA و USB) در یک سیستم دارای یک گرداننده گذرگاه است. اشخاص ثالث میتوانند گردانندههای گذرگاه را برای پشتیبانی از گذرگاههای جدید مانند VMEbus، Multibus و Futurebus بنویسند.
* گردانندههای تابع (Function drivers): یک گرداننده تابع، گرداننده اصلی دستگاه است و رابط عملیاتی را برای دستگاه خود فراهم میکند. این یک گرداننده ضروری است مگر اینکه دستگاه به صورت خام (raw) استفاده شود، یعنی پیادهسازیای که در آن ورودی/خروجی توسط گرداننده گذرگاه و هر گرداننده فیلتر گذرگاه، مانند SCSI PassThru، انجام میشود. گرداننده تابع بنا به تعریف، گردانندهای است که بیشترین اطلاعات را در مورد یک دستگاه خاص دارد و معمولاً تنها گردانندهای است که به رجیسترهای خاص دستگاه دسترسی دارد.
* گردانندههای فیلتر (Filter drivers): یک گرداننده فیلتر برای افزودن قابلیت به یک دستگاه یا driver موجود، یا برای اصلاح درخواستهای ورودی/خروجی یا پاسخهای سایر گردانندهها استفاده میشود. اغلب برای رفع مشکل سختافزاری که اطلاعات نادرستی در مورد الزامات منابع سختافزاری خود ارائه میدهد، استفاده میشود. گردانندههای فیلتر اختیاری هستند و میتوانند به تعداد دلخواه، در بالا یا پایین یک گرداننده تابع و بالای یک گرداننده گذرگاه قرار گیرند. معمولاً تولیدکنندگان اصلی تجهیزات (OEMs) یا فروشندگان مستقل سختافزار (IHVs) گردانندههای فیلتر را ارائه میکنند.
در محیط گرداننده WDM، هیچ گرداننده واحدی همه جنبههای یک دستگاه را کنترل نمیکند. یک گرداننده گذرگاه مسئول گزارش دستگاههای موجود در گذرگاه خود به مدیر PnP است، در حالی که یک گرداننده تابع دستگاه را دستکاری میکند.
در بیشتر موارد، گردانندههای فیلتر سطح پایینتر، رفتار سختافزار دستگاه را تغییر میدهند. به عنوان مثال، اگر یک دستگاه به گرداننده گذرگاه خود گزارش دهد که به 4 پورت ورودی/خروجی نیاز دارد، در حالی که در واقع به 16 پورت ورودی/خروجی نیاز دارد، یک گرداننده فیلتر تابع خاص دستگاه در سطح پایینتر میتواند لیست منابع سختافزاری گزارش شده توسط گرداننده گذرگاه به مدیر PnP را رهگیری کرده و تعداد پورتهای ورودی/خروجی را بهروز کند.
گردانندههای فیلتر سطح بالا معمولاً ویژگیهای ارزشافزوده را برای یک دستگاه فراهم میکنند. به عنوان مثال، یک گرداننده فیلتر دستگاه سطح بالا برای یک دیسک میتواند بررسیهای امنیتی اضافی را اعمال کند.
فرایندهای سیستم
فرایندهای سیستم زیر در هر سیستم ویندوز 10 ظاهر میشوند. یکی از آنها (Idle) اصلاً یک فرایند نیست و سه تای آنها - System، Secure System و Memory Compression - فرایندهای کاملی نیستند زیرا یک فایل اجرایی در حالت کاربر را اجرا نمیکنند. این نوع فرایندها را فرایندهای حداقلی مینامند و در فصل 3 توضیح داده شدهاند.
* فرایند Idle: این فرایند به ازای هر CPU یک رشته (thread) دارد تا زمان بیکار CPU را محاسبه کند.
* فرایند System: این فرایند اکثر رشتهها و هندلهای سیستمی در حالت هسته را شامل میشود.
* فرایند Secure System: این فرایند فضای آدرس هسته امن را در VTL 1 (در صورت اجرا) شامل میشود.
* فرایند Memory Compression: این فرایند مجموعه کاری فشرده فرایندهای حالت کاربر را شامل میشود.
* مدیر جلسه (Smss.exe).
* زیرسیستم ویندوز (Csrss.exe).
* مقداردهی اولیه جلسه 0 (Wininit.exe).
* فرایند ورود به سیستم (Winlogon.exe).
* مدیر کنترل سرویس (Services.exe) و فرایندهای سرویس فرزندی که ایجاد میکند، مانند فرایند میزبان سرویس عمومی ارائه شده توسط سیستم (Svchost.exe).
* سرویس احراز هویت امنیتی محلی (Lsass.exe)، و اگر Credential Guard فعال باشد، سرور احراز هویت امنیتی محلی ایزوله (Lsaiso.exe).
Telegram: @CaKeegan
Bale: @CaKeegan
Gmail : amidgm2020@gmail.com