4

我正在尝试获取与 C 中的进程句柄关联的文件名,并且由于我的代码需要在 Windows XP 上运行,因此我使用的是GetProcessImageFileName(而不是QueryFullProcessImageName)。

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

4

2 回答 2

2

我打算GetModuleFileNameEx像卢克在评论中所做的那样提出建议。

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

但是.. 这个怎么样...您应该能够在 NT 路径前加上\??\GLOBALROOT(这是来自内存,可能不完全是这样),然后在CreateFileW(). (AFAIK 它必须是文件 API 的 Unicode 版本..)

于 2013-05-29T07:34:17.960 回答
-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。

于 2013-05-29T07:26:38.387 回答