下面是 SysInternals Filemon 运行的片段。
我不明白的是为什么各种进程都以偏移量读取 C: 驱动器,而不是读取特定的文件。
我注意到,即使我没有打开文件管理器,Windows 资源管理器也会执行相同的操作。
答案1
程序想要到达特定偏移量的原因有很多。Shadow Copy 等服务可能需要这样做,除非我们看到它们实际读取的内容,否则无法说出原因。一个例子是使用 Shadow Copy 来镜像卷,然后您将执行数据流(如果观察到,则为十六进制数据流),顺序执行,您将在两个驱动器上看到以下过程:
1)从偏移量0处读取4096字节(读取一个块)。
2)写入偏移量0,4096字节的另一个位置(写入一个块)
3)从偏移量 4096、4096 字节读取...依此类推,直到偏移量 = 磁盘大小时,您将镜像该卷。
话虽如此,这可能是观察者应用程序检查正在读取的内容时出现的问题,实际上那里有抽象层在进行交互。
程序请求文件->检查其位置->请求操作系统获取文件->操作系统请求驱动程序去那里获取请求的字节,然后应用程序获取指向要使用的数据的指针。
显然,我尽可能简化了这个过程。但本质上,每次在机器上执行某项操作时,它都会经过许多抽象层,并且应用程序请求的数据可能位于或不位于这些偏移量上。我们在使用 fuse 并拦截卷上的 Read - Write 调用时看到了这一点。它们不是连续的,但要进一步解释,我必须过于技术化,我认为这不是你要问的。
希望这个答案对您有所帮助,尽管您提问已经一年了。