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) に限定されている。 **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通信をする。