对 IRP_MJ_QUERY_INFORMATION 的调用由 Win32 的 GetFileInformationByHandle 或内核模式 ZwQueryInformationFile 等函数生成。
有人可以向我解释这个电话实际发生了什么吗?假设我有一个传统的 7200RPM 磁存储 HDD。
我知道从磁性旋转驱动器读取时的许多延迟是由于寻道时间造成的,但 IRP_MJ_QUERY_INFORMATION 调用在我的应用程序中似乎非常快。我检查了预取缓存的内容,但在其中看不到它正在查询的文件。我猜它被缓存在内存中的某个地方,因为调用很多,但解决得很快,而且我没有看到太多的 HDD 活动(尽管我可能是错的)。在这些情况下实际上会发生什么?文件是否被 Windows 缓存在其他地方?如果是这样,我怎么能看到它?
我知道也有一个 HDD 缓存,但我的理解是它更像是用于预读等的缓冲区。
编辑:我在 MSDN 上阅读了这篇文章,它建议“始终缓存文件系统元数据。”,我假设这意味着如果您打开文件并对其进行修改,诸如“上次修改日期”之类的元数据将不会在刷新文件缓冲区之前,不会将其提交到磁盘。就我而言,我正在查询一个文件,因此我不需要对元数据进行任何更改。在我的程序第一次查询信息后,Windows 是否缓存元数据?