ドライバーによって作成されたファイル オブジェクトに対する I/O のキューイング
上位層のドライバーが作成したファイル オブジェクトを I/O として使用する下位層のドライバーは、アプリケーションが作成したファイル オブジェクトを I/O として使用するドライバーに似ています。ただし、そう言えるのは、その下位層のドライバーが発行する 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 を呼び出してファイル オブジェクトを作成したデバイス以外のデバイスによってキューに入れられた I/O は追跡されないからです。
デバイスを取り外す処理の際に、下位層のドライバーが発行した無関係の I/O の完了を上位層のドライバーで待機できません。そのような未処理の I/O があると、上位層のドライバーのファイル オブジェクトを完了できないため、「デバイス削除への影響」で説明されているように、ドライバーが停止されることになります。