如何在Windows C++程序中找到符号链接的目标

use*_*595 2 c++ winapi

我正在使用Visual Studio C++ 2008和2010开发一个应用程序.我有一个简单的需求:我想找出符号链接(.lnk或快捷方式)文件的目标.我已经梳理了网络以找到答案并且没有任何运气.

我可以看到MSDN有两个功能来创建符号链接

BOOLEAN WINAPI CreateSymbolicLink( LPTSTR lpSymlinkFileName中, LPTSTR中lpTargetFileName, DWORD dwFlags中);

BOOLEAN WINAPI CreateSymbolicLinkTransacted( LPTSTR lpSymlinkFileName中, LPTSTR lpTargetFileName中, DWORD dwFlags中, HANDLE hTransaction中);

但我没有看到任何让你检索目标路径的东西.这对我来说似乎很奇怪,因为它是符号链接文件的基本属性.这些信息不会保存在文件头信息中吗?

MSDN网站上推荐的一个建议就是这个

h = CreateFile (
        path,
        FILE_READ_ATTRIBUTES,
        FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE,
        0,
        OPEN_EXISTING,
        FILE_FLAG_BACKUP_SEMANTICS | FILE_ATTRIBUTE_REPARSE_POINT | FILE_FLAG_OPEN_REPARSE_POINT,
        0);

DeviceIoControl (
        h,
        FSCTL_GET_REPARSE_POINT,  
        NULL,
        0,
        buffer,
        bufferSize,
        &returnedDataSize,
        NULL);
Run Code Online (Sandbox Code Playgroud)

但它看起来并不像DeviceIoControl对符号链接有意义,因为它是一个设备控制功能.无论如何我尝试了它并没有用,那就是缓冲区没有改变.

有没有人有这方面的经验?任何帮助将不胜感激.

松鸦

Rem*_*eau 6

.lnk文件不是符号链接.符号链接是文件系统本身的一个特性.这就是您可以DeviceIoControl()用来查询它们的原因..lnk文件只是一个文件.您可以使用该IShellLink界面查询和操作.lnk文件.