Windows Vista 以降では、オペレーティング システムはセッション 0 でサービスとシステム プロセスを分離し、アプリケーションは後続の上位の番号付きセッションで実行します。 UMDF ホスト プロセス (WUDFHost.exe) はセッション 0 で実行されるシステム プロセスの 1 つであるため、UMDF ドライバーはアプリケーションから分離されます。 その結果、ドライバーを開発するときは、次のガイドラインを使用する必要があります。
ダイアログ ボックスなどのユーザー インターフェイス (UI) 要素を作成したり、ユーザー入力に依存したりしないでください。 ユーザーはセッション 0 で実行されていないため、UI が表示されず、それに応答できません。
同様に、UI 要素を操作しないでください。 たとえば、UMDF ドライバーは、ユーザーのセッション内のウィンドウを列挙できません。
ドライバーがサービスと通信する必要がある場合は、リモート プロシージャ コール (RPC) や名前付きパイプなどのクライアント/サーバー メカニズムを使用します。
Windows API で関数を呼び出すときは注意が必要です。 一部の関数では、UI 要素を操作したり、ユーザーのセッションで名前付きオブジェクトにアクセスしようとしたりすることがあります。 ユーザー モード サービスから呼び出さない Windows 関数は呼び出さないでください。 一般に、UMDF ドライバーは、kernel32.dllでエクスポートされた関数を安全に呼び出すことができますが、user32.dllでエクスポートされた関数は呼び出しません。
UMDF ドライバーは、次のタスクを実行する Windows 関数を呼び出す可能性があります。
ドライバーは、プラグ アンド プレイ デバイス プロパティを取得する SetupDiXxx 関数を呼び出す場合があります。 たとえば、 UMDF Sample Driver for OSR USB Fx2 Learning Kit はSetupDiGetDeviceRegistryProperty を呼び出して、デバイスのバスの種類の GUID を取得します。 手記 UMDF ドライバーは 、SetupDiXxx 関数の多くを安全に呼び出すことはできませんが、デバイス ノードのプロパティを取得する関数を呼び出しても安全です。
手動キューから I/O 要求を取得するドライバーは、定期的なタイマーを作成してキューをポーリングする場合があります。 たとえば、 WudfVhidmini サンプルでは、 CreateThreadpoolTimer を呼び出してタイマー コールバック ルーチンを登録し、 SetThreadpoolTimer を呼び出して定期的なタイマーを設定します。 手記 バージョン 1.11 以降、UMDF は作業項目のサポートを提供します。 詳細については、「作業項目 の使用」を参照してください。
フレームワークの外部でシステム サービスを使用する方法の詳細については、Orwick、Peny、Guy Smith の第 14 章 (「フレームワークを超える」) を参照してください。 Windows Driver Foundation を使用したドライバーの開発。 Redmond、WA: Microsoft Press、2007。
セッション 0 の分離の詳細については、「 Windows のサービスとドライバーに対するセッション 0 の分離の影響」を参照してください。