- 追加された行はこの色です。
- 削除された行はこの色です。
Open棟梁Project - マイクロソフト系技術情報 Wiki
[[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通信をする。