#include <stdio.h>
#include <windows.h>
#define Max_Process_Count 1024
#define Max_Module_Count 1024
//缺少psapi.h头,自己导出函数
typedef BOOL (__stdcall *ENUMPROCESSES)( OUT DWORD *, IN DWORD, OUT DWORD * );
typedef DWORD (__stdcall *GETMODULEFILENAMEEX)( IN HANDLE, IN HMODULE, OUT LPTSTR, IN DWORD );
typedef BOOL (__stdcall *ENUMPROCESSMODULES)( IN HANDLE, OUT HMODULE*, IN DWORD, OUT LPDWORD );
ENUMPROCESSES EnumProcesses;
GETMODULEFILENAMEEX GetModuleFileNameEx;
ENUMPROCESSMODULES EnumProcessModules;
void GetPath( DWORD );
int main(int argc, char *argv[])
{
HMODULE hPsapiHandle = LoadLibrary( "psapi.dll " );
printf( "/n" );
if( ! hPsapiHandle )
{
printf( "Load psapi.dll error: %d/n", GetLastError() );
return -1;
}
EnumProcesses = (ENUMPROCESSES)GetProcAddress( hPsapiHandle, "EnumProcesses" );
GetModuleFileNameEx = (GETMODULEFILENAMEEX)GetProcAddress( hPsapiHandle, "GetModuleFileNameExA" );
EnumProcessModules = (ENUMPROCESSMODULES)GetProcAddress( hPsapiHandle, "EnumProcessModules" );
DWORD processesID[Max_Process_Count];
DWORD buffNeeded;
DWORD processCount;
if( !EnumProcesses( processesID, sizeof(processesID), &buffNeeded) )
{
FreeLibrary( hPsapiHandle );
return -1;
}
processCount = buffNeeded /sizeof(DWORD);
int index = 0;
for( index =0; index < processCount; index++ )
{
GetPath( processesID[index] );
}
if( hPsapiHandle )
{
FreeLibrary( hPsapiHandle );
}
return 0;
}
void GetPath( DWORD processID )
{
char filePath[MAX_PATH];
HANDLE hProcess = OpenProcess( PROCESS_QUERY_INFORMATION|PROCESS_VM_READ,
FALSE,
processID
);
if( hProcess )
{
HMODULE hMod[Max_Module_Count];
DWORD buffNeeded, moduleCount;
if( EnumProcessModules( hProcess, hMod, sizeof(hMod), &buffNeeded) )
{
moduleCount = buffNeeded / sizeof(HMODULE);
if( hProcess && hMod[0] )
{
GetModuleFileNameEx( hProcess, hMod[0], filePath, sizeof(filePath) );
}
printf( "%d/t%s/n", processID, filePath );
}
}
CloseHandle(hProcess);
}
#include <windows.h>
#define Max_Process_Count 1024
#define Max_Module_Count 1024
//缺少psapi.h头,自己导出函数
typedef BOOL (__stdcall *ENUMPROCESSES)( OUT DWORD *, IN DWORD, OUT DWORD * );
typedef DWORD (__stdcall *GETMODULEFILENAMEEX)( IN HANDLE, IN HMODULE, OUT LPTSTR, IN DWORD );
typedef BOOL (__stdcall *ENUMPROCESSMODULES)( IN HANDLE, OUT HMODULE*, IN DWORD, OUT LPDWORD );
ENUMPROCESSES EnumProcesses;
GETMODULEFILENAMEEX GetModuleFileNameEx;
ENUMPROCESSMODULES EnumProcessModules;
void GetPath( DWORD );
int main(int argc, char *argv[])
{
HMODULE hPsapiHandle = LoadLibrary( "psapi.dll " );
printf( "/n" );
if( ! hPsapiHandle )
{
printf( "Load psapi.dll error: %d/n", GetLastError() );
return -1;
}
EnumProcesses = (ENUMPROCESSES)GetProcAddress( hPsapiHandle, "EnumProcesses" );
GetModuleFileNameEx = (GETMODULEFILENAMEEX)GetProcAddress( hPsapiHandle, "GetModuleFileNameExA" );
EnumProcessModules = (ENUMPROCESSMODULES)GetProcAddress( hPsapiHandle, "EnumProcessModules" );
DWORD processesID[Max_Process_Count];
DWORD buffNeeded;
DWORD processCount;
if( !EnumProcesses( processesID, sizeof(processesID), &buffNeeded) )
{
FreeLibrary( hPsapiHandle );
return -1;
}
processCount = buffNeeded /sizeof(DWORD);
int index = 0;
for( index =0; index < processCount; index++ )
{
GetPath( processesID[index] );
}
if( hPsapiHandle )
{
FreeLibrary( hPsapiHandle );
}
return 0;
}
void GetPath( DWORD processID )
{
char filePath[MAX_PATH];
HANDLE hProcess = OpenProcess( PROCESS_QUERY_INFORMATION|PROCESS_VM_READ,
FALSE,
processID
);
if( hProcess )
{
HMODULE hMod[Max_Module_Count];
DWORD buffNeeded, moduleCount;
if( EnumProcessModules( hProcess, hMod, sizeof(hMod), &buffNeeded) )
{
moduleCount = buffNeeded / sizeof(HMODULE);
if( hProcess && hMod[0] )
{
GetModuleFileNameEx( hProcess, hMod[0], filePath, sizeof(filePath) );
}
printf( "%d/t%s/n", processID, filePath );
}
}
CloseHandle(hProcess);
}