将Windows设备文件名转换为驱动器号

时间:2013-04-15 18:08:19

标签: c windows file winapi

我试图在C中获取与进程句柄相关联的文件名,因为我的代码需要在Windows XP上运行,所以我使用 GetProcessImageFileName (而不是 QueryFullProcessImageName )。

但是, GetProcessImageFileName 会以设备形式返回路径,例如\ device \ harddiskvolume0 \ - 如何将其转换为驱动器号?

2 个答案:

答案 0 :(得分:2)

我会像Luke在评论中那样建议GetModuleFileNameEx

所有驱动器号上的

QueryDosDevice()(你可以找到带有GetLogicalDrives()的所有驱动器号)都是另一种赌注,尽管理论上你可以获得没有驱动器号的路径或符号链接可以搞一个简单的字符串比较。

但是..这个怎么样......你应该能够在NT路径前加\??\GLOBALROOT(这是来自内存,可能不是那个),然后在像{{1}这样的函数中使用它}}。 (AFAIK必须是文件API的Unicode版本。)

答案 1 :(得分:-1)

您可以尝试将驱动器盘符表单转换为设备表单,这就是我所做的,希望它有所帮助:

    TCHAR szTemp[MAX_PATH] = {0};
    _tcsncpy(szTemp, lpszImageFile, 2);
    QueryDosDevice(szTemp, szImageFile, MAX_PATH);

    _tcsncat(szImageFile, lpszImageFile+2, _tcslen(lpszImageFile) - 2);

在此代码中,lpszImageFile是进程的完整路径名,例如c:\ program files \ test.exe。