#include <Psapi.h>
CString DosPathToNt(IN TCHAR *szDosPath)
{
CString ret;
try
{
TCHAR szDriver[MAX_PATH] = { 0 };
TCHAR szTemp[3] = { 0 };
TCHAR szDevName[MAX_PATH] = { 0 };
INT iTemp = 0;
if (!szDosPath)
{
return ret;
}
if (GetLogicalDriveStrings(MAX_PATH * sizeof(TCHAR), szDriver))
{
//c : \ \0
//d : \ \0
//...
//\0 \0 \0 \0
for (DWORD i = 0; szDriver[i]; i += 4)
{
//跳过盘符A: B:
if (!lstrcmpi(&(szDriver[i]), _T("A:\\")) || !lstrcmpi(&(szDriver[i]), _T("B:\\")))
continue;
szTemp[0] = szDriver[i];
szTemp[1] = szDriver[i + 1];
szTemp[2] = _T('\0');
if (QueryDosDevice(szTemp, szDevName, MAX_PATH * sizeof(TCHAR))) //查询 Dos 设备名
{
iTemp = lstrlen(szDevName);
if (0 == _tcsnicmp(szDosPath, szDevName, lstrlen(szDevName))) //命中
{
ret = szTemp; //复制驱动器
ret += (szDosPath + iTemp); //复制路径
}
}
}
}
else
{
ret = szDosPath;
}
}
catch (...)
{
OutputDebugStringA(__FUNCTION__);
}
return ret;
}
CString GetProcessPath(IN DWORD dwPid)
{
CString ret;
try
{
TCHAR szImagePath[MAX_PATH] = { 0 };
HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, 0, dwPid);
if (hProcess)
{
if (GetProcessImageFileName(hProcess, szImagePath, MAX_PATH * sizeof(TCHAR)))
{
ret = DosPathToNt(szImagePath);
}
CloseHandle(hProcess);
}
}
catch (...)
{
OutputDebugStringA(__FUNCTION__);
}
return ret;
}
int main()
{
CString str = GetProcessPath(GetCurrentProcessId());
return 0;
}
C++.进程路径
猜你喜欢
转载自www.cnblogs.com/dailycode/p/12460161.html
今日推荐
周排行