Windowsデバイスドライバプログラミング 勉強記録2


※本記事は勉強しつつ書いていますので、不正確な情報が含まれる可能性がありますので予めご了承ください。

Windowsデバイスドライバの変遷

①95系⇒仮想デバイスドライバ(VxD) NT系⇒NTカーネルドライバ まったく異なるドライバモデル

②2000(NT系) NTカーネルをベースにWDMを導入
98/Me 従来の仮想デバイスドライバ+ WDMに対応
※NT系と98/MeでWDMデバイスドライバはソースコードレベル互換

③XP WDMに統一

④Vista WDMに加えてWDF(Windows Driver Foundation;UMDF、KMDF)を追加

⑤7,8,10 基本部分はVistaと同様

カーネル構成とモード

カーネルモード/ユーザモード

Windowsシステム構成においてソフトウェアは管理者権限の有無によりカーネルモード/ユーザモードに分けられる
「権限」とはリソース(メモリ、周辺機器)へのアクセス権

MMU(Memory Management Unit)

仮想メモリを空間を提供するIntel CPU機能。メモリマネージャが行う。
⇒仮想メモリ-実メモリ変換テーブルで変換を行う。
MMU変換ができなかったときに「〇〇は動作を停止しました」とメッセージが出る

ユーザモード属性のソフトウェアは仮想メモリしかアクセスできない。
デバイスドライバは外部の周辺機器とデータ通信を行うため、MMUを使用しないで実メモリにアクセスできるカーネルモードで
ある必要がある。(周辺機器は仮想メモリアドレスでアクセスできないため)

Windowsデバイスドライバフレームワークの種類

WDM

WDM(Windows Driver Model)
・従来からある基本的なデバイスドライバーのフレームワーク

KMDF

KMDF(Kernel Mode Driver Model Framework):
WDMを使いやすく定型処理をライブラリとしてより高度な機能を提供するフレームワーク
イメージとしてはWin32 APIに対するMFCのような認識。

UMDF

UMDF(User Mode Driver Model Framework): 実際のデバイス制御をおこなうカーネル部と通信を行うことにより機能を実現する、ユーザモードのフレームワーク

・実際の実行はカーネル側のKernel Driver for UMDFで行われる
・低速
・Driver Manager提供するフレームワーク上でC++,COMで実装を行う。
・バグがあってもシステム安定性に影響を与えない

次回から記録について

箇条書きレベルでもまとめるのは大変であるし、下手すると丸写しに近いものなってしまうのでやり方を変えます。
学習した内容を一部内容をピックアップしての記載とします。具体的には特に難しかったこと、印象に残ったこと、さらに調べたこと、気になったこと、疑問点、感想等を書ければと思います。ただ、部分的にはまとめもします。

参考文献

Windows Vistaデバイスドライバプログラミング