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、CreateProcess
和LoadLibrary
不支持>MAX_PATH不管你做什么。
NTFS 允许在完全限定路径中最多包含 32k 个字符。出于兼容性原因,WinAPI 只允许完整路径最多 248 个字符减去文件名,总共 255 个字符。有什么方法可以使用 DeviceIOControl()
绕过此限制并读取任何可能更长的路径字符串吗?如果可能的话,有什么方法可以获取完整路径名超过 255 个字符的文件的句柄?
如果您使用 \?\
path prefix.
例如,如果您在 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、CreateProcess
和LoadLibrary
不支持>MAX_PATH不管你做什么。