void EventCallback::OnModuleLoadInternal( DWORD uniquePid, ICoreModule* coreModule ) { OutputDebugStringA( "EventCallback::OnModuleLoad\n" ); HRESULT hr = S_OK; RefPtr<ModuleLoadEvent> event; RefPtr<Program> prog; RefPtr<Module> mod; CComPtr<IDebugModule2> mod2; if ( !mEngine->FindProgram( uniquePid, prog ) ) return; hr = prog->CreateModule( coreModule, mod ); if ( FAILED( hr ) ) return; hr = prog->AddModule( mod.Get() ); if ( FAILED( hr ) ) return; hr = mod->LoadSymbols( false ); // later we'll check if symbols were loaded prog->UpdateAAVersion( mod.Get() ); hr = mEngine->BindPendingBPsToModule( mod.Get(), prog.Get() ); hr = MakeCComObject( event ); if ( FAILED( hr ) ) return; hr = mod->QueryInterface( __uuidof( IDebugModule2 ), (void**) &mod2 ); if ( FAILED( hr ) ) return; // TODO: message event->Init( mod2, NULL, true ); SendEvent( event.Get(), prog.Get(), NULL ); //------------------------- RefPtr<SymbolSearchEvent> symEvent; CComPtr<IDebugModule3> mod3; MODULE_INFO_FLAGS flags = 0; RefPtr<MagoST::ISession> session; CComBSTR msg; hr = mod->QueryInterface( __uuidof( IDebugModule3 ), (void**) &mod3 ); if ( FAILED( hr ) ) return; hr = MakeCComObject( symEvent ); if ( FAILED( hr ) ) return; if ( mod->GetSymbolSession( session ) ) flags |= MIF_SYMBOLS_LOADED; mod->GetPath( msg ); if( flags & MIF_SYMBOLS_LOADED ) msg.Append( L" loaded, symbols found."); else msg.Append( L" loaded, no symbols."); symEvent->Init( mod3, msg.m_str, flags ); hr = SendEvent( symEvent.Get(), prog.Get(), NULL ); }
void EventCallback::OnModuleLoad( IProcess* process, IModule* coreModule ) { OutputDebugStringA( "EventCallback::OnModuleLoad\n" ); HRESULT hr = S_OK; RefPtr<ModuleLoadEvent> event; RefPtr<Program> prog; RefPtr<Module> mod; CComPtr<IDebugModule2> mod2; if ( !mEngine->FindProgram( process->GetId(), prog ) ) return; hr = prog->CreateModule( coreModule, mod ); if ( FAILED( hr ) ) return; hr = prog->AddModule( mod.Get() ); if ( FAILED( hr ) ) return; hr = mod->LoadSymbols( false ); // later we'll check if symbols were loaded hr = mEngine->BindPendingBPsToModule( mod.Get(), prog.Get() ); hr = MakeCComObject( event ); if ( FAILED( hr ) ) return; hr = mod->QueryInterface( __uuidof( IDebugModule2 ), (void**) &mod2 ); if ( FAILED( hr ) ) return; // TODO: message event->Init( mod2, NULL, true ); SendEvent( event.Get(), prog.Get(), NULL ); //------------------------- RefPtr<SymbolSearchEvent> symEvent; CComPtr<IDebugModule3> mod3; MODULE_INFO_FLAGS flags = 0; RefPtr<MagoST::ISession> session; CComBSTR name; mod->GetName( name ); hr = mod->QueryInterface( __uuidof( IDebugModule3 ), (void**) &mod3 ); if ( FAILED( hr ) ) return; hr = MakeCComObject( symEvent ); if ( FAILED( hr ) ) return; if ( mod->GetSymbolSession( session ) ) flags |= MIF_SYMBOLS_LOADED; symEvent->Init( mod3, name.m_str, flags ); hr = SendEvent( symEvent.Get(), prog.Get(), NULL ); }