我正在尝试使用与 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 重新分析点中以及为什么。