我正在尝试获取与 C 中的进程句柄关联的文件名,并且由于我的代码需要在 Windows XP 上运行,因此我使用的是GetProcessImageFileName(而不是QueryFullProcessImageName)。
但是,GetProcessImageFileName以设备形式返回路径,例如 \device\harddiskvolume0\ - 如何将其转换为驱动器号?
我打算GetModuleFileNameEx
像卢克在评论中所做的那样提出建议。
QueryDosDevice()
在所有驱动器号上(您可以找到所有带有 的驱动器GetLogicalDrives()
号)将是另一个赌注,尽管理论上您可以获得没有驱动器号的路径,或者符号链接可能会搞砸一个简单的字符串比较。
但是.. 这个怎么样...您应该能够在 NT 路径前加上\??\GLOBALROOT
(这是来自内存,可能不完全是这样),然后在CreateFileW()
. (AFAIK 它必须是文件 API 的 Unicode 版本..)
您可以尝试将驱动器号形式转换为设备形式,这是我所做的,希望对您有所帮助:
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。