ドライバー作成ファイル オブジェクトとアプリケーション作成ファイル オブジェクトの比較
警告
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 ReadFileEx、WriteFileEx、または DeviceIoControl 関数の呼び出し。 |
IQueueCallbackRead::OnRead、IQueueCallbackWrite::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::OnRead、IQueueCallbackWrite::OnWrite、または IQueueCallbackDeviceIoControl::OnDeviceIoControl メソッドの呼び出し。 |
IWDFDriverCreatedFile::Close メソッドの呼び出し。 |
IFileCallbackCleanup ::OnCleanupFile メソッドの呼び出し。 ドライバーは、ファイル オブジェクトに関連付けられているすべての I/O 要求をキャンセルまたは完了します。 ドライバーが クリーンアップ通知から戻った後、UMDF は保留中の I/O 要求を取り消します。 クリーンアップが完了し、UMDF が保留中の I/O 要求を取り消すと、ドライバーは IFileCallbackClose::OnCloseFile メソッドの呼び出しを受け取ります。 |
スタック内の次のデバイスでは、アプリケーションによって作成されるファイル オブジェクトと、上位レイヤー デバイスによって作成されるファイル オブジェクトの間に違いはありません。