typedef struct _file_info
{
char file_name[256];
}file_info;
//process_list返回所有调用该动态链接库的进程信息,process_user_num返回调用该库的进程数量
int get_process_info( char* module_nume, file_info* process_list, int& process_user_num )
{
HANDLE pro_handle;
DWORD processes[1024], cb_needed, c_processes;
if( !EnumProcesses( processes, sizeof( processes ), &cb_needed ) )
return 1;
c_processes = cb_needed / sizeof( DWORD );
for ( int i = 0; i < c_processes; i++ )
{
pro_handle = OpenProcess( PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, processes[i] );
HMODULE h_module[1024];
//HMODULE hModule1;
DWORD cb_needed1;
char sz_name[MAX_PATH], *ptr = NULL;
//char process_name[MAX_PATH];
//枚举进程模块
if ( EnumProcessModules( pro_handle, h_module, sizeof( h_module ), &cb_needed1 ) )
{
//cout<<"Module:";
for( int j = 0; j < ( cb_needed1 / sizeof( HMODULE ) ); j++ )
{
// 获得模块名
//process_user_num = 0;
if( GetModuleBaseName( pro_handle, h_module[j], sz_name, sizeof( sz_name ) ) )
{
ptr = strdup( sz_name );
if( strcmp( module_nume, ptr ) == 0 )
{
HMODULE mod;
DWORD cb_needed2;
char process_name[256];
ZeroMemory( process_name, 256 );
if ( EnumProcessModules( pro_handle, &mod, sizeof( mod ), &cb_needed2 ) )
{
if( GetModuleBaseName( pro_handle, mod, process_name, 256 ) )
{
strcpy( process_list[process_user_num].file_name, process_name );
process_user_num++;
cout<<process_name<<endl;
}
}
}
//cout<<" "<<ptr<<" ";
}
}
//cout<<endl;
}
}
return 0;
}