获取进程全路径方法(支持xp、win7、win10系统)
获取进程的全路径的函数包括GetModuleFileNameEx、GetProcessImageFileName、QueryFullProcessImageName。
这三个函数的原型:
DWORD GetModuleFileNameEx(HANDLE hProcess,HMODULE hModule,LPTSTR lpFilename,DWORD nSize)
      hProcess是目标进程的句柄、hModule是目标模块的句柄(当此参数为NULL时函数返回的是进程可执行文件的路径)、lpFilename是存放路径的字符串缓冲区、nSize表示缓冲区的大小。函数调用失败将返回0。注:进程的句柄须有PROCESS_QUERY_INFORMATION和PROCESS_VM_READ权限。
 
DWORD GetProcessImageFileName(HANDLE hProcess,LPTSTR lpImageFileName,DWORD nSize)
      hProcess是目标进程的句柄、lpImageFileName是存放路径的字符串缓冲区、nSize表示缓冲区的大小。函数失败将返回0。注:进程句柄需要有PROCESS_QUERY_INFORMATION的权限。
 
BOOL QueryFullProcessImageName(HANDLE hProcess,DWORD dwFlags,LPTSTR lpExeName,PDWORD lpdwSize)
      hProcess是目标进程的句柄、dwFlags一般设为0(表示返回的路径是Win32的路径格式,如"C:/...",如将其设为PROCESS_NAME_NATIVE将返回"/Device/HarddiskVolume1/..."这样的格式路径)、lpExeName是存放路径的字符串缓冲区、lpdwSize表示缓冲区的大小。函数失败将返回FALSE。注:调用此函数的句柄须有PROCESS_QUERY_INFORMATION或这是PROCESS_QUERY_LIMITED_INFORMATION的权限,并且只能在Vista或更高版本的系统中使用。
 
      调用GetModuleFileNameEx和GetProcessImageFileName需要包含Psapi.h头文件,并链接到Psapi.lib
#include <Psapi.h>
#pragma comment (lib,"Psapi.lib")

在win10 64位系统上调用GetModuleFileNameEx()遍历获取64位进程的全路径失败,得到的路径都为空。

根据官方的说法:
For the best results use the following table to convert paths.
Windows 2000 = GetModuleFileNameEx()
Windows XP/Server2003 = GetProcessImageFileName()
Windows Vista/7/8/10/Server2008/Server2012 = QueryFullProcessImageName()
如果在win10系统中调用GetModuleFileNameEx 返回错误299 GetLastError();需要调用QueryFullProcessImageName()函数。

实例:

DWORD dwMajorVersion = 0;DWORD dwMinorVersion = 0;OSVERSIONINFOEX osver = { 0 };osver.dwOSVersionInfoSize = sizeof(osver);::GetVersionEx((OSVERSIONINFO*)&osver);dwMajorVersion = osver.dwMajorVersion;dwMinorVersion = osver.dwMinorVersion;//打开进程//dwPID,进程IDchar  szFileName[MAX_PATH] = {0};//文件名char  szPathName[MAX_PATH] = {0};//路径名HANDLE hProcess = NULL;HMODULE hModule = NULL;hProcess=OpenProcess(PROCESS_QUERY_INFORMATION|PROCESS_VM_READ,//访问权限,win7以上系统需要提升权限EnablePrivilegefalse,//是否允许得到的进程句柄被后创建的子进程继承dwPID);//进程IDDWORD dwError = 0;//BOOL bSuccessProcess = pEnumProcessModules(hProcess,&hModule,sizeof(hModule),&cbReturn);BOOL bSuccessProcess = EnumProcessModules(hProcess, &hModule, sizeof(hModule), &cbReturn);if (!bSuccessProcess){dwError = GetLastError();}memset(szFileName, 0, sizeof(szFileName));memset(szPathName, 0, sizeof(szPathName));if (hModule != NULL){//获得进程模块文件名(包含路径)if (dwMajorVersion < 5)      //2000{//保存文件名DWORD dwGetModuleBaseName = GetModuleFileNameEx(hProcess, hModule, szPathName, sizeof(szPathName));GetFileNameWithoutExtendName(szPathName, pAll[i].szFileName);}if (dwMajorVersion == 5)  //x或Windows Server2003{GetProcessImageFileName(hProcess, szPathName, sizeof(szPathName));GetFileNameWithoutExtendName(szPathName, pAll[i].szFileName);}else if (osver.dwMajorVersion >= 6)      //win7或win7以上{DWORD dwPathNameSize = sizeof(szPathName);bSuccessProcess = QueryFullProcessImageName(hProcess, 0, szPathName, &dwPathNameSize);GetFileNameWithoutExtendName(szPathName, pAll[i].szFileName);}if (!bSuccessProcess){dwError = GetLastError();}strcpy(pAll[i].szPathName, szPathName);}if(hProcess)CloseHandle(hProcess);//得到文件名(不含扩展名)
void GetFileNameWithoutExtendName(const char* pFile,char *pFileDest)
{if (NULL == pFile || 0 == strlen(pFile) || NULL == pFileDest)return;char *pPos = (char *)strrchr(pFile, '\\');if (NULL == pPos){pPos = (char *)strrchr(pFile, '/');}if (NULL == pPos){pPos = (char *)pFile;}if (pPos != NULL){char *pSplitFlag = strrchr(pPos, '.');if (pSplitFlag != NULL){int nLenTemp = pSplitFlag - pPos - 1;strncpy(pFileDest, pPos + 1, nLenTemp);pFileDest[nLenTemp] = '\0';}else{strcpy(pFileDest, pPos + 1);}}else{strcpy(pFileDest, pFile);}
}//提权函数
BOOL EnablePrivilege(HANDLE hToken,LPCSTR szPrivName)
{TOKEN_PRIVILEGES tkp;//访问令牌权限结构变量LUID  luid;//本地唯一标识符结构变量//查询SE_DEBUG_NAME权限所对应的luid值if(!LookupPrivilegeValue(NULL,szPrivName,&luid)){//   TRACE("Lookup Privilege Value Failed...\nErrorCode:%d\n",GetLastError());return 0;}//填充Token_Privileges结构tkp.PrivilegeCount=1;tkp.Privileges[0].Luid=luid;tkp.Privileges[0].Attributes=SE_PRIVILEGE_ENABLED;//提升权限if(!AdjustTokenPrivileges(hToken,FALSE,&tkp,sizeof(tkp),NULL,NULL)){
//      TRACE("Adjust Token Privileges Failed...\nErrorCode:%d\n",GetLastError());return 0;}return(GetLastError()==ERROR_SUCCESS);
}

获取进程全路径方法(支持xp、win7、win10系统)相关推荐

  1. NT5/NT6上的获取进程全路径

    前面说过使用一大堆函数获取全路径 PID->eprocess->KeStackAttachProcess->ZwQueryInformationProcess->Process ...

  2. C#获取电脑系统信息和硬件信息,兼容XP/Win7/Win10(依赖System.Management.dll)

    文章目录 一.前言 二.具体实现 1.引入System.Management.dll 2.引入命名空间 3.获取系统信息 4.获取CPU信息 5.获取内存信息 6.获取硬盘信息 7.获取显卡信息 三. ...

  3. java读取hdfs文件夹_HDFS 读取、写入、遍历文件夹获取文件全路径、append

    1.从HDFS中读取数据 Configuration conf = getConf(); Path path = new Path(pathstr); FileSystem fs = FileSyst ...

  4. 批处理查找html,批处理(bat)实现全盘搜索指定文件获取其完整路径方法大全,bat大全分享...

    废话不多说,直接上代码,额,想用的话,自己保存成 [方案一]for /f + dir % [方案二]for /r(比 for /f + dir 效率高,但不会遍历隐藏文件) @echo off rem ...

  5. HDFS 读取、写入、遍历文件夹获取文件全路径、append

    版权声明:本文为博主原创文章,未经博主同意不得转载.安金龙 的博客. https://blog.csdn.net/smile0198/article/details/37573081 1.从HDFS中 ...

  6. 《Delphi 版 everything、光速搜索代码》 关于获取文件全路径 GetFullFileName 函数的优化

    <Delphi 版 everything.光速搜索代码>,文章中关于获取文件全路径的函数:GetFullFileName,有一个地方值得优化. 就是有多个文件,它们可能属于同一个目录. 譬 ...

  7. [转载]《Delphi 版 everything、光速搜索代码》 关于获取文件全路径 GetFullFileName 函数的优化...

    Delphi 版 everything.光速搜索代码>,文章中关于获取文件全路径的函数:GetFullFileName,有一个地方值得优化. 就是有多个文件,它们可能属于同一个目录. 譬如 Sy ...

  8. 易语言基于飞浆的本地ocr文字识别 xp win7 win10 无网离线 都可用

    易语言基于飞浆的本地ocr文字识别 xp win7 win10 无网离线 都可用,图片/截图/字节集参数都可识别,使用模块调用dll,免库,体积小简单方便,某些特殊图片(比如字体超大或者方向倾斜)的识 ...

  9. 笔记本电脑重装win7/win10系统教程

    由于笔记本第一次重装系统会出现系统装不上,还有出现找不到有效硬盘分区,等等问题,然后这篇文章主要讲解BIOS设置的方法,用此BIOS设置,电脑用原本安装系统的方式,能有效地解决以上问题,这有两种方法解 ...

最新文章

  1. python 视频剪裁,剪切,合并
  2. ubuntu8.04中texmacs装置
  3. PHP扩展开发教程,通过实例来展示PHP的扩展开发和底层应用原理(C语言非zephir)...
  4. wordpress hmailserver等相关 3
  5. Swift中的集合类之数组
  6. day22 Pythonpython 本文json模块
  7. java 奇数 字符乱码_socket中文奇数个出现乱码的解决办法
  8. JavaScript文档,JQuery文档,CSS中文文档下载
  9. 华硕计算机u盘启动不了怎么办,华硕笔记本、台式机无法从U盘启动安装系统的终极解决办法-网络教程与技术 -亦是美网络...
  10. 教你如何免费下载中国知网、万方学术论文?这份资源请收好!
  11. 时差怎么理解_懂的人自然懂,不懂的人再多解释也有时差,故事只能说给懂的人听...
  12. Spring Boot - 让人抓狂的ClassNotFoundException
  13. 蚂蚁集团IPO的小秘密:人均月薪5.5万,利润有望超中国石油
  14. 关闭HttpClient
  15. MCS:离散随机变量——Bernoulli分布
  16. 实时油价接口 按城市检索加油站
  17. PySide2中使用QLabel的setPixmap方法显示图片,部分图片无法显示
  18. 【论文】龙王山小青椒 - 论文写作指导
  19. 一,JavaScript基本语法
  20. 基于MATLAB的人体行为检测与识别

热门文章

  1. 计算机天梯赛pat练习集L1-(31~88题)
  2. 【借尸还魂大法】完美解决Win10系统更新报0x800f0922错误代码
  3. WordPress禁止F12审查元素、禁止右键、禁止Ctrl+S保存、禁止Ctrl+U查看源码
  4. 【漫漫科研路\pgfplots】画局部放大图
  5. 【开源】完美破解九宫格(数独)游戏
  6. 使用F12的一些基本排查技巧
  7. php 文字水印去除毛边_PHP的图像处理实例小结【文字水印、图片水印、压缩图像等】...
  8. 一读一写无锁队列c++实现
  9. 从苏宁电器到卡巴斯基第01篇:我的本科时光(上)
  10. 乐动圈圈显示无法连接服务器,win8系统安装乐动圈圈失败导致仙剑6无法安装如何解决...