Windows User-Mode Driver Framework

User-Mode Driver Framework (UMDF) は、マイクロソフト社のWindows Vistaオペレーティングシステム (operating system, OS) で初めて導入されたデバイスドライバーの開発プラットフォームである。Windows XP向けにも利用可能である。これにより、デバイスの特定のクラスのドライバーの作成が容易になる。
概要.
標準のデバイスドライバーは、特にマルチスレッドのソフトウェア環境では、非常に広範囲のシステムおよびデバイス状態を処理する必要があるため、書き難いことが多い。カーネルに直接アクセスする際、すべての標準ドライバーは高い権限を持っているので、ひどい記述のデバイスドライバーは、システムに重大な損傷を引き起こす可能性がある（例えばBSODやデータ破損）。ユーザーレベルでの割り込みやメモリ管理において専用のアプリケーションプログラミングインターフェイス (application programming interface, API) で新しいドライバークラスを提供する代わりに、UMDFは、ドライバー直接アクセスの問題からカーネルを保護する。エラーが発生した場合、この新しいフレームワークは、システムに影響を与えることなく、即座にドライバーを再起動することができる。これは、断続的にシステムに接続されたり、USBやFirewireなどのようなバス技術によるホットスワップをサポートしているデバイスに対して特に有用である。
マイクロソフトによると、UMDFドライバーは、カーネルモードドライバーよりも記述やデバッグが簡単であるとされている。ただしUMDFは、パフォーマンスを重視するデバイスや高度にステートフルなデバイスには使用されないであろう。
UMDFの最初のバージョンは2004年10月12日にWindows Media Playerバージョン10の一部として出荷された。コードネーム「Crescent」は、メディア転送プロトコル (Media Transfer Protocol) をサポートするように設計され、一般向けのインターフェイスやドキュメントは提供されていなかった。後に、マイクロソフトは、UMDFをデバイスドライバーの開発プラットフォームに転換することを決定した。
アーキテクチャ.
UMDF 1.0のドライバーは、マイクロソフトのComponent Object Model (COM) に基づいたDLLである。ただし、UMDFはロード、アンロード、または同時並行性 (concurrency) を制御するためにCOMを使用しているわけではない。プログラミングパターンとしてのみCOMを使用している。例えば、COMの"IUnknown"インターフェイスの利用などである。起動時に、UMDFドライバーは"DllGetClassObject"を呼び出して"IClassFactory"インターフェイスへのポインタを取得し、その後"IClassFactory"インターフェイスの"CreateInstance"メソッドを使用してドライバーコールバックオブジェクトのインスタンスを作成する。
ドライバーオブジェクトは、フレームワークが提供する"IWDFDriver"インターフェイスのインスタンスである。ドライバーは、"IDriverEntry"インターフェイスを介して、コールバックのセットを提供する。これはドライバーのカスタマイズのための主要なエントリポイントとなる。
Windowsドライバー開発には通例C言語が用いられるが、UMDFではC++言語を使ってドライバー開発を行なうことができる。