我正在阅读有关 NTFS 属性类型的内容,它涉及 $FILE_NAME 属性结构。这里是:
Offset Size Description
~ ~ Standard Attribute Header
0x00 8 File reference to the parent directory.
0x08 8 C Time - File Creation
0x10 8 A Time - File Altered
0x18 8 M Time - MFT Changed
0x20 8 R Time - File Read
0x28 8 Allocated size of the file
0x30 8 Real size of the file
0x38 4 Flags, e.g. Directory, compressed, hidden
0x3c 4 Used by EAs and Reparse
0x40 1 Filename length in characters (L)
0x41 1 Filename namespace
0x42 2L File name in Unicode (not null terminated)
Run Code Online (Sandbox Code Playgroud)
偏移量 0x41 处的“文件名命名空间”是什么?我认为我对命名空间了解一些。怎么能用1个字节来存储呢?任何人都可以帮我清除这个吗?谢谢。
它描述了文件名的“特征”,即长度、允许的字符等。它本身不是一个“字符串”(如 C++/C#/等命名空间)。
我在这里找到了一份文件,坦白说我不知道它的有效性。
但无论如何,它这样描述了命名空间(这使得它非常明显,请参阅第 13.2 章):
0:POSIX
这是最大的命名空间。它区分大小写,并允许除 NULL (0) 和正斜杠“/”之外的所有 Unicode 字符。名称的最大长度为 255 个字符。注意:有些字符,例如冒号“:”,在 NTFS 中是有效的,但 Windows 不允许您使用它们。
1:Win32
Win32 是 POSIX 命名空间的子集,不区分大小写。它使用所有 Unicode 字符,除了: '"' '*' '/' ':' '<' '>' '?' '\' '|' 注意名称不能以点“.”或空格“”结尾。
2:DOS
DOS 是 Win32 命名空间的子集,仅允许 8 位大写字符,大于空格 '',并且不包括:'"' '*' '+' ', ' '/' ':' ';' '<' '=' '>' '?' 注意:名称必须符合以下模式:1 到 8 个字符,然后是“.”,然后是 1 到 3 个字符。
3:Win32 和 DOS
此命名空间意味着 Win32 和 DOS 文件名相同,因此已保存在该单个文件名记录中。
因此该字段可以是一个字节,因为它只包含一个标识正在使用的相应命名空间的数字。
| 归档时间: |
|
| 查看次数: |
1696 次 |
| 最近记录: |