C++ 如何用0x00覆盖所有可用磁盘空间?

C++ 如何用0x00覆盖所有可用磁盘空间?,c++,c,windows,C++,C,Windows,如何用零覆盖所有可用磁盘空间,如Windows中的密码命令;例如: 密码/wc:\ 这将在三次过程中覆盖可用磁盘空间。如何在C或C++中实现这一点?(我希望一次完成并尽快完成。)您可以创建一个set a文件并向其写入随机字节,直到可用磁盘空间被填满。在退出程序之前,应删除这些文件 必须在要清理的设备上创建文件 由于文件大小的限制,某些文件系统可能需要多个文件 必须在这些文件中使用不同的非重复随机序列,以避免文件系统压缩和重复数据消除策略,这些策略可能会减少实际写入的磁盘空间量 还请注意,操作系

如何用零覆盖所有可用磁盘空间,如Windows中的密码命令;例如:

密码/wc:\

这将在三次过程中覆盖可用磁盘空间。如何在C或C++中实现这一点?(我希望一次完成并尽快完成。)

您可以创建一个set a文件并向其写入随机字节,直到可用磁盘空间被填满。在退出程序之前,应删除这些文件

必须在要清理的设备上创建文件

由于文件大小的限制,某些文件系统可能需要多个文件

必须在这些文件中使用不同的非重复随机序列,以避免文件系统压缩和重复数据消除策略,这些策略可能会减少实际写入的磁盘空间量

还请注意,操作系统可能具有配额系统,这将阻止您填充可用磁盘空间,并且当其他进程的磁盘空间用完时,也可能显示不稳定的行为

删除这些文件可能会导致操作系统跳过缓存刷新机制,从而导致某些块无法写入磁盘。可能需要
sync()
系统调用或等效调用。在硬件级别进一步同步可能会延迟,因此在删除文件之前可能需要等待一段时间

使用不同的随机种子重复此过程可以通过使用高级法医工具进行表面分析来提高硬件恢复的几率。这些工具并非十全十美,尤其是当恢复对丢失的比特币钱包所有者来说是一个救命稻草时,但在其他问题更大的情况下可能证明是有效的

使用随机字节有双重目的:

  • 防止某些文件系统优化块并压缩或共享它们,而不是写入介质,从而覆盖现有数据
  • 使用高级硬件恢复工具来恢复以前写入的数据会增加难度,就像这些安全信封一样,信封内部打印有随机图案,只需在强光下扫描信封即可防止暴露信件内容

只需创建一个文件并将
0
写入其中,直到fails@AlanBirtles:这不适用于优化动态压缩文件内容的文件系统。非常感谢您的回答。是否需要使用随机字节?如果我只是用零覆盖数据,那么数据仍然可以恢复,或者它们几乎消失了?@sofia:我在回答中添加了一些关于这一点的解释。@sofia“数据仍然可以恢复”如果这是真正的目的,那么你应该在问题中明确这一点。简单地覆盖可用空间不会使以前的所有数据都无法恢复。例如,在NTFS卷上,小文件直接存储在MFT中。删除这样的文件只会将条目标记为已删除,但不会清除以前的内容,而且由于该内容仍然属于MFT所有,因此也不计入“可用空间”项下。@dxiv非常感谢您提供的详细信息,对此表示歉意,但大多数文件都无法恢复,这对我来说已经足够了