获取当前所有进程的完整路径

#include <stdio.h>
#include <windows.h>
#include <tlhelp32.h>
#include <string>
#include <tchar.h>
#include <Psapi.h>
#pragma comment (lib,"Psapi.lib")
 
BOOL  DosPathToNtPath( LPTSTR  pszDosPath,  LPTSTR  pszNtPath)
{
     TCHAR            szDriveStr[500];
     TCHAR            szDrive[3];
     TCHAR            szDevName[100];
     INT                cchDevName;
     INT                i;
     
     //检查参数
     if (!pszDosPath || !pszNtPath )
         return  FALSE;
 
     //获取本地磁盘字符串
     if (GetLogicalDriveStrings( sizeof (szDriveStr), szDriveStr))
     {
         for (i = 0; szDriveStr[i]; i += 4)
         {
             if (!lstrcmpi(&(szDriveStr[i]), _T( "A:\\" )) || !lstrcmpi(&(szDriveStr[i]), _T( "B:\\" )))
                 continue ;
 
             szDrive[0] = szDriveStr[i];
             szDrive[1] = szDriveStr[i + 1];
             szDrive[2] =  '\0' ;
             if (!QueryDosDevice(szDrive, szDevName, 100)) //查询 Dos 设备名
                 return  FALSE;
 
             cchDevName = lstrlen(szDevName);
             if (_tcsnicmp(pszDosPath, szDevName, cchDevName) == 0) //命中
             {
                 lstrcpy(pszNtPath, szDrive); //复制驱动器
                 lstrcat(pszNtPath, pszDosPath + cchDevName); //复制路径
 
                 return  TRUE;
             }           
         }
     }
 
     lstrcpy(pszNtPath, pszDosPath);
     
     return  FALSE;
}
//获取进程完整路径
BOOL  GetProcessFullPath( DWORD  dwPID,  TCHAR  pszFullPath[MAX_PATH])
{
     TCHAR        szImagePath[MAX_PATH];
     HANDLE        hProcess;
     if (!pszFullPath)
         return  FALSE;
 
     pszFullPath[0] =  '\0' ;
     hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, 0, dwPID);
     if (!hProcess)
         return  FALSE;
 
     if (!GetProcessImageFileName(hProcess, szImagePath, MAX_PATH))
     {
         CloseHandle(hProcess);
         return  FALSE;
     }
 
     if (!DosPathToNtPath(szImagePath, pszFullPath))
     {
         CloseHandle(hProcess);
         return  FALSE;
     }
 
     CloseHandle(hProcess);
 
     _tprintf(_T( "%d,%s \r\n" ),dwPID,pszFullPath);
     return  TRUE;
}
int  main( int  argc,  char * argv[])
{
     HANDLE  hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
     if  (INVALID_HANDLE_VALUE == hSnapshot)
     {
         return  NULL;
     }
     PROCESSENTRY32 pe ={0};
     pe.dwSize =  sizeof (PROCESSENTRY32); 
 
     BOOL  fOk;
     for  (fOk = Process32First(hSnapshot, &pe); fOk; fOk = Process32Next(hSnapshot, &pe))
     {
         TCHAR  szProcessName[MAX_PATH] = {0};
         GetProcessFullPath(pe.th32ProcessID, szProcessName);
     }
     return  0;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值