IRP_MJ_QUERY_INFORMATION への呼び出しは、Win32 の GetFileInformationByHandle やカーネル モードの ZwQueryInformationFile などの関数によって生成されます。
誰かがこの呼び出しで実際に何が起こっているのか説明してもらえますか? 従来の 7200RPM 磁気ストレージ HDD を使用していると仮定します。
磁気回転ドライブからの読み取りの遅延の多くはシーク時間によるものであることはわかっていますが、私のアプリケーションでは IRP_MJ_QUERY_INFORMATION 呼び出しが非常に高速に見えます。プリフェッチ キャッシュの内容を確認しましたが、そこでクエリを実行しているファイルを確認できませんでした。呼び出しが多いため、メモリのどこかにキャッシュされていると思いますが、非常に迅速に解決され、HDD アクティビティはあまり見られません (間違っている可能性があります)。これらの状況で実際に何が起こるのでしょうか? ファイルは Windows によって別の場所にキャッシュされていますか? もしそうなら、どうすればそれを見ることができますか?
HDDキャッシュもあることは知っていますが、先読みなどのバッファのように機能することを理解しています.
編集: MSDN でこの記事を読んでいたところ、「ファイル システムのメタデータは常にキャッシュされている」ことが示唆されています。これは、ファイルを開いて変更を加えると、「最終更新日」などのメタデータが失われることを意味すると想定しています。ファイルバッファをフラッシュするまでディスクにコミットされません。私の場合、ファイルをクエリしているので、メタデータを変更する必要はありません。Windows は、プログラムによって行われた情報の最初のクエリの後にメタデータをキャッシュしますか?