📄 warifroot.cpp
字号:
#include "StdAfx.h"#include "WarIfRoot.h" // class implemented#ifndef WAR_WIN32_REGISTRY_H# include "WarWin32Registry.h"#endif#ifndef WAR_IF_SERVER_H# include "WarIfServer.h"#endif#ifndef WAR_LOG_H# include "WarLog.h"#endif/////////////////////////////// PUBLIC /////////////////////////////////////////============================= LIFECYCLE ====================================WarIfRoot::WarIfRoot() :mhKey(NULL){}// WarIfRootWarIfRoot::~WarIfRoot(){ if (mhKey) ::RegCloseKey(mhKey);}// ~WarIfRoot//============================= OPERATORS ====================================//============================= OPERATIONS ===================================void WarIfRoot::Open(war_ccsysstr_t vendorName, war_ccsysstr_t machineName) throw(WarException){ mVendor = vendorName; mMachine = machineName ? machineName : _T(""); if (!mMachine.empty()) { int result = RegConnectRegistry(mMachine.c_str(), GetHkey(), &mhKey); if (ERROR_SUCCESS != result) { WarLog err_log(WARLOG_ERROR, "WarIfRoot::Open()"); WarError err(WAR_ERR_SYSTEM_ERROR, result); err_log << "Failed to open a HKEY to the registry on \"" << mMachine << "\". Reason: " << err << war_endl; WarThrow(err, NULL); } } mRegKey.SetRootKey(GetHkey());}war_if_server_ptr_t WarIfRoot::GetServer(war_ccsysstr_t svrName) throw(WarException){ war_registrypath_t reg_path; reg_path << "SOFTWARE" << WAR_SYSSLASH << mVendor << WAR_SYSSLASH << WAR_DEBUG_PREFIX _T("Servers") << WAR_SYSSLASH << svrName; mRegKey.Open(GetHkey(), reg_path); if (mRegKey.GetStrValue(WAR_WINNT_REG_CLASSID, NULL) != war_regstr_t(_T(WAR_CLSID_ROOT))) { WarThrow(WarError(WAR_ERR_NO_OBJECT), NULL); } return new WarIfServer(war_if_root_ptr_t(this));}//============================= ACCESS ===================================//============================= INQUIRY ===================================void WarIfRoot::EnumServers(strlist_t& serverList) const{ war_registrypath_t reg_path; reg_path << "SOFTWARE" << WAR_SYSSLASH << mVendor << WAR_SYSSLASH << WAR_DEBUG_PREFIX _T("Servers"); WarWin32Registry reg_root; reg_root.Open(WarWin32Registry::open_t(mRegKey, reg_path)); WarWin32Registry::keyname_list_t keys; reg_root.EnumKey(keys); for(WarWin32Registry::keyname_list_t::const_iterator P = keys.begin() ; P != keys.end() ; ++P) { WarWin32Registry reg_server; reg_server.Open(WarWin32Registry::open_t( reg_root.GetRef(P->c_str()))); if (reg_server.GetStrValue(WAR_WINNT_REG_CLASSID, NULL) == war_regstr_t(_T(WAR_CLSID_ROOT))) { serverList.push_back(*P); } }}HKEY WarIfRoot::GetHkey() const{ if (mhKey) return mhKey; return HKEY_LOCAL_MACHINE;}/////////////////////////////// PROTECTED ////////////////////////////////////////////////////////////////// PRIVATE ///////////////////////////////////
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -