通过进程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");
}