Ntoskrnl.exe

ntoskrnl.exe (Windows NT operating system kernel の略) またはカーネルイメージ (kernel image) とは、Windows NTカーネル空間のカーネルおよびエグゼキュティブ・レイヤー（実行層）であり、ハードウェア仮想化、プロセスおよびメモリ管理、といった様々なシステムサービスを受け持ち、システムの基本的な部分を構成する。 ntoskrnl.exeは上層の「エグゼキュティブ」と下層の「カーネル」から構成される。エグゼキュティブはI/O、オブジェクト、セキュリティ、プロセス、プロセス間通信 (IPC)、仮想メモリ、ウィンドウおよびグラフィックの管理を司る。カーネルはスレッドスケジューリング、第1レベル割り込みハンドリング、遅延プロシージャコール（英語版） (Deferred Procedure Calls ; DPC) などの基本的なオペレーティングシステムサービスを提供する。 Windowsカーネルは変数名でなく型名を表すハンガリアン記法を用いてコーディングされている。ntoskrnlのファンクション名はそのコンポーネントを示すプリフィクス（接頭辞）によって定義される。そのうちの一部を次の表に掲げる。 カーネルは制御を受け取る時に、パラメーターである構造体へのポインタを受け取る。この構造体はブートローダーによって受け渡され、ハードウェアに関する情報、レジストリファイルへのパス、カーネルの挙動を変更するブート設定またはオプションのカーネルパラメータ、ブートローダーによって読み込まれるファイルパスの情報を含んでいる。この構造体の定義はカーネルデバッガを使用するか、またはマイクロソフトのシンボルデータベースからダウンロードすることで取得することができる。 x86アーキテクチャでは、カーネルはシステムが既にプロテクトモードにあり、GDT (Global Descriptor Table（英語版）)、IDT (Interrupt descriptor table（英語版）)およびTSS (Task State Segment（英語版）)の準備が済んでいることを受け取る。カーネルはドライバ署名、メモリマネージャー、IDTといった各種リソース・コンポーネントの初期化処理を行い、最後にセッションマネージャー サブシステム（英語版） (SMSS)が問題なく起動したことを確認して初期化処理を終える。 Windows Server 2003 SP1以降の64ビット版Windowsには Kernel Patch Protection (PatchGuard) という数分おきにカーネルなどのシステム構造への改変をチェックする機構が備わっている。改変が検出された時、Windowsはブルースクリーンに移行してシステムを停止する。しかし、マルウェアの中にはカーネルの起動前に読み込まれるプログラム（ブートセクタなど）に感染することで、この保護機構を回避してカーネルを改ざんするブートキット (Bootkit) と呼ばれる種類が存在する。このような脆弱性に対してはUEFIのセキュアブートやTPMを利用してRoot of Trust（信頼性の根幹）を確立することが有効である。 ^ Microsoft TechNet : Systems Internals Tips and Trivia - ウェイバックマシン（2008年4月8日アーカイブ分） ^ hanbarakat (2007年2月25日). “Deeper into Windows Architecture”. マイクロソフト. 2016年7月9日閲覧。 ^ マイクロソフト (2009年). “Cache Manager Routines”. マイクロソフト. 2009年6月13日閲覧。 ^ “CmRegisterCallbackEx routine (Windows Drivers)”. マイクロソフト. 2016年7月10日閲覧。 ^ “Executive Library Support Routines (Windows Drivers)”. マイクロソフト. 2016年7月10日閲覧。 ^ マイクロソフト (2009年). “File System Runtime Library Routines”. マイクロソフト. 2009年6月13日閲覧。 ^ a b c d e f g h i j k Windows Internals, p.72 ^ マイクロソフト (2009年). “I/O Manager Routines”. マイクロソフト. 2009年6月13日閲覧。 ^ マイクロソフト (2009年). “Core Kernel Library Support Routines”. マイクロソフト. 2009年6月13日閲覧。 ^ マイクロソフト (2009年). “Power Manager Routines”. マイクロソフト. 2009年6月13日閲覧。 ^ The NT Insider (August 27, 2003). “Nt vs. Zw - Clearing Confusion On The Native API”. OSR Online (OSR Open Systems Resources) 10 (4). http://www.osronline.com/article.cfm?article=257 2013年9月16日閲覧。.  ^ Raymond Chen (2009年). “The Old New Thing : What does the "Zw" prefix mean?”. マイクロソフト. 2009年6月13日閲覧。 ^ “struct LOADER_PARAMETER_BLOCK”. NirSoft. 2016年7月10日閲覧。 ^ Windows Internals, p.980 ^ Windows Internals, p.63 ^ Windows Internals, pp.980-985. ^ The Rootkit Arsenal, pp. 267-269. ^ Matthew Conover (2006年8月9日). “Assessment of Windows Vista Kernel-Mode Security”. シマンテック. 2016年7月9日閲覧。 ^ “ファイア・アイ、検出が困難で危険なブートキットによりカード決済情報を狙う脅威グループを確認 - FireEye”. FireEye, Inc. (2015年12月10日). 2016年7月9日閲覧。 ^ Aleksandr Matrosov, Eugene Rodionov (2011年). “Modern Bootkit Trends: Bypassing Kernel-Mode Signing Policy”. ESET. 2016年7月9日閲覧。 Russinovich, Mark; Solomon, David; Ionescu, Alex (2009), Windows Internals (5th ed.), マイクロソフト Press, ISBN 0735625301  Bill Blunden (2009). The Rootkit Arsenal: Escape and Evasion in the Dark Corners of the System. Jones & Bartlett Publishers. ISBN 1598220616. https://books.google.co.jp/books?id=GAsuwHTquhEC&lpg=PA263&ots=_KeebiaGpI&hl=ja&pg=PA267#v=onepage&f=false  Driver Development Part 1: Introduction to Drivers - Code Project by Toby Opferman Troubleshooting the Startup Process - Microsoft Technet