Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何以编程方式访问windows符号链接的目标路径?_Windows_Visual Studio 2008_Symlink - Fatal编程技术网

如何以编程方式访问windows符号链接的目标路径?

如何以编程方式访问windows符号链接的目标路径?,windows,visual-studio-2008,symlink,Windows,Visual Studio 2008,Symlink,Windows 6(Vista和Server 2008)支持正确的符号链接,可以通过该功能创建符号链接。但似乎没有相应的函数用于查询符号链接以获取链接目标的路径 我发现符号链接是重分析点的实现,因此重分析点函数可用于获取目标路径。但我需要使用重分析点的头文件似乎是随附的。使用VS2008设置此工具包似乎是一项非常重要的任务 在获取链接目标时,我是否错过了一个简单的函数,或者我是否真的需要设置一个windows驱动程序开发环境来编写代码来访问这些信息 编辑:Adam Mitz提出了GetFinal

Windows 6(Vista和Server 2008)支持正确的符号链接,可以通过该功能创建符号链接。但似乎没有相应的函数用于查询符号链接以获取链接目标的路径

我发现符号链接是重分析点的实现,因此重分析点函数可用于获取目标路径。但我需要使用重分析点的头文件似乎是随附的。使用VS2008设置此工具包似乎是一项非常重要的任务

在获取链接目标时,我是否错过了一个简单的函数,或者我是否真的需要设置一个windows驱动程序开发环境来编写代码来访问这些信息

编辑:Adam Mitz提出了GetFinalPathNameByHandle的建议。此函数对于本地符号链接非常有效,但对于解析远程链接(通过UNC路径)似乎不起作用

编辑2:应Adam的要求,以下是我尝试的更多细节:

我最初沿着
FSCTL\u GET\u repasse\u点
/
DeviceIoControl
路径,但这会产生一个
repasse\u DATA\u BUFFER
结构。定义此结构的标题似乎仅存在于Windows驱动程序工具包中

当链接存在于本地磁盘上时(
C:\…\link
etc),GetFinalPathNameByHandle()可以正常工作。奇怪的是,我发现我可以使用
CreateFileW()
获得链接的句柄,从而获得目标,无论是否指定了
FILE\u FLAG\u OPEN\u repasse\u POINT
标志,无论目标文件是否存在

当使用
CreateFileW()
GetFinalPathNameByHandle()
来查询远程链接时(
\\?\UNC\..
),事情开始变得复杂起来。如果指定了
FILE\u FLAG\u OPEN\u repasse\u POINT
GetFinalPathNameByHandle()
始终返回链接路径,而不是目标路径。如果未指定
FILE\u FLAG\u OPEN\u repasse\u POINT
,则返回目标路径,但前提是目标存在且与链接位于同一台机器上。如果链接指向另一台机器,则会出现网络权限错误。如果链接指向一个本地-不存在-文件,我会得到一个“找不到文件”错误。

最终路径是 当路径完全打开时返回 断然的。例如,对于一个符号 名为“C:\tmp\mydir”的链接指向 到最后一个文件系统“D:\yourdir” 路径应该是“D:\yourdir”


@不幸的是,虽然GetFinalPathNameByHandle()适用于本地符号链接,但它返回的是链接,而不是基于UNC的远程符号链接的目标。所以我已经“重新打开”了这个问题。我想我已经回答了这个问题(和你的JNI/模拟问题一样,顺便说一句……嗯哼)。也许这是一个新问题。如果只想使用本地链接,GetFinalPathNameByHandle基本上就是答案。就远程链接而言,函数中似乎有一个bug。因此,我再次将此标记为正确答案,并记录了警告。请澄清符号链接本身是否位于远程服务器(通过UNC)上,或者是否是符号链接目标是UNC路径。此外,我认为您不需要DDK来读取重分析点(无所谓“解析点”)。请参阅CreateFile上的FILE_FLAG_OPEN_Repasse_POINT FLAG或DeviceIoControl的FSCTL_GET_Repasse_POINT FLAG。这些是否有用取决于你对我之前评论的回答。Explorer不知怎么做到了,我怀疑它是直接发送IO_CTL的。试试看:创建一个目录符号链接,你会得到一个带有灰色目标的“快捷方式”选项卡。