ドライバー作成ファイル オブジェクトとアプリケーション作成ファイル オブジェクトの比較

警告

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の概要をご覧ください。

アプリケーションがデバイスへのハンドルを開くと、フレームワークはドライバーの IQueueCallbackCreate::OnCreateFile メソッドを呼び出し、デバイスに関連付けられているファイル オブジェクトの IWDFFile インターフェイスへのポインターを提供します。 アプリケーションが開いているハンドルに送信するすべての I/O 要求は、作成されたファイル オブジェクトに関連付けられます。 このような要求が到着すると、フレームワークは、ドライバーが提供する UMDF キュー オブジェクト インターフェイスのいずれかから適切なメソッドを呼び出します。 その後、ドライバーは IWDFIoRequest::GetFileObject を呼び出して、要求に関連付けられているファイル オブジェクトを特定できます。 ドライバーは、I/O セッションに固有のコンテキストを関連付けるために、ファイル オブジェクトで AssignContext を呼び出すことができます。

次の表は、アプリケーションが行う呼び出しと、ドライバーが受け取る結果の通知を示しています。

アプリケーションが開始 ドライバーが受信

Microsoft Win32 CreateFile 関数の呼び出し。

IQueueCallbackCreate ::OnCreateFile メソッドの呼び出し。

Win32 ReadFileExWriteFileEx、または DeviceIoControl 関数の呼び出し。

IQueueCallbackRead::OnReadIQueueCallbackWrite::OnWrite、または IQueueCallbackDeviceIoControl::OnDeviceIoControl メソッドの呼び出し。

ファイル オブジェクトに対する最後の開いているハンドルの Win32 CloseHandle 関数の呼び出し。

IFileCallbackCleanup ::OnCleanupFile メソッドの呼び出し。

ドライバーは、ファイル オブジェクトに関連付けられているすべての I/O 要求をキャンセルまたは完了します。

ドライバーが クリーンアップ通知から戻った後、UMDF は保留中の I/O 要求を取り消します。

クリーンアップが完了し、UMDF が保留中の I/O 要求を取り消すと、ドライバーは IFileCallbackClose::OnCloseFile メソッドの呼び出しを受け取ります。

システム コンポーネントは、Universal Windows アプリの代わりに作成要求を発行する場合があります。 ドライバーは、作成要求を発行したアプリのプロセス ID を確認する必要がある場合は、IWDFFile3::GetInitiatorProcessId メソッドを呼び出すことができます。

ドライバーによって作成されたファイル オブジェクト

ドライバーが、アプリケーションに依存しない I/O 要求を、スタック内の次のドライバー (既定の I/O ターゲット) に作成して送信する必要がある場合、ドライバーは IWDFDevice::CreateWdfFile を呼び出して、IWDFDriverCreatedFile インターフェイスへのポインターを取得する必要があります。 この場合、次のドライバーは、アプリケーションが要求を生成するときにドライバーが受け取るのと同じ通知を受け取ります。

次の表は、ドライバーが行う呼び出しと、スタック内の次のドライバーへの結果の通知を示しています。

ドライバーが開始 スタック内の次のドライバーが受信

IWDFDevice::CreateWdfFile メソッドの呼び出し。

UMDF によって作成されるファイル オブジェクトは、デバイスとスタック内の次のデバイスの間の I/O セッションを表します。

IQueueCallbackCreate ::OnCreateFile メソッドの呼び出し。

IWDFDevice::CreateRequest メソッドの呼び出し。

要求の書式を設定する呼び出し (IWDFIoTarget::FormatRequestForIoctl メソッドの呼び出しなど)。

IWDFIoRequest::Send メソッドの呼び出し。

IQueueCallbackRead::OnReadIQueueCallbackWrite::OnWrite、または IQueueCallbackDeviceIoControl::OnDeviceIoControl メソッドの呼び出し。

IWDFDriverCreatedFile::Close メソッドの呼び出し。

IFileCallbackCleanup ::OnCleanupFile メソッドの呼び出し。

ドライバーは、ファイル オブジェクトに関連付けられているすべての I/O 要求をキャンセルまたは完了します。

ドライバーが クリーンアップ通知から戻った後、UMDF は保留中の I/O 要求を取り消します。

クリーンアップが完了し、UMDF が保留中の I/O 要求を取り消すと、ドライバーは IFileCallbackClose::OnCloseFile メソッドの呼び出しを受け取ります。

スタック内の次のデバイスでは、アプリケーションによって作成されるファイル オブジェクトと、上位レイヤー デバイスによって作成されるファイル オブジェクトの間に違いはありません。