ファイル ハンドルとボリュームで書き込みキャッシュが有効になっている場合、ファイル操作はキャッシュへのメモリ コピーだけで完了し、後で遅延フラッシュされる可能性があります。実際の IO は行われないため、その場合に非同期 IO を実行する理由はありません。
内部的には、各 IO 操作はIRP (IO 要求パケット)によって表されます。これはカーネルによって作成され、リクエストを処理するためにファイルシステムに渡されます。リクエストが実際のディスク コントローラ コマンドになるまで、階層化されたドライバを介して渡されます。そのドライバーは要求を行い、IRP を保留中としてマークし、スレッドの制御を返します。ハンドルがオーバーラップ IO 用に開かれた場合、カーネルはすぐに制御をプログラムに戻します。それ以外の場合、カーネルは IRP が完了するのを待ってから戻ります。
ただし、すべての IO 操作がディスクに至るわけではありません。ファイルシステムは、書き込みをキャッシュする必要があり、後で書き込む必要があると判断する場合があります。高速 IOと呼ばれる、完全にキャッシュを使用して満たすことができる操作用の特別なパスさえあります。非同期リクエストを行った場合でも、高速 IO は常に同期的です。これは、キャッシュにデータをコピーしたり、キャッシュからデータをコピーしたりするだけだからです。
プロセス モニターは、高度な出力モードで、さまざまなモードを表示し、IRP が保留中の間、ステータス フィールドに空白を表示します。
書き込みキャッシュで未処理のままにしておくことができるデータの量には制限があります。いっぱいになると、書き込み操作はすぐには完了しません。多くの操作で、一度に大量のデータを書き込んでみてください。