Windows XP, Vista では User-mode Driver Framework (UMDF) という
ユーザモードで走るドライバ開発のフレームワークがあるみたい。
しかも、ドライバが COM サーバとして書けるようだ。
…デバドラがオブジェクト指向な時代がついに到来か!!
というわけで Microsoft にあったドキュメントを読んでみた。
全訳しても何の意味もないので(読めばいいだけだし)
要点だけ備忘録としてメモメモ。
紹介
- Windows XP, Vista で使用可能
- カメラ・ポータブルミュージックプレイヤーのような Protocol Device Class に対応
- Protocol-based or serial bus based ( ex. USB ) なドライバ
- デバイスは直接もしくはネットワークや無線 ( Bluetooth ) を介して接続可能
- ソフトウェアのみで完結するドライバも対応
- 以下を必要とするドライバは KernelMode にて
- 割り込み制御
- DMA のようなハードウェアへの直接アクセス
- 厳密なタイミング制御
- nonpaged pool やその他 KernelMode で予約されたリソース
動作モデル
- 動作の肝となるモジュール
- UMDF は COM のサブセットとして、COM プログラミングパターン
- COM のすべての機能を使うわけではない
- 寿命管理とインターフェースのみを活用
- IUnknown から派生し、AddRef, Release, QueryInterface を実装
- UMDF は LocalService セキュリティコンテキストで走る
UMDF ドライバの実装
- Win32 API や、その他 UserMode ライブラリが利用可能
- 以下のものを必ず実装すること
- COM で必要な DllGetClassObject 関数
- DriverObject 生成のための IClassFactory クラス
- 各ドライバクラスに IDriverEntry インターフェースの実装
実装のメモ
- UMDF の設定は、初期化時に IWDFDeviceInitialize::RetrieveDevicePropertyStore メソッド
- IWDFNamedPropertyStore のポインタがもらえる
- IWDFDeviceInitialize::AutoForwardCreateCleanupClose
- IQueueCallbackCreate::OnCreateFile は実装しないと成功したことになるので注意。
- 明示的に失敗を return しよう
- IFileCallbackCleanup, IFileCallbackClose も存在しないと自動成功