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

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

但是, GetProcessImageFileName将以设备forms返回path,例如\ device \ harddiskvolume0 \ – 如何将其转换为驱动器号?

我正在建议GetmoduleeFileNameEx像Luke在评论中所做的那样。

所有驱动器号的QueryDosDevice() (你可以找到GetLogicalDrives()所有的驱动器号)将是另一个赌注,虽然理论上你可以得到一个没有驱动器号的路径,或符号链接可以搞砸了一个简单的字符串比较。

但是..怎么样…你应该能够用\??\GLOBALROOT (这是从内存,它可能不完全是)的NT路径前缀,然后在像CreateFileW()函数中使用它。 (AFAIK它必须是Unicode版本的文件API ..)

您可以尝试将驱动器盘符转换为设备形式,而这是我所做的,希望它有助于:

  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。