在 Windows 中,程序如何绕过操作系统缓存?

在 Windows 中,程序如何绕过操作系统缓存?

有些程序有选项可以避免在访问文件时使用操作系统缓存(例如 Virtualbox 和 qbittorrent)。它们不需要管理员权限,因此它们肯定不会禁用文件系统缓存。

程序如何能够直接使用磁盘进行读写并绕过操作系统缓存,仅供其自身使用?

答案1

这是 Windows 文件打开 API 函数的一个选项 创建文件

该选项的定义FILE_FLAG_WRITE_THROUGH如下:

写入操作不会经过任何中间缓存,而是直接进入磁盘。

更多信息请参阅:

最新链接还说:

CreateFile() 的 FILE_FLAG_WRITE_THROUGH 标志使对该句柄进行的任何写入都直接写入文件而不进行缓冲。
[...]
FILE_FLAG_NO_BUFFERING 将这一概念更进一步,并消除了所有预读文件缓冲和磁盘缓存,因此可以保证所有读取都来自文件,而不是来自任何系统缓冲区或磁盘缓存。使用 FILE_FLAG_NO_BUFFERING 时,磁盘读取和写入必须在扇区边界上进行,并且缓冲区地址必须与内存中的磁盘扇区边界对齐。

我发现没有多少产品使用 FILE_FLAG_NO_BUFFERING 标志,这并不奇怪。

答案2

使用以下方式打开文件FILE_FLAG_NO_BUFFERING

CreateFile参阅微软

相关内容