WinAPI 和 NTFS:读取更长的路径

WinAPI and NTFS : reading longer paths

NTFS 允许在完全限定路径中最多包含 32k 个字符。出于兼容性原因,WinAPI 只允许完整路径最多 248 个字符减去文件名,总共 255 个字符。有什么方法可以使用 DeviceIOControl() 绕过此限制并读取任何可能更长的路径字符串吗?如果可能的话,有什么方法可以获取完整路径名超过 255 个字符的文件的句柄?

如果您使用 \?\ path prefix.

,至少从 Windows 2000 年起,kernel32 中基于 file/path 的函数的大多数宽版本都支持更长的路径

例如,如果您在 MSDN 上查看 CreateFile,它会显示:

In the ANSI version of this function, the name is limited to MAX_PATH characters. To extend this limit to 32,767 wide characters, call the Unicode version of the function and prepend "\?\" to the path.

Windows 10,版本 1607(周年更新)及更高版本允许您访问没有前缀的更长路径,如果您将 longPathAware 标记添加到您的清单或更改机器组策略。

部分shell、CreateProcessLoadLibrary不支持>MAX_PATH不管你做什么。