码迷,mamicode.com
首页 > 系统相关 > 详细

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

时间:2015-11-12 17:57:44      阅读:335      评论:0      收藏:0      [点我收藏+]

标签:

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 }

 

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

标签:

原文地址:http://www.cnblogs.com/cxys/p/4959597.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!