大佬教程收集整理的这篇文章主要介绍了获取进程全路径方法(支持xp、win7、win10系统),大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
实例:
DWORD dwMajorVersion = 0; DWORD dwMinorVersion = 0; OSVERSIONINFOEX osver = { 0 }; osver.dwOSVersionInfoSize = sizeof(osver); ::GetVersionEx((OSVERSIONINFO*)&osver); dwMajorVersion = osver.dwMajorVersion; dwMinorVersion = osver.dwMinorVersion; //打开进程 //dwPID,进程ID char szFilename[MAX_PATH] = {0};//文件名 char szPathName[MAX_PATH] = {0};//路径名 HANDLE hProcess = NULL; HMODULE hModule = NULL; hProcess=OpenProcess(PROCESS_QUERY_INFORMATION|PROCESS_VM_READ,//访问权限,win7以上系统需要提升权限EnablePrivilege false,//是否允许得到的进程句柄被后创建的子进程继承 dwPID);//进程ID DWORD dwError = 0; //BOOL bsuccessProcess = pEnumProcessModules(hProcess,&hModule,sizeof(hModulE),&cbReturn); BOOL bsuccessProcess = EnumProcessModules(hProcess,&cbReturn); if (!bsuccessProcess) { dwError = GetLastError(); } memset(szFilename,sizeof(szFileName)); memset(szPathName,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,pAll[i].szFileName); } else if (osver.dwMajorVersion >= 6) //win7或win7以上 { DWORD dwPathNameSize = sizeof(szPathName); bsuccessProcess = QueryFullProcessImagename(hProcess,&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系统)全部内容,希望文章能够帮你解决获取进程全路径方法(支持xp、win7、win10系统)所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。