Share via


UMDF DDI プログラミング モデル

警告

UMDF 2 は UMDF の最新バージョンであり、UMDF 1 よりも優先されます。 すべての新しい UMDF ドライバーは、UMDF 2 を使用して記述する必要があります。 UMDF 1 には新機能が追加されておらず、Windows 10 の新しいバージョンでは UMDF 1 のサポートが制限されています。 ユニバーサル Windows ドライバーでは、UMDF 2 を使用する必要があります。

アーカイブされた UMDF 1 サンプルは、「Windows 11、バージョン 22H2 - 2022 年 5 月 ドライバーサンプルの更新」でご確認いただけます。

詳しくは、「UMDF の概要」をご覧ください。

フレームワークと UMDF ドライバーは、UMDF DDI を介して通信します。 UMDF DDI は COM をベースにしていることを除けば、KMDF DDI と類似しています。 そのため、KMDFに精通しているドライバーライターにとって UMDF の理解は容易です。

フレームワーク オブジェクトの種類ごとに、UMDF は、オブジェクトのインスタンスを操作するインターフェイスを定義します。 各インターフェイスでは、メソッドとプロパティがサポートされています。 メソッドは、オブジェクトに代わって実行できるアクションと、設定されたプロパティを定義し、オブジェクトの特性を取得します。 一部のインターフェイスはフレームワークによって実装され、他のインターフェイスはドライバーによって実装されます。 フレームワーク オブジェクトによって公開されるインターフェイスはフォーム IWDF <オブジェクト>ですが、ドライバーによって公開されるイベント コールバック インターフェイスはフォーム I <オブジェクト>< アクション>のものであり、<オブジェクト>はキューや要求などを表し、<アクション>はインターフェイスの動作を示します。 コールバック インターフェイスのメソッドは、"オン" で始まります。

UMDF ドライバーは、メソッドとプロパティを使用してフレームワークのオブジェクトと通信します。 フレームワークは、イベント通知を介してドライバーと通信します。これは、フレームワークが特定のイベントについてドライバーに通知するために呼び出すことができるコールバック関数です。 コールバック関数を登録するために、ドライバーは次のフレームワーク オブジェクト メソッドなどを呼び出し、ドライバーがサポートするすべてのインターフェイスに関連付けられている IUnknown インターフェイスへのポインターを渡すことができます。

ドライバーからフレームワークへの通信の例として、デバイスの既定の I/O キュー オブジェクトを考えてみます。 ドライバーは、IWDFIoQueue::GetState などのメソッドを呼び出して I/O キューに関する状態情報を取得したり、IWDFIoQueue::RetrieveNextRequest を呼び出して I/O キューから要求を取得したりできます。 ドライバーは、IWDFDevice::CreateIoQueue メソッドを呼び出して、IQueueCallbackReadIQueueCallbackWrite などのコールバック インターフェイスを登録することで、I/O キューに通知を要求することもできます。 これらのインターフェイスのメソッドは、アプリケーションが読み取り要求と書き込み要求を送信するときに、フレームワークによって呼び出されます。

フレームワークは、ドライバー コールバック メソッド間で必要な同期を提供します。 既定では、フレームワークはデバイス オブジェクト レベルで同期されます。つまり、フレームワークは、デバイス オブジェクト レベル以下でイベント コールバック メソッドを同時に呼び出しません。 ドライバーは、同期を要求することによって、この既定値をオーバーライドできます。 詳細については、「コールバック同期モードの指定」を参照してください。