实现代码
- #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;
- }
截图
参考
https://bbs.csdn.net/topics/390937481
来源: http://www.bubuko.com/infodetail-2947226.html