如何以编程方式检查当前进程在Windows上是否具有长路径感知功能?

时间:2016-12-04 20:30:24

标签: windows winapi

在Windows 10版本1607中,进程现在可以使用清单属性(https://msdn.microsoft.com/en-us/library/windows/desktop/aa365247.aspx#maxpath)选择加入长路径感知

如何以编程方式检查调用进程是否具有长路径感知功能?请注意,仅检查操作系统版本或注册表项的值是不够的,因为Windows版本为> = 1607,系统范围内禁用长路径,并且长路径不显示该过程。

1 个答案:

答案 0 :(得分:0)

尽管文档说可以为Win32和UWP应用程序启用长路径名,但对于UWP却不行。 dev: 0 ino: 0 uid: 0 gid: 0 使用API KernelBase!BasepIsProcessLongPathAwareByManifest从清单中获取值,并且该API无法用于UWP。

可以通过在PEB中手动设置适当的位来解决该问题:

SxS API

TEB的定义可以从winternl.h复制,IsLongPathAwareProcess位是第4个字节的最高有效位,即可以重写为

NtCurrentTeb()->ProcessEnvironmentBlock->IsLongPathAwareProcess = 1;