WDK,KMDF,WDF,WDK

現在、Windowsデバイスドライバー開発は、DDKからWDKへと変わっている。そこで、新しいデバイスドライバーの作り方として登場したのがWDFである。Microsoft社はこれをWDMにかわるWDFドライバーと称して、いかにも新しいアーキティクチャーが登場したかのように説明しているが、私には、WDMと同じものの様に見える。
そのためか、ちまたでは、WDMは時代遅れな古い形式で、WDFが新形式のデバイスドライバーだと単純に誤解している方々が多いようだ。しかし、よくよく調べてみれば、何も変わっていない。従来のデバイスドライバー開発で、効率の低下と品質のばらつきの原因となっていた冗長なコードの実装を、C言語のライブラリーとして整理したにすぎない。つまりは、フレームワークを提供することで、開発効率の改善と、品質の確保を目指した、ということである。
かつて、次なるDDKは、C++のクラスライブラーになるという噂があったが、結果としては、そうならなかった様である。それを先にやったのが、BlueWater SystemsのWinDKだ。かつて私も、これの技術サポートをした事がある。残念ながら製品としては無くなってしまったが、これは名作だったと思う。WinDKは、WDFのアプローチと同じように冗長なコードを整理した。(WinDKの方が先、Mictosoft社はこれを真似たのだろう)。WinDKのとても優れているところは、バランス感覚。冗長なコードをC++のクラスライブラリーとして、フレームワークに整理したのだが、大抵の場合、C++オブジェクト指向を始めるとどうしてもマニアックに抽象化をやりすぎてしまう。そこをぐっとこらえて、必要最低限にとどめ、あくまでも、開発効率の向上に徹している。目的はオブジェクト指向に戯れることではないためだ。この辺りのさじ加減が素晴らしい。
さて、話を戻して、WDK,WDFにより、如何にもデバイスドライバーが短期間で、簡単に開発できるという少々大げさな事をいう方々もいるが、かならずしも正確ではない。安易にこれを丸ごと信じてしまうと大火傷を負うこと間違いない。
先にも述べた通り、デバイスドライバーのアーキティクチャーは、WDMから基本的に変わっていない。WDFは、それを多少整理して纏めただけにすぎない。フレームワークが全てを自動的にやってくれるわけではない。フレームワークの利用にあたっては、WDMの仕組みを十分に理解していることが前提だ。おそらく教科書のサンプルのような簡単なものであれば、スッキリ、簡単にできたと思うかもしれないが、実際の、現実のデバイスドライバー開発はそんな簡単なものは何処にもない。いかにも机上の空論である。
かつて似たようなな例があった。それは、MFCだ。当初、MFCを使うと、いかにも簡単にWindowsプログラミングができると勘違いした結果、WIN32プログラミングに全く知識のない連中を開発に大量投入し、結果、バグだらけ、動作も極めて不安定な手続き指向的なトンデモプログラムを大量に生み出した。結果これが、周囲は勿論の事、後の代々まで祟り、最後には、WIN32プログラミングが解るマットーなプログラマーがこれの尻ふきをさせられる事となったのだ。「不出来なプログラムを憎み、プログラマーを憎んではならない。」などというジョークが流行ったものだ。
まだ、アプリケーションなら、多少のごまかしもきくだろう。臭いものに蓋もできるだろう。だが、カーネルモードで、OSと供に動くデバイスドライバーの場合、とても怖くてそんな事はできない。まったくもって作り直ししかないという結果になる事間違いない。
WDFの利用は知識と経験がある者にとっては、開発効率と品質を改善する解決策となりえるであろう。だが、そうでない者にとっては、魔法の杖とはならない事をきちんと理解すべきである。

Hiroyuki Shimizu/CodeGear,Inc.