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

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