5

我想知道,Windows 内核允许的最长名称长度是多少?

例如:我知道内核使用UNICODE_STRING结构来保存所有对象路径,并且由于宽字符串的字节长度存储在 aUSHORT中,因此允许最大路径长度为 2^15 - 1 个字符。文件名(而不是路径)是否有类似的限制?(我不在乎 NTFS 或 FAT32 是否施加了特定限制;我正在寻找内核中理论上允许的最长的名称,假设没有额外的文件系统或 shell 限制。)

(编辑:对于那些想知道为什么这很重要的人,请考虑一下,通常情况下,遍历目录是通过FindFirstFile/FindNextFile调用实现的,每个文件调用一次。给定名为 的函数NtQueryDirectoryFile,它是底层系统调用,每次调用返回多个文件名,它是实际上可以利用路径上的最大长度限制来制作一个非常快的目录遍历器,它只使用堆栈作为缓冲区。现在我正在尝试扩展这个概念,我需要知道的最大大小一个文件名。)

4

2 回答 2

5

路径的最大长度为 32,767 个字符,其中每个路径组件(目录或文件)的最大长度为 255 个字符(更准确地说,是 GetVolumeInformation 函数的 lpMaximumComponentLength 参数中返回的值)。

记录在 MSDN 上

于 2011-01-07T10:03:48.907 回答
2

啊,我自己找到了这个页面保证文件名不能超过 255 个字符:

  • 路径名的长度不得超过 32,760 个字符。
    ...
  • 每个路径名组件的长度不得超过 255 个字符。

这让我想知道:

为什么 Windows使用ULONGs 作为文件长度,而它使用USHORTs 作为路径长度?!

如果有人知道这是为什么,请发表/评论!我比较好奇。:)

于 2011-08-25T15:08:38.553 回答