Example #1
0
/** 
 * 
 * Enumerate all modules
 * 
 * @param       Nil
 * @return      bool - Returns execution status.
 * @exception   Nil
 * @see         Nil
 * @since       1.0
 */
bool Process::EnumModules()
{
    if( !m_ahmProcess )
    {
        return false;
    }

    HANDLE hSnapModules = CreateToolhelp32Snapshot( TH32CS_SNAPMODULE, m_stPrcEntry32.th32ProcessID );
    if( hSnapModules == INVALID_HANDLE_VALUE )
    {
        return false;
    }

    // Closes handle of opened snapshot
    Utils::AutoHandleMgr ahmHandleCloser( hSnapModules );

    MODULEENTRY32 stmeModuleEntry32 = { 0 };
    stmeModuleEntry32.dwSize = sizeof( stmeModuleEntry32 );

    // First entry
    if( !Module32First( hSnapModules, &stmeModuleEntry32 ))
    {
        return false;
    }

    // Loop through and add items
    do 
    {
        Module* pModule = new Module;
        if( !pModule )
        {
            continue;
        }

        // Set module entry for module
        pModule->SetModuleEntry32( stmeModuleEntry32 );

        // Add this module to module list
        m_lstModules.AddTail( pModule );
    }while( Module32Next( hSnapModules, &stmeModuleEntry32 )); // Get next module

    // Return success
    return true;
}// EnumModules