获取指定进程所对应的可执行(EXE)文件全路径(代码)

1 #include "Psapi.h"
2 #pragma   comment(lib,   "Psapi.lib ")
//需要包含头文件哦!

 

 1 /* 功  能:获取指定进程所对应的可执行(EXE)文件全路径
 2  * 参  数:hProcess - 进程句柄。必须具有PROCESS_QUERY_INFORMATION 或者
 3                      PROCESS_QUERY_LIMITED_INFORMATION 权限
 4  *         sFilePath - 进程句柄hProcess所对应的可执行文件路径
 5  * 返回值:
 6  */
 7 void GetProcessFilePath(IN HANDLE hProcess, OUT CString& sFilePath)
 8 {
 9     sFilePath = _T("");
10     TCHAR tsFileDosPath[MAX_PATH + 1];
11     ZeroMemory(tsFileDosPath, sizeof(TCHAR)*(MAX_PATH + 1));
12     if (0 == GetProcessImageFileName(hProcess, tsFileDosPath, MAX_PATH + 1))
13     {
14         return;
15     }
16 
17     // 获取Logic Drive String长度
18     UINT uiLen = GetLogicalDriveStrings(0, NULL);
19     if (0 == uiLen)
20     {
21         return;
22     }
23 
24     PTSTR pLogicDriveString = new TCHAR[uiLen + 1];
25     ZeroMemory(pLogicDriveString, uiLen + 1);
26     uiLen = GetLogicalDriveStrings(uiLen, pLogicDriveString);
27     if (0 == uiLen)
28     {
29         delete[]pLogicDriveString;
30         return;
31     }
32 
33     TCHAR szDrive[3] = TEXT(" :");
34     PTSTR pDosDriveName = new TCHAR[MAX_PATH];
35     PTSTR pLogicIndex = pLogicDriveString;
36 
37     do
38     {
39         szDrive[0] = *pLogicIndex;
40         uiLen = QueryDosDevice(szDrive, pDosDriveName, MAX_PATH);
41         if (0 == uiLen)
42         {
43             if (ERROR_INSUFFICIENT_BUFFER != GetLastError())
44             {
45                 break;
46             }
47 
48             delete[]pDosDriveName;
49             pDosDriveName = new TCHAR[uiLen + 1];
50             uiLen = QueryDosDevice(szDrive, pDosDriveName, uiLen + 1);
51             if (0 == uiLen)
52             {
53                 break;
54             }
55         }
56 
57         uiLen = _tcslen(pDosDriveName);
58         if (0 == _tcsnicmp(tsFileDosPath, pDosDriveName, uiLen))
59         {
60             sFilePath.Format(_T("%s%s"), szDrive, tsFileDosPath + uiLen);
61             break;
62         }
63 
64         while (*pLogicIndex++);
65     } while (*pLogicIndex);
66 
67     delete[]pLogicDriveString;
68     delete[]pDosDriveName;
69 }

 

posted @ 2015-11-12 17:05  初夏屿森  阅读(571)  评论(0编辑  收藏  举报