WinAPI 和 NTFS:读取更长的路径

问题描述 投票:0回答:1

NTFS 在完全限定路径中允许最多 32k 个字符。出于兼容性原因,WinAPI 仅允许完整路径减去文件名最多 248 个字符,总共 255 个字符。有没有办法使用

DeviceIOControl()
来绕过此限制并读取任何可能更长的路径字符串?如果可能的话,有什么办法可以获取完整路径名超过 255 个字符的文件的句柄吗?

winapi ntfs
1个回答
5
投票

如果您使用

\\?\
路径前缀,则至少从 Windows 2000 开始,kernel32 中基于文件/路径的函数的大多数宽版本都支持更长的路径。

例如,如果您查看 MSDN 上的

CreateFile
,它会显示:

在此函数的 ANSI 版本中,名称限制为 MAX_PATH 个字符。要将此限制扩展到 32,767 个宽字符,请调用该函数的 Unicode 版本并在路径前面添加“\?\”。

Windows 10 版本 1607(周年更新)及更高版本允许您访问更长的路径,无需前缀,前提是您

<ws2:longPathAware>true</ws2:longPathAware>
添加到清单中 AND 更改计算机组策略/将注册表项
HKLM\SYSTEM\CurrentControlSet\Control\FileSystem\LongPathsEnabled
设置为 1 (
 REG_DWORD
型)
.

无论您做什么,部分 shell、

CreateProcess
LoadLibrary
都不支持 > MAX_PATH。

© www.soinside.com 2019 - 2024. All rights reserved.