UMDF のアーキテクチャ
このトピックでは、ドライバー マネージャーがユーザー モード デバイス スタックを構築する方法と、ホスト プロセス、リフレクター、およびドライバー マネージャーが、アプリケーションがユーザーモード ドライバー フレームワーク (UMDF) ドライバーに送信する I/O 要求を処理する方法について説明します。
カーネルモード スタックと同様に、ユーザーモード スタックの構築と破棄は、プラグ アンド プレイ (PnP) イベントによって駆動されます。 カーネルモード スタックがビルドされると、リフレクターは、ユーザーモード スタックの構築を開始するようにドライバー マネージャーに通知します。 ドライバー マネージャーは、ドライバー ホスト プロセスを起動し、ユーザーモード スタックを構築するために起動されたプロセスに十分な情報を提供します。 この方法では、ユーザーモード スタックはカーネルモード スタックの拡張機能と見なすことができます。
ドライバー ホスト プロセスは、ユーザーモード ドライバーの実行環境を提供し、ユーザーモード スタック内のドライバー間でメッセージをルーティングします。 リフレクターは、メッセージベースのプロセス間通信メカニズムを使用して、ドライバー マネージャーおよびホスト プロセスと通信します。
UMDF ドライバーに I/O 要求を送信するには、アプリケーションは Win32 ファイル I/O 関数 (CreateFile、ReadFileEx、CancelIoEx、DeviceIoControl など) を呼び出します。 リフレクタは、クライアント アプリケーションから要求を受信すると、適切なドライバー ホスト プロセスに要求を送信します。 その後、ドライバー ホスト プロセスによって、要求が正しいユーザーモード デバイス スタックの先頭にルーティングされます。
要求は、ユーザーモード スタック内のいずれかのドライバーによって完了するか、ドライバーの 1 つによってリフレクタに転送されます。 リフレクターは、ユーザーモード ドライバー スタックから要求を受信すると、完了のためにカーネルモード スタックに要求を送信します。