通过进程ID得到文件名
#include <stdio.h>
#include <windows.h>
#include <tlhelp32.h>
#include <tchar.h>BOOL EnablePrivilege(HANDLE hToken,LPCSTR szPrivName);
void DispProcess(void);
void DispPrsFile(void);
typedef BOOL (_stdcall *ENUMPROCESSES)( DWORD* pProcessIds, DWORD cb, DWORD* pBytesReturned);
typedef BOOL (_stdcall *ENUMPROCESSMODULES)(HANDLE hProcess, HMODULE* lphModule, DWORD cb, LPDWORD lpcbNeeded);
typedef DWORD (_stdcall *GETMODULEFILENAMEEX)(HANDLE hProcess, HMODULE hModule, LPTSTR lpFilename, DWORD nSize
);
int main()
{DispPrsFile();return 0;
}
BOOL EnablePrivilege(HANDLE hToken,LPCSTR szPrivName)
{TOKEN_PRIVILEGES tkp;LookupPrivilegeValue( NULL,szPrivName,&tkp.Privileges[0].Luid );tkp.PrivilegeCount=1;tkp.Privileges[0].Attributes=SE_PRIVILEGE_ENABLED;AdjustTokenPrivileges( hToken,FALSE,&tkp,sizeof tkp,NULL,NULL );return( (GetLastError()==ERROR_SUCCESS) );
}
void DispProcess(void)
{HANDLE hSnapshot;PROCESSENTRY32 pe;BOOL bSucceed;TCHAR * szFileName = NULL;DWORD dwProcessID = 0;HANDLE hToken;if ( OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES,&hToken) ){if (EnablePrivilege(hToken,SE_DEBUG_NAME)){hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);bSucceed = Process32First(hSnapshot, &pe);while(bSucceed){printf("\n%d\t%s",pe.th32ProcessID,pe.szExeFile);bSucceed = Process32Next(hSnapshot, &pe);}}}CloseHandle(hSnapshot);system("pause");
}
void DispPrsFile(void)
{DWORD processid[1024],needed,processcount,i;HANDLE hProcess;HMODULE hModule;char path[MAX_PATH] = "",temp[256];HMODULE hPsDll = LoadLibrary("PSAPI.DLL");ENUMPROCESSES pEnumProcesses = (ENUMPROCESSES)GetProcAddress(hPsDll, "EnumProcesses");ENUMPROCESSMODULES pEnumProcessModules = (ENUMPROCESSMODULES)GetProcAddress(hPsDll, "EnumProcessModules");GETMODULEFILENAMEEX pGetModuleFileNameEx = (GETMODULEFILENAMEEX)GetProcAddress(hPsDll, "GetModuleFileNameExA");HANDLE hToken;if ( OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES,&hToken) ){if (EnablePrivilege(hToken,SE_DEBUG_NAME)){pEnumProcesses(processid, sizeof(processid), &needed);processcount=needed/sizeof(DWORD);for (i=0;i<processcount;i++){hProcess=OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ,false,processid[i]);if (hProcess){pEnumProcessModules(hProcess, &hModule, sizeof(hModule), &needed);pGetModuleFileNameEx(hProcess, hModule, path, sizeof(path));GetShortPathName(path,path,256);itoa(processid[i],temp,10);printf("%s --\t\t-- %s\n",path,temp);}}}}itoa(processcount,temp,10);printf("\nProcess Count:%s\n\n",temp);system("pause");
}