微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Windows 回收站信息文件二进制格式

如何解决Windows 回收站信息文件二进制格式

在 Windows 中以编程方式将文件删除到回收站是一项微不足道的操作。

简而言之:只需将文件移动到 C:\$Recycle.Bin\SID\$R{name}* (对于驱动器 C) 并创建一个关联的二进制文件 ($I{name}),其中包含有关“已删除文件/文件夹附近的元信息。

* 其中 SID 是您的操作系统安装标识符,类似于:S-1-5-21-1234567890-1234567890-1234567890-1001


但经过研究,我有两个问题:


信息文件结构如下(根据我的研究):

const buffer = new Uint8Array([
    0x02,0x00,// Header
    0xff,0xff,// Size                // 65535 (bytes)
    0x00,0x30,0xd7,0x01,// Deletion date (64-bit value)
    0x0b,// Path string length  // `11`
                            0x43,0x3a,// File path + \0      // `C:\1\1.txt`  // `C:\\1\\1.txt\0`
    0x5c,0x31,0x5c,0x2e,0x74,0x78,0x00
]);

标题(始终相同)、以字节为单位的文件大小(仅在文件资源管理器中可见)、64 位删除日期值、路径字符串长度和 UTF-16 编码空值终止的路径字符串。

唯一有问题的部分是日期。 它是如何编码的?

例如:

00 00 00 00 00 29 d7 01 是 2021.04.04 03:10

00 00 00 00 01 29 d7 01 是 2021.04.04 03:17

00 00 00 00 00 30 d7 01 是 2021.04.13 00:57

(前四个十六进制是 00 只是为了方便。)

例如:00 00 00 00 00 29 d7 01132619794007457792,但 new Date(132619794007457792/100000)2012.01.10 12:19:00

我需要将 00 00 00 00 00 29 d7 01 字节转换为 2021.04.04 03:10


C:\$Recycle.Bin\SID\ 中“已删除”的文件名称$R + [A-Z0-9]{7} + 可选的 .{extension} 开头。 例如:$RL6JQMF.txt。 以及相关的元数据文件$IL6JQMF.txt$I 开头。

命名是否有某种逻辑或只是随机生成的?

事实上,例如,它适用于 $R___ + $I___$R123456789 abc + $I123456789 abc。所以,我认为它只是随机生成的。

仅需要 $R/$I。该扩展程序仅用于在文件资源管理器中显示相应的图标。

解决方法

好的,我知道了。

虽然 00 00 00 00 00 00 00 001899.12.30 00:00

但是 00 00 00 00 00 00 01 001601.11.22 18:44

所以这个时间戳是自 1601.01.01 以来的 100 纳秒间隔数。

例如,对于 00 00 00 00 00 29 d7 01 (132619794007457792),我得到正确的日期 (2021.04.04 03:10),如文件资源管理器中所示:

new Date(132619794007457792 / 10000 + Number(new Date("1601.01.01 Z")))

无论如何,我认为这个话题对人们有用。

奇怪的是,在 2021 年我没有找到任何关于 Windows 中回收站如何工作的信息。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。