[[Open棟梁Project>http://opentouryo.osscons.jp/]] - [[マイクロソフト系技術情報 Wiki>http://techinfoofmicrosofttech.osscons.jp/]]

* 目次 [#qf9492c1]
#contents

*概要 [#sccce11e]
-CPUモード - Wikipedia~
http://ja.wikipedia.org/wiki/CPU%E3%83%A2%E3%83%BC%E3%83%89
-リングプロテクション - Wikipedia~
http://ja.wikipedia.org/wiki/%E3%83%AA%E3%83%B3%E3%82%B0%E3%83%97%E3%83%AD%E3%83%86%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3

>リングには0-3のモードがあるが、UNIX、Windowsでも~
0:カーネル、3:ユーザの2つのリングしか使用していない。

*ユーザモード:リング(3) [#g4a93b15]

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

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

カーネルモードで動作することが許されているのは、
-OSのカーネルモジュール(ntoskrnl.exe、bootvid.dll、hal.dll、kdcom.dll)
-各ベンダーが作成しているデバイスドライバ(*.sys)

に限定されている。

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

-Kernel Objects (Windows)~
http://msdn.microsoft.com/en-us/library/ms724485.aspx

-Windows Kernel Architecture Internals~
http://research.microsoft.com/en-us/um/redmond/events/wincore2010/Dave_Probert_1.pdf

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

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

***Names of kernel [#o4ca5eab]
-ntoskrnl.exe
-ntkrnlmp.exe
-ntkrnlpa.exe
-ntkrpamp.exe

*ドライバ [#l73d09c0]
**ドライバ(*.sys) [#ddc64af1]
ドライバ(*.sys)は

- C:\WINDOWS\system32\drivers

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

-.sys(ドライバ)のエントリポイントはDriverEntryになる。
-.sys(ドライバ)ではDDKで公開されている
-PsCreateSystemThread関数(カーネルモードでのみ呼び出し可能)でシステムスレッドを作成して、各種のI/O要求を待つ。

-Windows ハードウェア デベロッパー センター (WHDC)~
http://msdn.microsoft.com/ja-jp/windows/hardware/gg236587
--カーネルモードAPI
--ネイティブAPI(仕様が公開されていない)

**WDM [#y8f86cef]
-Windows Driver Model(WDM)~
http://msdn.microsoft.com/en-us/library/windows/hardware/gg463453.aspx
>Microsoft Windows 98 と Windows 2000 で導入されたデバイスドライバのフレームワーク

***分類 [#r6a57343]
WDMドライバは以下のように分類される。
-★ ファンクションドライバ(デバイスドライバ)
-バスドライバ(BiOS、コントローラのI/O部など)
-フィルタドライバ(デバイス動作の修正や、ウィルスチェッカ)

***開発 [#q1b353a1]
-ドライバ(*.sys)は、デバイスを直接操作せず、HAL関数経由で操作する。
-デバイスは基本的にはC言語で記述されており(一部はC++)、HAL関数経由で操作すれば、~
x86ベースのコンピュータでバイナリ互換、ソース互換、また、従来互換を実現する。

-技術レポート「Windows XP用デバイスドライバの開発について」~
http://www.softech.co.jp/mm_100407_pc.htm

-日本語技術資料のダウンロード(IA-32 アーキテクチャー)~
http://www.intel.com/jp/download/index.htm#ia32

-Windows Device Driver Programming Part 1、2
--http://ruffnex.oc.to/kenji/windriver/
--http://ruffnex.oc.to/kenji/windriver/driver2.html

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

トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS