iny*_*445 26 ntfs files-folders
我在观看FlyTech 的视频时,当他制作了一对非法文件夹(一个名为“<”,另一个名为“">”)时,Windows 认为包含它们的文件夹已损坏。对于任何其他包含非法字符的文件夹,似乎没有发生此行为。
我想知道为什么这个特定组合会让 Windows 认为包含的文件夹已损坏。我搜索了一下,但找不到原因。有人能解释一下吗?
use*_*686 46
该错误并不是由尖括号引起的,或者是由其中两个 \xe2\x80\x93 引起的,而是在以下情况下发生:1) 文件名在其名称中包含通配符,并且 2) 通配符与之前看到的通配符相匹配file,这会导致 Windows 认为文件夹搜索没有像应有的那样向前推进。
\n首先,据我了解,在 Windows 上列出目录是通过通配符扩展来完成的(与 Linux 上的方式相反)。要扩展通配符模式,首先使用初始模式调用 FindFirstFile(),然后在 NTFS 逐一查找匹配文件时重复 FindNextFile()。要列出整个目录,请执行与*模式相同的操作。
其次,在 Windows 文件处理代码 \xe2\x80\x93 的深层部分中,<和>(以及)实际上都被视为通配符,它们的行为类似于历史上MS-DOS 通配符变体和。(例如,又名 DOS_STAR 匹配文件扩展名之前的所有字符。)公开可用的.NET 源代码包含该算法的描述,该描述与泄露的 Windows NT 内核源代码中的描述相同。"*?>
因此,不仅仅是尖括号,而且只要它们与将在通配符之前" ? *排序的另一个文件名结合使用,也可以用来触发此错误 \xe2\x80\x93,如果排序是按 Unicode 值(这是 NTFS 强制执行的顺序)完成的。
例如,如果您有名为foo(和 的项目,您还会收到“文件夹已损坏”错误foo*。这里没有什么特别的(,除了它*在 Unicode \xe2\x80\x93 中排在前面,而排序在后面的字符*(例如)foo+不会触发错误。(如果您想查看这些字符的 Unicode 位置,可以通过 charmap.exe 打开“字符映射表”。)
foo<同样,包含 [ , foo=] 或 [ foo?, ]的目录fooo不会触发这种情况,但包含 [ foo=, foo>] 或 [ foo+, foo?] 的目录会触发这种情况。
因此,如果我正确理解一切,似乎会发生以下情况:
\nfoo(, foo*],NTFS 强制执行此确切顺序。*。foo(.foo(”。foo((完全匹配)并返回下一项foo*。foo*”。foo*\xe2\x80\x93 被识别为通配符并foo(首先匹配,因此下一项foo*又是 \xe2\x80\x93,因此会引发错误。与通配符>的处理方式类似*,名为“ ”的文件夹通过匹配其前面的前一个“ ”项目>会导致相同的问题。<
| 归档时间: |
|
| 查看次数: |
4762 次 |
| 最近记录: |