psapi根据dll名获取调用该dll的进程名称。

 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;
}

你可能感兴趣的:(list,Module,user,File,dll,Path)