ドライバーへの作成通知とクローズ通知の不均衡の防止
警告
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 ドライバーは、IWDFDeviceInitialize::AutoForwardCreateCleanupCloseメソッドを使用して、フレームワークが ファイル作成、ファイルのクリーンアップ、およびファイルのクローズの通知をデバイス スタック内の次の下位ドライバーに自動的に転送するタイミングを制御できます。 ただし、上位ドライバーは AutoForwardCreateCleanupClose をデバイス レベルでのみ自動的に転送するよう、ファイル レベルでは転送しないように設定するため、転送はデバイスのすべてのファイルで同じである必要があります。 フレームワークは、ファイルのクリーンアップ通知とファイルのクローズ通知に対してこの転送動作を保証します。 上位のドライバーは IQueueCallbackCreate::OnCreateFileコールバック関数を実装する場合は、その転送動作がすべてのファイル作成リクエストに対して同じであり、そしてファイルクリーンアップ通知およびファイルクローズ通知の転送動作と一致していることを確認する必要があります。 これを行わないと、下位ドライバーが IQueueCallbackCreate::OnCreateFileメソッドと IFileCallbackCleanup::OnCleanupFile メソッドおよび IFileCallbackClose::OnCloseFile メソッドへの量の等しくない呼び出しを受信する場合があります。
下位のドライバーが、等しくない量のファイル作成通知とファイルクローズ通知を受信するのを防ぐために、上位ドライバーは、IQueueCallbackCreate::OnCreateFileコールバック関数で次のことを確認する必要があります:
その転送動作は、デバイスのすべてのファイルで同じです。
その転送動作は、IWDFDeviceInitialize::AutoForwardCreateCleanupCloseのフラグ パラメーターを設定する方法と一致します。 つまり、
- ドライバーがフラグを WdfTrueに設定する場合、ドライバーは、すべてのファイル作成リクエストをデバイス スタックの下に転送する必要があります。
- ドライバーが フラグをWdfFalseに設定する場合、ドライバーは、ファイル作成リクエストをスタックの下に転送してはなりません。
- ドライバーはフラグをWdfUseDefaultに設定し、そして:
- ドライバーが関数 ドライバーの場合、ファイル作成リクエストをスタックの下に転送してはなりません。
- ドライバーがフィルター ドライバーの場合、すべてのファイル作成リクエストをスタックの下に転送する必要があります。
ドライバーがファイル作成リクエストを転送できない場合でも、ドライバーは IWDFDevice::CreateWdfFile メソッドを呼び出して新しい WDF ファイルを作成することで、下位ドライバーの新しいファイル作成リクエストを生成できます。 ドライバーはその後、新しく生成されたファイル作成リクエストの結果 (つまり、CreateWdfFileの結果) に基づいて、元のファイル作成リクエストを完了できます。