次の方法で共有


ドライバーによって作成されたファイル オブジェクトとアプリケーションによって作成されたファイル オブジェクト

ドライバーのスタック内の次のドライバーでは、アプリケーションによって作成されたファイル オブジェクトと高位のレイヤーのドライバーによって作成されたファイル オブジェクトの違いは特定できません。ただし、各種のファイル オブジェクトを作成して使用するプロセスは異なります。

ファイル オブジェクトは、I/O 操作のセッションを表します。ただし、ファイル オブジェクトは物理デバイス上のファイルを表すとは限りません。

アプリケーションでデバイスへのハンドルが開かれると、開いているハンドルに対応するファイル オブジェクト (PFILE_OBJECT) が I/O マネージャーによって作成されます。次に、UMDF によって対応するフレームワーク ファイル オブジェクトが作成されます。このオブジェクトは、IWDFFile インターフェイスを通じて UMDF ドライバーに公開されます。アプリケーションによって開かれたハンドルに送信される I/O が、作成されたファイル オブジェクトに関連付けられます。ドライバー レベルで、ファイル オブジェクト (IWDFFile) が各 UMDF I/O 要求 (IWDFIoRequest) に関連付けられます。ドライバーは、コンテキストをファイル オブジェクトに関連付けて、I/O セッションに固有の情報を格納できます。また、任意の I/O 操作に関するこの情報を取得することもできます。

次の表は、アプリケーションによって開始される要求の結果としてドライバーが受け取る通知を示しています。また、エラーが発生しない場合にドライバーで実行されるアクションも表に示しています。

アプリケーションが開始する呼び出し ドライバーが受け取る呼び出し

Microsoft Win32 の CreateFile 関数の呼び出し。

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

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

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

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

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

ドライバーは、ファイル オブジェクトに関連付けられたすべての I/O 要求を取り消すか完了します。

ドライバーがクリーンアップ通知から復帰した後にも未処理の I/O 要求がある場合は、UMDF によって取り消されます。

クリーンアップが完了し、UMDF によって未処理の I/O 要求が取り消されたら、ドライバーは IFileCallbackClose::OnCloseFile メソッドの呼び出しを受け取ります。

 

ドライバーが I/O をそのデバイスに発行するとき、I/O がアプリケーション I/O とは関係ない場合にのみ、ドライバーでファイル オブジェクトを作成する必要があります。I/O がアプリケーション要求に直接関係し、アプリケーション I/O 内に完全に含まれている場合 (つまり、この I/O が完了するまでアプリケーション要求が完了しない場合)、ドライバーはアプリケーションによって作成されたファイル オブジェクトでこの I/O を発行できます。つまり、ドライバーがそのデバイスに発行する I/O は、アプリケーションのセッション内に含まれます。したがって、ドライバーは、アプリケーションによって作成されたファイル オブジェクトを使用して I/O を発行できます。ただし、ドライバーがアプリケーション I/O とは関係ない I/O を発行する必要がある場合、ドライバーではドライバーによって作成されたファイル オブジェクトを使用する必要があります。

次の表は、ドライバーによって開始される要求の結果としてドライバーのスタック内の次のドライバーが受け取る通知を示しています。スタック内の次のドライバーは、リフレクター (カーネル モードの場合) または別の UMDF ドライバー (ユーザー モードの場合) です。また、スタック内の次のドライバーで実行されるアクションも表に示しています。

ドライバーが開始する呼び出し スタック内の次のドライバーが受け取る呼び出し

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

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

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

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

要求をフォーマットするための呼び出し (IWDFIoTarget::FormatRequestForIoctl メソッドの呼び出しなど)。

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

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

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

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

ドライバーは、ファイル オブジェクトに関連付けられたすべての I/O 要求を取り消すか完了します。

ドライバーがクリーンアップ通知から復帰した後にも未処理の I/O 要求がある場合は、UMDF によって取り消されます。

クリーンアップが完了し、UMDF によって未処理の I/O 要求が取り消されたら、ドライバーは IFileCallbackClose::OnCloseFile メソッドの呼び出しを受け取ります。

 

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