SDelete
发布时间:2026-08-19 | 浏览:1
访问此页面需要授权。 可以尝试 登录 或 更改目录 。
访问此页面需要授权。 可以尝试 更改目录 。
作者:Mark Russinovich
发布时间: 2026 年 3 月 5 日
下载下载 SDelete(328 KB)
Windows NT/2000 (Win2K) C2 合规性的一个功能是实现对象重用保护。 这意味着,当应用程序分配文件空间或虚拟内存时,它无法查看以前存储在 Windows NT/2K 为其分配的资源中的数据。 Windows NT 在向应用程序提供任何类型的资源之前,都会先将内存清零,并将磁盘上放置文件的扇区清零。 但是,对象重用并不要求将文件在删除之前占用的空间清零。 这是因为 Windows NT/2K 的设计假设操作系统控制对系统资源的访问。 但是,当操作系统不处于活动状态时,可以使用原始磁盘编辑器和恢复工具来查看和恢复操作系统已解除分配的数据。 即使使用 Win2K 的加密文件系统 (EFS) 加密文件,在创建文件的新加密版本后,文件的原始未加密文件数据也会保留在磁盘上。
确保已删除的文件以及使用 EFS 加密的文件不被恢复的唯一方法是使用安全的删除应用程序。 安全删除应用程序使用证明可以使磁盘数据不可恢复的技术覆盖已删除文件的磁盘数据,甚至在使用能够读取磁性介质上暴露弱删除文件模式的恢复技术时也是如此。 SDelete(安全删除)就是这样的应用程序。 可以使用 SDelete 来安全地删除现有文件,也可以安全地擦除磁盘未分配部分中存在的任何文件数据(包括已删除或加密的文件)。 SDelete 实施国防部的清除和清理标准 DOD 5220.22-M,让你确信使用 SDelete 删除后,文件数据将永久消失。 请注意,SDelete 可安全地删除文件数据,但不会删除位于可用磁盘空间中的文件名。
SDelete 是一个命令行实用工具,它包含许多选项。 在任何给定的使用中,它都允许删除一个或多个文件和/或目录,或者清理逻辑磁盘上的可用空间。 SDelete 接受通配符作为目录或文件说明符的一部分。
为了进行清理,磁盘不得带有任何卷。
对于驱动器号,请包括 ,例如 。
安全删除没有特殊属性的文件相对简单:安全删除程序只是使用安全删除模式覆盖文件。 更棘手的是安全地删除 Windows NT/2K 压缩、加密和稀疏文件,并安全地清理磁盘可用空间。
NTFS 以 16 个集群块为单位管理压缩、加密和稀疏文件。 如果程序写入此类文件的现有部分,则 NTFS 在磁盘上分配新空间来存储新数据,并在写入新数据后解除分配文件以前占用的群集。 NTFS 采取这种保守的方法的原因如下:与数据完整性相关,在压缩和稀疏文件的情况下,新分配大于现有分配(新的压缩数据大于旧的压缩数据)。 因此,企图覆盖此类文件也无法成功移除磁盘上的文件内容。
若要处理这些类型的文件,SDelete 依赖于碎片整理 API。 使用碎片整理 API,SDelete 可以准确确定磁盘上的哪些群集被属于压缩、稀疏和加密文件的数据占用。 SDelete 知道哪些群集包含文件的数据后,它可以打开磁盘进行原始访问并覆盖这些群集。
清理可用空间带来了另一个挑战。 由于 FAT 和 NTFS 不提供应用程序直接寻址可用空间的方法,因此 SDelete 有两个选项之一。 第一个是,它可以像处理压缩、稀疏和加密文件一样,以原始访问的方式打开磁盘,并覆盖空闲空间。 此方法存在一个大问题:即使 SDelete 被编码为完全能够计算 NTFS 和 FAT 驱动器的可用空间部分(这不是小事),它也会存在与系统上发生的活动文件操作发生冲突的风险。 例如,假设 SDelete 确定群集是空闲的,而此时文件系统驱动程序(FAT、NTFS)决定为另一个应用程序正在修改的文件分配群集。 文件系统驱动程序将新数据写入群集,然后 SDelete 出现并覆盖新写入的数据:文件的新数据不见了。 如果为文件系统元数据分配群集,则问题更严重,因为 SDelete 会损坏文件系统的磁盘结构。
第二种方法(也是 SDelete 采用的方法)是间接覆盖可用空间。 首先,SDelete 会分配其能够处理的最大的文件。 SDelete 使用非缓存文件 I/O 执行此操作,以防止 NT 文件系统缓存的内容被丢弃,并被与 SDelete 的占用空间文件相关的无用数据所替换。 由于非缓存文件 I/O 必须与扇区(512 字节)对齐,即使 SDelete 无法再扩展文件,也可能未能为 SDelete 文件分配一些剩余空间。 为了获取任何剩余空间,SDelete 接下来会分配其所能分配的最大缓存文件。 对于这两个文件,SDelete 执行安全覆盖,确保以前可用的所有磁盘空间都已安全清理。
在 NTFS 驱动器上,SDelete 的作业在分配并覆盖这两个文件后不一定会完成。 SDelete 还必须使用适合 MFT 记录的文件填满 NTFS MFT(主文件表)中的任何现有可用部分。 MFT 记录的大小通常为 1KB,磁盘上的每个文件或目录至少需要一条 MFT 记录。 小文件完全存储在其 MFT 记录之内,而不适合记录的文件则在 MFT 之外分配到群集。 所有 SDelete 需要做的就是分配尽可能大的文件——当文件在 MFT 记录中占用了 NTFS 的所有可用空间时,NTFS 会阻止文件增长,因为磁盘上没有剩余可用的群集(它们正被之前分配的两个文件 SDelete 占据)。 然后,SDelete 将重复该过程。 当 SDelete 甚至无法再创建新文件时,它知道主文件表(MFT)中以前可用的所有记录都已完全填充有安全覆盖的文件。
若要覆盖您删除的文件的文件名,SDelete 会重命名该文件 26 次,每次将文件名的每个字符替换为连续的字母字符。 例如,对文件名“foo.txt”的第一次重命名是“AAA.AAA”。
清理磁盘可用空间时 SDelete 不安全地删除文件名的原因是删除文件名需要直接操作目录结构。 目录结构可以具有包含已删除文件名的可用空间,但可用目录空间不能分配给其他文件。 因此,SDelete 无法分配此可用空间,以便可以安全地覆盖它。
下载下载 SDelete(328 KB)
客户端:Windows 10及更高版本。
服务器:Windows Server 2012及更高版本。
Nano Server:2016 及更高版本。
Last updated on 2026-03-05