windows - 使用 Windows API 写入和读取可用磁盘空间

标签 windows winapi filesystems disk diskspace

是否可以使用 Windows API 写入磁盘上的空闲集群或从中读取数据?我找到碎片整理 API:https://learn.microsoft.com/en-gb/windows/desktop/FileIO/defragmenting-files

FSCTL_GET_VOLUME_BITMAP 可用于获取每个簇的分配状态,FSCTL_MOVE_FILE 可用于移动簇。但是我找不到从空闲集群读取数据或向其写入数据的方法。

更新:想到的解决方法之一是创建一个新的小文件,向其中写入一些数据,然后将其重新定位到所需位置并删除文件(数据将保留在已释放簇)。但这仍然没有解决阅读问题。

我正在尝试做的是某种透明缓存,因此用户仍然可以像往常一样使用他的 NTFS 分区,并且仍然将这些集群视为可用空间,但我可以在其中存储一些数据。数据安全不是问题,它可以被用户操作覆盖,并且只会在集群再次空闲时重新生成/重新下载。

最佳答案

这种方式没有简单的解决方案。

首先,您应该创建自己的驱动器分区。它可以防止从操作系统或任何进程意外访问您的数据。然后使用分区名称调用 CreateFileA()。您将获得对数据的原始访问权限。请记住,对于操作系统访问的任何分区,该功能都会失败。

您也可以使用物理驱动器执行相同的技巧。

docs

关于windows - 使用 Windows API 写入和读取可用磁盘空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56452932/

相关文章:

c++ - 如何检查连接是否丢失

c++ - 如何告诉 g++ 编译器在哪里搜索包含文件?

c++ - 如何使用 boost::filesystem "normalize"路径名?

c++ - 如何获得_bstr_t的长度

mysql - 请求日期时间元素时出现 NoMethodError

windows - windbg 首先连接然后在内核调试期间停留在 "Debuggee not connected."消息上

php - 尝试为 Windows 编译 phpredis

c - WinAPI 管理画笔

c++ - 可能的堆损坏(win 32, native c++)

java - 将文件从文件系统拖放到 IE9 的 Java Web 应用程序