NTFS文件系统中$FILE_NAME属性的结构

Bes*_*ame 1 windows ntfs

我正在阅读有关 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个字节来存储呢?任何人都可以帮我清除这个吗?谢谢。

Chr*_*n.K 5

它描述了文件名的“特征”,即长度、允许的字符等。它本身不是一个“字符串”(如 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 文件名相同,因此已保存在该单个文件名记录中。

因此该字段可以是一个字节,因为它只包含一个标识正在使用的相应命名空间的数字。