カーネルモード ドライバー アーキテクチャ設計ガイド
Note
ドライバーで実装または呼び出すことのできるプログラミング インターフェイスについては、カーネルモード ドライバー リファレンスをご覧ください。
このセクションでは、カーネルモードのプログラミングを理解するための一般的な概念を示し、カーネル プログラミングの特定の手法について説明します。 Windows ドライバーの概要については「Windows ドライバーの開発の概要」を参照してください。。このページでは、Windows コンポーネントの概要、Windows で使用されるデバイス ドライバーの種類、Windows デバイス ドライバーの目的、およびキットに付属する汎用的なデバイス ドライバーのサンプルについて説明されています。
このセクションでは、カーネルモード ドライバーの作成に役立つ概念情報を説明します。
概要には次が含まれます。
- Windows コンポーネントの概要
- カーネルモード ドライバーの設計目標
- 「サンプル カーネルモード ドライバー」のカタログ
- Microsoft Surface チームがまとめた、「Kernel Driver Development Best Practices」(カーネル ドライバー開発のベスト プラクティス)
カーネルモードのコンポーネントでは、Windows オペレーティング システムの主要なカーネルモード マネージャーとコンポーネントを説明します。
コンポーネント 説明 マネージャー Windows カーネルモード オブジェクト マネージャー ファイル、デバイス、同期メカニズム、レジストリ キーなどの "オブジェクト" を管理します。 Windows カーネルモード メモリ マネージャー オペレーティング システムの物理メモリを管理します。 Windows カーネル モード プロセスとスレッド マネージャー プロセスでのすべてのスレッドの実行を処理します。 Windows カーネルモード I/O マネージャー アプリケーションと、デバイス ドライバーが提供するインターフェイスとの間の通信を管理します。 Windows カーネルモード プラグ アンド プレイ マネージャー I/O マネージャーのサブシステムであるプラグ アンド プレイ (PnP) マネージャーにより、PC はデバイスがシステムに追加されたときにそれを認識できます。 Windows カーネルモード電源マネージャー 電源状態の変更をサポートするすべてのデバイスに関して、電源状態の秩序立った変更を管理します。 Windows カーネルモード構成マネージャー レジストリの変更の監視、特定のレジストリ データへのコールバックの登録などにより、レジストリを管理します。 Windows カーネルモード カーネル トランザクション マネージャー カーネル モードでのトランザクション処理を実装します。 Windows カーネルモード セキュリティ リファレンス モニター アクセス制御を行うために、ドライバーにルーチンを提供します。 ライブラリ Windows カーネルモード カーネル ライブラリ オペレーティング システム内の他のすべてが依存する、コア機能を実装します。 Microsoft Windows カーネルは、スレッドのスケジューリングやハードウェア割り込みのルーティングなどの基本的な低レベル操作を提供します。 Windows カーネルモード エグゼクティブ サポート ライブラリ デバイス ドライバーに対してさまざまなサービスを提供するカーネルモード コンポーネントを参照します。これには、オブジェクト管理、メモリ管理、プロセスおよびスレッド管理、入出力管理、構成管理が含まれます。 Windows カーネルモード ランタイム ライブラリ さまざまなカーネルモード コンポーネントが必要とする共通のユーティリティ ルーチンのセットです。 Windows カーネルモード セーフ文字列ライブラリ カーネルモード開発における強力なセキュリティを提供するための、セーフ文字列ライブラリです。 Windows カーネルモード DMA ライブラリ デバイス ドライバー開発者向けの、ダイレクト メモリ アクセス (DMA) ライブラリです。 Windows カーネルモード HAL ライブラリ カーネルモード ドライバー開発のための、ハードウェア アブストラクション レイヤー (HAL) です。 Windows カーネルモード CLFS ライブラリ トランザクション ログ システムである、共通ログ ファイル システム (CLFS) です。 Windows カーネルモード WMI ライブラリ Windows Management Instrumentation (WMI) と呼ばれる、コンポーネントを管理するための一般的なメカニズムです。 「Writing WDM Drivers」(WDM ドライバーを作成する) と「Introduction to WDM」(WDM の概要) には、Windows Driver Model (WDM) を使用してドライバーを作成するのに必要な情報があります。
デバイス オブジェクトおよびデバイス スタック にあるデバイス オブジェクトやその他のトピックでは、オペレーティング システムがどのようにデバイス オブジェクトを使用してデバイスを表すかについて説明しています。
「Windows ドライバーのメモリ管理」では、内部データの保存、I/O 操作の際のデータのバッファリング、他のカーネルモードおよびユーザーモードのコンポーネントとのメモリの共有などの目的のために、カーネルモード ドライバーによってどのようにメモリが割り当てられるかについて説明しています。
「デバイス アクセスの制御」や「特権」から「デバイス オブジェクトを表す SDDL」に至るまでのセキュリティにより、ドライバーを可能な限りセキュリティで保護することができます。
「Handling IRPs」(IRP の処理) では、カーネルモード ドライバーがどのように I/O 要求パケット (IRP) を処理するかが説明されています。
DMA ダイレクト メモリ アクセス (DMA) はドライバー開発の重要な側面であり、このノードのトピックでは DMA について詳しく説明しています。
コントローラー オブジェクトは、デバイスが接続された物理的なデバイス コントローラーを表します。
割り込みサービス ルーチン (ISR) では、割り込みを受ける物理デバイスのドライバーへの割り込みを処理します。
メッセージ シグナル割り込みでは、特定のメモリ アドレスに値を書き込むことによって、割り込みをトリガーします。
遅延プロシージャ呼び出し (DPC オブジェクト) は、ISR からキューに登録できます。また、後で ISR よりも低い IRQL で実行されます。
プラグ アンド プレイ (PnP) では、PnP のシステム ソフトウェア サポートと、ドライバーがどのようにそのサポートを使用して PnP を実装するかに重点を置いています。
電源管理では、システムおよびデバイスの電源管理への包括的なアプローチを提供するアーキテクチャについて説明しています。
Windows Management Instrumentation (WMI) は、カーネルモード ドライバーへの拡張機能であり、これを使用して、ドライバーを WMI プロバイダーにすることができます。 WMI プロバイダーによって、ユーザーモード アプリケーションなどの WMI コンシューマーで測定と計装のデータを使用できるようになります。
ドライバーのプログラミング手法では、Windows のカーネル モードでのドライバーのプログラミングに、通常のユーザーモード プログラミングのものとは非常に異なる手法が必要になることもあることが説明されています。