如何解码$Recycle.Bin 中的文件名

如何解码$Recycle.Bin 中的文件名

当我列出文件$Recycle.Bin夹中的文件时,已删除的文件的文件名如下:

C:\$Recycle.Bin\S-1-5-21-3704213190-1981809790-211521205-1000\.���000200000008af358fa920f8faa779cf

Windows 如何将这些映射到原始文件的名称和路径?

我用 Google 搜索了这个问题,但没有找到答案,不知道该搜索什么。

答案1

这些文件(.���....����...)实际上并不是在回收站的正常运行期间由 Windows 放置在那里的(回收站会产生 HelpingHand 的答案中提到的 $I 和 $R 文件)。

当文件无法删除时(例如,因为它正在使用中,但可以在 POSIX 语义下删除),它们分别由 Cygwin 和 MSYS2 放置在那里。

无效字符包括cygmsys转置到 Unicode 低代理区域,生成无效的 UTF-16 文件名, 因为某些原因。

可能是无效的 UTF-16 向用户隐藏了它们,但大多数情况下它只会破坏工具,因为许多跨平台工具和语言在交互无效的 UTF-16 文件名时存在问题,因为他们希望能够使用 UTF-8 在内部管理文件名。

从在 Windows 10 1809 或更高版本上运行的 Cygwin 3 开始,我了解到您唯一会看到这种行为的时候是当 msys/cygwin 可执行文件试图删除正在运行的可执行文件(例如它自己)时;除了这种情况之外,Windows 现在实现了足够的 POSIX 语义来删除(例如,打开的文档),正如 Cygwin 所期望的那样。

据推测,Cygwin/MSYS2 依赖于 Windows 在清空回收站时从回收站中删除所有文件,因为它们似乎没有任何东西可以自动清理文件本身,并且文件名与您使用 Windows API 删除内容时 Windows 使用的文件名不匹配。

因此,回答您的问题,Windows 无法将它们映射回原始路径,因为它没有将它们放在那里。文件名仅包含原始路径的 inode 编号和哈希值,因此也没有保留足够的信息来手动进行映射。

答案2

在下面的工作示例中,我删除了以下文件:

  • 压缩包目录:\zippy.zip
  • 测试程序

查看此用户的回收站目录,dir发现以下内容:

dir 和 type 命令

因此,对于每个已删除的文件,都会创建一个具有非常相似名称的文件,该文件引用已删除文件的原始位置,该文​​件必须在恢复操作期间使用。

在这种情况下,zippy.zip 是 $RDKXBG8.zip 文件,而 C:\test.exe 是 $RQLYPAP.exe。

注意:如果仅删除引用路径的文件对,则该文件将从回收站的资源管理器视图中消失,而“实际”文件仍保留。

相关内容