📄 warmmcnodefileshare.cpp
字号:
#include "StdAfx.h"#include "WarServerSnapin.h"#include "WarSvrSnapin.h"#include "WarMmcNodeFileShare.h"#include "PropPageFileSharePermissions.h"#include "PropPageFileShareUrl.h"WarMmcNodeFileShare::WarMmcNodeFileShare(const war_registrypath_t& regNode){ mRegKey.Create(HKEY_LOCAL_MACHINE, regNode); const TCHAR *p = regNode.GetPath(); const TCHAR *node_name = p; while(*p) { if (*p == '\\') node_name = ++p; else ++p; } m_bstrDisplayName = node_name; ReloadMyProperties(); memset(&m_resultDataItem, 0, sizeof(m_resultDataItem)); m_resultDataItem.mask = RDI_STR | RDI_IMAGE | RDI_PARAM; m_resultDataItem.str = MMC_CALLBACK; m_resultDataItem.nImage = WAR_IL_SHARED_FOLDER; m_resultDataItem.lParam = (LPARAM) this; memset(&m_scopeDataItem, 0, sizeof(m_scopeDataItem)); m_scopeDataItem.mask = SDI_STR | SDI_PARAM | SDI_IMAGE | SDI_OPENIMAGE | SDI_PARENT; m_scopeDataItem.displayname = MMC_CALLBACK; m_scopeDataItem.nImage = WAR_IL_SHARED_FOLDER; m_scopeDataItem.nOpenImage = WAR_IL_SHARED_FOLDER_OPEN; m_scopeDataItem.lParam = (LPARAM)this;}HRESULT WarMmcNodeFileShare::OnSelect(IConsole *spConsole, IComponent* pComponent){ IConsoleVerb *pConsoleVerb; HRESULT hr = spConsole->QueryConsoleVerb(&pConsoleVerb); _ASSERT(SUCCEEDED(hr)); hr = pConsoleVerb->SetVerbState(MMC_VERB_RENAME, ENABLED, TRUE); _ASSERT(SUCCEEDED(hr)); hr = pConsoleVerb->SetVerbState(MMC_VERB_PROPERTIES, ENABLED, TRUE); _ASSERT(SUCCEEDED(hr)); pConsoleVerb->Release(); return S_OK;}HRESULT WarMmcNodeFileShare::QueryPagesFor(DATA_OBJECT_TYPES type){ if (type == CCT_SCOPE || type == CCT_RESULT) return S_OK; return S_FALSE;}HRESULT WarMmcNodeFileShare::CreatePropertyPages(LPPROPERTYSHEETCALLBACK lpProvider, long handle, IUnknown* pUnk, DATA_OBJECT_TYPES type){ if (type == CCT_SCOPE || type == CCT_RESULT) { // The second parameter to the property page class constructor // should be true for only one page. war_regstr_t my_name = m_bstrDisplayName; WarWin32Registry parent_reg; parent_reg.Open(mRegKey.GetRootKey(), mRegKey.GetPath().GetPathname()); warmmc_file_share_data_ptr_t my_data_ptr = new WarMmcFileNodeData(*this, my_name, parent_reg); my_data_ptr->Load(); { PropPageFileShareUrl* pPage = NULL; pPage = new PropPageFileShareUrl(my_data_ptr, handle, true, _T("URL")); HRESULT hr = lpProvider->AddPage(pPage->Create()); if(FAILED(hr)) return E_FAIL; } { PropPageFileSharePermissions* pPage = new PropPageFileSharePermissions(my_data_ptr, handle, false, _T("Permissions")); HRESULT hr = lpProvider->AddPage(pPage->Create()); if(FAILED(hr)) return E_FAIL; } return S_OK; } return E_UNEXPECTED;}HRESULT WarMmcNodeFileShare::OnExpand(BOOL bExpand, IConsole *pConsole, HSCOPEITEM parent) { // Enumerate the defined shares return S_OK; }void WarMmcNodeFileShare::ReloadMyProperties(){ std::string tmp_url; mUrl = WarUrl::Decode(tmp_url, mRegKey.GetStrValue(WAR_WINNT_SHARE_URL, NULL, true).c_str()).c_str(); mPermissions = mRegKey.GetIntValue(WAR_WINNT_REG_PERMISSIONS, 0, true);}LPOLESTR WarMmcNodeFileShare::GetResultPaneColInfo(int nCol){ switch (nCol) { case 0: return m_bstrDisplayName; case 1: return mUrl; case 2: UpdateVisualPerms(); return mVisualPermissions; } return OLESTR("Override GetResultPaneColInfo");}HRESULT WarMmcNodeFileShare::OnShow(IConsole *pConsole, BOOL bShow){ return S_FALSE;}void WarMmcNodeFileShare::UpdateVisualPerms(){ static const char perm_flags[] = { 'r', // ALLOW_READ 'w', // ALLOW_WRITE 'a', // ALLOW_APPEND 'x', // ALLOW_EXEC 'L', // ALLOW_LIST 'd', // ALLOW_DELETE 'X', // ALLOW_CWD 's', // ALLOW_SYMLINK 'h', // HIDE_OTHERS 'H', // HIDE_ALL 'R', // RECURSIVE 'D', // DENY_ALL 'T', // SYMLINK_TREE 'A' // SYMLINK_ALL }; char flags[sizeof(perm_flags)+1]; int pos = 0; for(int index = 0 ; index < sizeof(perm_flags) ; index++) { if (((1 << index) & mPermissions) != 0) flags[pos++] = perm_flags[index]; } flags[pos] = 0; mVisualPermissions = flags;}HRESULT WarMmcNodeFileShare::OnPropertyPageApplied( WarMmcFuckLameMicrosoftForNotImplementingThis *pfrom){ HRESULT hr = WarMmcNodeEventBase::OnPropertyPageApplied(pfrom); ReloadMyProperties(); return hr;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -