如何检索已安装路径的原始位置?

时间:2008-12-30 12:58:19

标签: c++ winapi mount subst

在C ++中,如何检索已安装驱动器的位置? 例如,如果我已将驱动器s:安装到c:\ temp(在命令行中使用subst) “subst c:\ temp s:” 如何通过传递“s:”

来获得“c:\ temp”

我还想知道如何为网络驱动器做到这一点。 (如果s:挂载到“\ MyComputer \ Hello”,那么我想检索“\ MyComputer \ Hello”然后从中检索“c:\ Hello”)

这可能是一个非常简单的问题,但我找不到有关它的信息。

谢谢,

亚当

3 个答案:

答案 0 :(得分:1)

如果您使用过SUBST,那么您需要的API是QueryDosDevice。您可以使用DefineDosDevice自己提供东西。

答案 1 :(得分:0)

您可以使用GetVolumeInformation功能。来自文档:

  

符号链接行为

     

如果路径指向符号链接,则该函数返回该信息的卷信息   目标

但是我自己没有测试过。

答案 2 :(得分:0)

要查找已安装的网络共享的路径,您必须使用WNet API:

wstring ConvertToUNC(wstring sPath)
{
    WCHAR temp;
    UNIVERSAL_NAME_INFO * puni = NULL;
    DWORD bufsize = 0;
    wstring sRet = sPath;
    //Call WNetGetUniversalName using UNIVERSAL_NAME_INFO_LEVEL option
    if (WNetGetUniversalName(sPath.c_str(),
        UNIVERSAL_NAME_INFO_LEVEL,
        (LPVOID) &temp,
        &bufsize) == ERROR_MORE_DATA)
    {
        // now we have the size required to hold the UNC path
        WCHAR * buf = new WCHAR[bufsize+1];
        puni = (UNIVERSAL_NAME_INFO *)buf;
        if (WNetGetUniversalName(sPath.c_str(),
            UNIVERSAL_NAME_INFO_LEVEL,
            (LPVOID) puni,
            &bufsize) == NO_ERROR)
        {
            sRet = wstring(puni->lpUniversalName);
        }
        delete [] buf;
    }

    return sRet;;
}