How does Java circumvent the windows MAX_PATH WinAPI limitation

心已入冬 提交于 2019-12-01 19:59:04

From the JVM's canonicalize_md.c:

/* copy \\?\ or \\?\UNC\ to the front of path*/
WCHAR* getPrefixed(const WCHAR* path, int pathlen) {
    [download JVM source code (below) to see implementation]
}

The function getPrefixed is called:

  • by the function wcanonicalize if ((pathlen = wcslen(path)) > MAX_PATH - 1)
  • by the function wcanonicalizeWithPrefix.

I didn't trace the call chain farther than that, but I assume the JVM always uses these canonicalization routines before accessing the filesystem, and so always hits this code one way or another. If you want to trace the call chain farther yourself, you too can partake in the joys of browsing the JVM source code! Download at: http://download.java.net/openjdk/jdk6/

Windows bypasses that limitation if the path is prefixed with \\?\.

Most likely Java is in fact using UNC paths (\?) internally.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!