各位程序员好。
我正在尝试使用WinIoCtl函数转储NTFS分区的 USN 日志的内容。我有 *USN_JOURNAL_DATA* 结构,它告诉我它的最大大小为 512 MB。我已经将它与fsutil所说的进行了比较,它的价值是相同的。
现在我必须将每个条目读入 *USN_RECORD* 结构。我在一个从 0 开始的 for 循环中执行此操作,并以 4096(簇大小)为增量达到日志的最大大小。我在相同大小的缓冲区中读取每个 4096 字节,并从中读取所有 USN_RECORD 结构。
一切都很好,文件名正确,时间戳,原因,一切,除了我似乎错过了一些最近的记录。我在分区上创建了一个新文件,在其中写入了一些内容,然后删除了该文件。我再次运行该应用程序并没有出现记录。我发现只有当我继续阅读超过期刊的最大尺寸时才会出现记录。怎么可能?
目前我正在从期刊数据的开头读取到最大大小+分配增量(两者都是存储在 *USN_JOURNAL_DATA* 结构中的值),我不认为它是正确的,我很难找到彻底与此相关的信息。
有人可以解释一下吗?USN 日志周围是否有类似于MFT工作方式的缓冲区(这意味着当其他文件需要磁盘空间时,它的大小减半)?
我究竟做错了什么?