Open棟梁Project - マイクロソフト系技術情報 Wiki * 目次 [#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) に限定されている。 また、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時間が増加することをタスクマネージャやパフォーマンスカウンタ等から確認出来る。 ntoskrnl.exeを実行するのはSystemプロセス~ (Windows 2000ではPID8、XPとServer 2003ではPID 4)~ であり、このプロセスはユーザーモードの実行ファイルを動作させていない。 **Names of kernel [#o4ca5eab] ・ntoskrnl.exe ・ntkrnlmp.exe ・ntkrnlpa.exe ・ntkrpamp.exe ・.sys(ドライバ) .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(仕様が公開されていない) Windows Driver Model(WDM) http://msdn.microsoft.com/en-us/library/windows/hardware/gg463453.aspx Microsoft Windows 98 と Windows 2000 で導入されたデバイスドライバのフレームワーク WDMドライバは以下のように分類される。 ●ファンクションドライバ(デバイス) ・バスドライバ(BiOS、コントローラのI/O部など) ・フィルタドライバ(デバイス動作の修正や、ウィルスチェッカ) 技術レポート「Windows XP用デバイスドライバの開発について」 http://www.softech.co.jp/mm_100407_pc.htm .sys(ドライバ)は、通常、ベンダのリリースする デバイス付属のSDK(ユーザモード、DLL)経由で使用する。 ※ DLLから、システムサービス、IOマネージャ経由で.sys(ドライバ)とIRP通信をする。 ドライバは、デバイスを直接操作せず、HAL関数経由で操作する。 デバイスは基本的にはC言語で記述されており(一部はC++)、 HAL関数経由で操作すれば、x86ベースのコンピュータで バイナリ互換、ソース互換、また、従来互換を実現する。 日本語技術資料のダウンロード(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