Microsoftは、Windowsデバイスドライバの開発者向けに、オープンソースフレームワーク「Driver Module Framework(DMF)」を公開した。DMFを使うことで、Windows Driver Framework(WDF)ドライバを簡単に開発できるだけでなく、ドライバ間でコードを共有できる。
Microsoft Devicesチームは2018年8月15日(米国時間)、Windowsデバイスドライバの開発者向けに、オープンソースフレームワーク「Driver Module Framework(DMF)」を公開した。DMFを使うことで、シンプルで構造化された「Windows Driver Framework(WDF)」ドライバを簡単に開発できるだけでなく、ドライバ間でコードを共有できるようになる。
DMFはWDFの拡張であり、「DMFモジュール」と呼ばれる新しいWDFオブジェクトのライブラリを提供する。DMFモジュールは他のDMFモジュールや、WDFモジュール、ハードウェアと、構造化された方法で情報をやりとりできる。
現在、Microsoft Devicesチームは、全てのWDFドライバについてDMFを使って作成している。DMFモジュールは適切にテストでき、再利用することや、新しい要件に合わせて後から拡張することが可能だ。DMFの利用により、優れたアーキテクチャに基づいたドライバを開発でき、バグ修正の効率も高まるという。DMFモジュールのバグを修正すると、そのモジュールを使って作成した全てのドライバに、その修正が自動的に適用されるからだ。
図1に典型的なWDFドライバの設計を示した。
図1の設計ではドライバはただ1つのデバイスコンテキストで状態を保持している。内部のユニット(BUTTONなど)間でアクセスの同期がとれないとデータの破損やデッドロックが起きる。別のドライバに一部のユニットを再利用したいとしても、ユニット間の複雑なやりとりを理解しなければならない。
DMFを使ってWDFドライバを作成すると、このようなドライバのアーキテクチャを改良できる。
その場合、DMFのクライアントモジュールと幾つかの構築済みの一般ユーティリティーモジュールを使ってドライバを作成する。以下では、DMFモジュールを使用するコードを「クライアントドライバ」とした。
WDFと個々のDMFモジュールの間には薄い抽象化レイヤー(DMF)があり、これを介してモジュールがバインドされ、WDFイベントが各モジュールにディスパッチされる。図2の矢印が示すように、DMFモジュールは相互に明確に定義された方法で情報をやりとりする。クライアントドライバとも同様にやりとりする。
全てのモジュールがデバイスコンテキストを共有するのではなく、各モジュールが固有のコンテキスト領域(図2中の緑色の部分)を使用し、自身の状態を維持する。
Microsoftは、DMFベースのWDFドライバと、従来のWDFとの重要な違いを幾つか挙げている。
Microsoftは以上のような特徴をまとめて以下のように述べている。
「各モジュールは、自己完結的な1つのユニットだ。固有のコードと、コンテキスト、コールバックを持つ。そのおかげで、コードを簡単に再利用できる。このようにドライバを整理することで、多くの問題を解決できる」
DMFは、WDFの設計とやりとりのパターンに従っている。WDFに取って代わるのではなく、ドライバがOSのインタフェースに直接アクセスすることも禁じていない。
開発者がDMFを使うメリットは、デバイスドライバが実行しなければならないタスクを、小さなユニットに簡単に分割できることだ。1つのタスクを実行するこうした自己完結的な小さいユニットを、モジュールとして作成できる。
DMFの現行リリースには幾つかのDMFモジュールが含まれている。バッファー管理モジュールや、タスク管理モジュール、通知モジュール、各種入出力ターゲットへのアクセスモジュール、各種ユーティリティーモジュールなどだ。
MicrosoftはDMFとDMFモジュール、テンプレート、サンプルコードを、GitHubで公開している。今後もコードの改良や新しいモジュールの追加を継続するという。
Copyright © ITmedia, Inc. All Rights Reserved.