bool WDbgArk::Init() { if ( IsInited() ) return true; if ( m_Client->QueryInterface(__uuidof(IDebugSymbols3), reinterpret_cast<void**>(&m_symbols3_iface)) != S_OK ) { m_symbols3_iface.Set(nullptr); err << wa::showminus << __FUNCTION__ << ": Failed to initialize interface" << endlerr; } m_is_cur_machine64 = IsCurMachine64(); // get system version m_system_ver.reset(new WDbgArkSystemVer); if ( !m_system_ver->IsInited() ) { err << wa::showminus << __FUNCTION__ ": WDbgArkSystemVer init failed" << endlerr; return false; } else { m_system_ver->CheckWindowsBuild(); } m_Symbols->Reload(""); // revise debuggee modules list m_symbols_base.reset(new WDbgArkSymbolsBase); if ( !m_symbols_base->CheckMsSymbolsPath() ) warn << wa::showqmark << __FUNCTION__ ": CheckMsSymbolsPath failed" << endlwarn; // it's a bad idea to do this in constructor's initialization list 'coz global class uninitialized m_obj_helper.reset(new WDbgArkObjHelper(m_sym_cache)); if ( !m_obj_helper->IsInited() ) warn << wa::showqmark << __FUNCTION__ ": WDbgArkObjHelper init failed" << endlwarn; m_color_hack.reset(new WDbgArkColorHack); if ( !m_color_hack->IsInited() ) warn << wa::showqmark << __FUNCTION__ ": WDbgArkColorHack init failed" << endlwarn; m_dummy_pdb.reset(new WDbgArkDummyPdb); if ( !m_dummy_pdb->IsInited() ) warn << wa::showqmark << __FUNCTION__ ": WDbgArkDummyPdb init failed" << endlwarn; InitScanCommands(); InitCallbackCommands(); if ( m_system_ver->GetStrictVer() >= W7RTM_VER && !FindDbgkLkmdCallbackArray() ) warn << wa::showqmark << __FUNCTION__ ": FindDbgkLkmdCallbackArray failed" << endlwarn; if ( m_system_ver->GetStrictVer() >= W10RTM_VER && !FindMiApiSetSchema() ) warn << wa::showqmark << __FUNCTION__ ": FindMiApiSetSchema failed" << endlwarn; return (m_inited = true); }
bool WDbgArk::Init() { if ( IsInited() ) return true; CheckSymbolsPath(); m_obj_helper = std::unique_ptr<WDbgArkObjHelper>(new WDbgArkObjHelper); m_color_hack = std::unique_ptr<WDbgArkColorHack>(new WDbgArkColorHack); // get system version HRESULT result = m_Control->GetSystemVersion(reinterpret_cast<PULONG>(&m_platform_id), reinterpret_cast<PULONG>(&m_major_build), reinterpret_cast<PULONG>(&m_minor_build), NULL, 0, NULL, reinterpret_cast<PULONG>(&m_service_pack_number), NULL, 0, NULL); if ( !SUCCEEDED(result) ) warn << __FUNCTION__ ": GetSystemVersion failed with result = " << result << endlwarn; m_is_cur_machine64 = IsCurMachine64(); InitCallbackCommands(); InitCalloutNames(); InitGDTSelectors(); if ( !FindDbgkLkmdCallbackArray() ) warn << __FUNCTION__ ": FindDbgkLkmdCallbackArray failed" << endlwarn; m_inited = true; return m_inited; }