我正在尝试使用与 Windows XP 及以上兼容的 Windows API 函数来查找联结或符号链接的目标。我CreateFile
用来获取重解析点的句柄,然后DeviceIoControl
使用FSCTL_GET_REPARSE_POINT
标志将重解析数据读入REPARSE_DATA_BUFFER
. 然后,我使用缓冲区中的偏移量和长度来提取SubstituteName
和PrintName
字符串。
在 Windows 8 中,完美地提取PrintName
作品,给我一个正常的路径(即c:\filename.ext
),但在 XP 中,该PrintName
部分的REPARSE_DATA_BUFFER
长度似乎总是为 0,给我留下一个空字符串。
使用SubsituteName
似乎在两者中都有效,但我总是\??\
在文件路径的开头加上前缀(即\??\c:\filename.ext
)。(作为旁注,也fsutil reparsepoint query
显示\??\
前缀)。
我已经阅读了 MSDN 上的大部分文档,但我找不到这个前缀的任何解释。如果保证前缀从每个 开始SubstituteName
,那么当我从缓冲区复制文件路径时,我可以排除前四个字符,但我不确定是否是这种情况。我很想知道"\??\"
前缀是否出现在SubstituteName
所有 Microsoft 重新分析点中以及为什么。