Skip to content

MS_KernelModeUserMode

nishi_74322014 edited this page Aug 3, 2026 · 1 revision

カーネルモード・ユーザモード

概要

ユーザモード:リング(3)

ユーザモードは通常のプログラムが動作するリング(モード)。

カーネルモード:リング(0)

カーネルモードはOSやドライバ等のプログラムが動作するリング(モード)。

カーネルモードで動作することが許されているのは、

  • OSのカーネルモジュール(ntoskrnl.exe、bootvid.dll、hal.dll、kdcom.dll)
  • 各ベンダーが作成しているデバイスドライバ(*.sys

に限定されている。

※ 仮想化環境では、ハイパーバイザが動作する リング -1(VMX root / SVM)が加わる。 Windows でも VBS(仮想化ベースのセキュリティ)により、 カーネルモードよりさらに強い保護領域(VTL1 / セキュア カーネル)が使われている。

Kernel Objects

また、Windowsカーネルはカーネル・オブジェクトとしてサービスを提供する。

このため、カーネル・オブジェクトを使用してWindowsカーネルの提供するサービスを使用したり、ドライバ経由で処理を行うファイルIOを行う場合は、
ユーザプログラムのプロセスでも、カーネルモードのCPU時間が増加することをタスクマネージャやパフォーマンスカウンタ等から確認できる。

カーネルモジュール

ntoskrnl.exeを実行するのはSystemプロセス
(Windows 2000ではPID8、XPとServer 2003ではPID 4)
であり、このプロセスはユーザーモードの実行ファイルを動作させていない。

Names of kernel

  • ntoskrnl.exe
  • ntkrnlmp.exe
  • ntkrnlpa.exe
  • ntkrpamp.exe

ntkrnlpa.exe / ntkrpamp.exe は PAE 用の 32bit 版カーネル。 64bit 版 Windows のみとなった現在は ntoskrnl.exe に一本化されている。

ドライバ

ドライバ(*.sys)

ドライバ(*.sys)は

  • C:\WINDOWS\system32\drivers

に存在し、Systemプロセスから呼び出される。

  • .sys(ドライバ)のエントリポイントはDriverEntryになる。
  • .sys(ドライバ)ではDDKで公開されている
    PsCreateSystemThread関数(カーネルモードでのみ呼び出し可能)でシステムスレッドを作成して、各種のI/O要求を待つ。
  • Windows ハードウェア デベロッパー センター
    • カーネルモードAPI
    • ネイティブAPI(仕様が公開されていない)

移行メモ: 原文はこの箇所が箇条書きの階層でずれており、 「DDKで公開されている」と「PsCreateSystemThread関数〜」が別項目になっていた。 一文として繋がる内容のため 1 項目に整えた。

WDM

分類

WDMドライバは以下のように分類される。

  • ★ ファンクションドライバ(デバイスドライバ)
  • バスドライバ(BIOS、コントローラのI/O部など)
  • フィルタドライバ(デバイス動作の修正や、ウィルスチェッカ)

開発

※ 現行は WDM を直接書くより、WDF(Windows Driver Frameworks) の KMDF(カーネルモード)/ UMDF(ユーザーモード)を使うのが標準。 UMDF ならユーザーモードで動くため、バグがブルースクリーンに直結しない。

利用

ドライバ(*.sys)は、通常、ベンダのリリースする
デバイス付属のSDK(ユーザモード、DLL)経由で使用する。
※ DLLから、システムサービス、IOマネージャ経由で .sys(ドライバ)とIRP通信をする。


Tags: Windows, 障害対応, デバッグ

NetDevInfraWiki

マイクロソフト系技術情報 Wiki
Open 棟梁 Wiki

(未着手)

開発基盤部会 Wiki

移行管理: DONETODO

Clone this wiki locally