📄 warsvrsnapin.cpp
字号:
#include "stdafx.h"#include "WarServerSnapin.h"#include "WarSvrSnapin.h"#include "WarMmcNodeServices.h"#include "WarMmcNodeFtpServers.h"/////////////////////////////////////////////////////////////////////////////// CWarSvrSnapinComponentDatastatic const GUID CWarSvrSnapinGUID_NODETYPE = { 0x41806df3, 0x1de3, 0x441f, { 0xb4, 0x2c, 0x8c, 0x0, 0x43, 0x9a, 0xaf, 0x16 } };const GUID* CWarSvrStaticNode::m_NODETYPE = &CWarSvrSnapinGUID_NODETYPE;const OLECHAR* CWarSvrStaticNode::m_SZNODETYPE = OLESTR("41806DF3-1DE3-441F-B42C-8C00439AAF16");const OLECHAR* CWarSvrStaticNode::m_SZDISPLAY_NAME = OLESTR("Servers");const CLSID* CWarSvrStaticNode::m_SNAPIN_CLASSID = &CLSID_WarSvrSnapin;static const GUID WarMmcNodeServicesGUID_NODETYPE = { /* d42d6418-bdec-4ee9-b1e1-7ff9466f7e3e */ 0xd42d6418, 0xbdec, 0x4ee9, {0xb1, 0xe1, 0x7f, 0xf9, 0x46, 0x6f, 0x7e, 0x3e} };const GUID* WarMmcNodeServices::m_NODETYPE = &WarMmcNodeServicesGUID_NODETYPE;const OLECHAR* WarMmcNodeServices::m_SZNODETYPE = OLESTR("d42d6418-bdec-4ee9-b1e1-7ff9466f7e3e");const OLECHAR* WarMmcNodeServices::m_SZDISPLAY_NAME = OLESTR("Services");const CLSID* WarMmcNodeServices::m_SNAPIN_CLASSID = &CLSID_WarSvrSnapin;static const GUID WarMmcNodeAuthModulesGUID_NODETYPE = { /* 999bbe94-7114-43f1-bd29-b0a97de16a9e */ 0x999bbe94, 0x7114, 0x43f1, {0xbd, 0x29, 0xb0, 0xa9, 0x7d, 0xe1, 0x6a, 0x9e} };const GUID* WarMmcNodeAuthModules::m_NODETYPE = &WarMmcNodeAuthModulesGUID_NODETYPE;const OLECHAR* WarMmcNodeAuthModules::m_SZNODETYPE = OLESTR("999bbe94-7114-43f1-bd29-b0a97de16a9e");const OLECHAR* WarMmcNodeAuthModules::m_SZDISPLAY_NAME = OLESTR("Auth Modules");const CLSID* WarMmcNodeAuthModules::m_SNAPIN_CLASSID = &CLSID_WarSvrSnapin;static const GUID WarMmcNodeFtpServersGUID_NODETYPE = { /* a89d7de0-ba40-4227-a72f-a8e245b58af7 */ 0xa89d7de0, 0xba40, 0x4227, {0xa7, 0x2f, 0xa8, 0xe2, 0x45, 0xb5, 0x8a, 0xf7}};const GUID* WarMmcNodeFtpServers::m_NODETYPE = &WarMmcNodeFtpServersGUID_NODETYPE;const OLECHAR* WarMmcNodeFtpServers::m_SZNODETYPE = OLESTR("a89d7de0-ba40-4227-a72f-a8e245b58af7");const OLECHAR* WarMmcNodeFtpServers::m_SZDISPLAY_NAME = OLESTR("FTP server");const CLSID* WarMmcNodeFtpServers::m_SNAPIN_CLASSID = &CLSID_WarSvrSnapin;static const GUID WarMmcNodeAuthNtGUID_NODETYPE ={ /* 576e475b-15b2-4df8-88ee-b73eb2c8c554 */ 0x576e475b, 0x15b2, 0x4df8, {0x88, 0xee, 0xb7, 0x3e, 0xb2, 0xc8, 0xc5, 0x54} };const GUID* WarMmcNodeAuthNt::m_NODETYPE = &WarMmcNodeAuthNtGUID_NODETYPE;const OLECHAR* WarMmcNodeAuthNt::m_SZNODETYPE = OLESTR("576e475b-15b2-4df8-88ee-b73eb2c8c554");const OLECHAR* WarMmcNodeAuthNt::m_SZDISPLAY_NAME = OLESTR("Windows NT");const CLSID* WarMmcNodeAuthNt::m_SNAPIN_CLASSID = &CLSID_WarSvrSnapin;static const GUID WarMmcNodeNtUserGUID_NODETYPE ={ /* 1397BD0D-1185-432a-A9C6-9AD45B2563E0 */ 0x1397bd0d, 0x1185, 0x432a, { 0xa9, 0xc6, 0x9a, 0xd4, 0x5b, 0x25, 0x63, 0xe0 }};const GUID* WarMmcNodeNtUser::m_NODETYPE = &WarMmcNodeAuthNtGUID_NODETYPE;const OLECHAR* WarMmcNodeNtUser::m_SZNODETYPE = OLESTR("1397BD0D-1185-432a-A9C6-9AD45B2563E0");const OLECHAR* WarMmcNodeNtUser::m_SZDISPLAY_NAME = OLESTR("Windows NT User");const CLSID* WarMmcNodeNtUser::m_SNAPIN_CLASSID = &CLSID_WarSvrSnapin;// {52CD2923-E934-4361-87B3-B23987A01C44}static const GUID WarMmcNodeSharesGUID_NODETYPE = { 0x52cd2923, 0xe934, 0x4361, { 0x87, 0xb3, 0xb2, 0x39, 0x87, 0xa0, 0x1c, 0x44 } };const GUID* WarMmcNodeShares::m_NODETYPE = &WarMmcNodeAuthNtGUID_NODETYPE;const OLECHAR* WarMmcNodeShares::m_SZNODETYPE = OLESTR("52CD2923-E934-4361-87B3-B23987A01C44");const OLECHAR* WarMmcNodeShares::m_SZDISPLAY_NAME = OLESTR("File Shares");const CLSID* WarMmcNodeShares::m_SNAPIN_CLASSID = &CLSID_WarSvrSnapin;// {3A3EF031-A3D9-4335-9932-73085828463C}static const GUID WarMmcNodeFileShareGUID_NODETYPE = { 0x3a3ef031, 0xa3d9, 0x4335, { 0x99, 0x32, 0x73, 0x8, 0x58, 0x28, 0x46, 0x3c } };const GUID* WarMmcNodeFileShare::m_NODETYPE = &WarMmcNodeAuthNtGUID_NODETYPE;const OLECHAR* WarMmcNodeFileShare::m_SZNODETYPE = OLESTR("3A3EF031-A3D9-4335-9932-73085828463C");const OLECHAR* WarMmcNodeFileShare::m_SZDISPLAY_NAME = OLESTR("File Share");const CLSID* WarMmcNodeFileShare::m_SNAPIN_CLASSID = &CLSID_WarSvrSnapin;HRESULT CWarSvrStaticNode::GetScopePaneInfo(SCOPEDATAITEM *pScopeDataItem){ if (pScopeDataItem->mask & SDI_STR) pScopeDataItem->displayname = m_bstrDisplayName; if (pScopeDataItem->mask & SDI_IMAGE) pScopeDataItem->nImage = m_scopeDataItem.nImage; if (pScopeDataItem->mask & SDI_OPENIMAGE) pScopeDataItem->nOpenImage = m_scopeDataItem.nOpenImage; if (pScopeDataItem->mask & SDI_PARAM) pScopeDataItem->lParam = m_scopeDataItem.lParam; if (pScopeDataItem->mask & SDI_STATE ) pScopeDataItem->nState = m_scopeDataItem.nState; // TODO : Add code for SDI_CHILDREN return S_OK;}HRESULT CWarSvrStaticNode::GetResultPaneInfo(RESULTDATAITEM *pResultDataItem){ if (pResultDataItem->bScopeItem) { if (pResultDataItem->mask & RDI_STR) { pResultDataItem->str = GetResultPaneColInfo(pResultDataItem->nCol); } if (pResultDataItem->mask & RDI_IMAGE) { pResultDataItem->nImage = m_scopeDataItem.nImage; } if (pResultDataItem->mask & RDI_PARAM) { pResultDataItem->lParam = m_scopeDataItem.lParam; } return S_OK; } if (pResultDataItem->mask & RDI_STR) { pResultDataItem->str = GetResultPaneColInfo(pResultDataItem->nCol); } if (pResultDataItem->mask & RDI_IMAGE) { pResultDataItem->nImage = m_resultDataItem.nImage; } if (pResultDataItem->mask & RDI_PARAM) { pResultDataItem->lParam = m_resultDataItem.lParam; } if (pResultDataItem->mask & RDI_INDEX) { pResultDataItem->nIndex = m_resultDataItem.nIndex; } return S_OK;}HRESULT CWarSvrStaticNode::Notify( MMC_NOTIFY_TYPE event, long arg, long param, IComponentData* pComponentData, IComponent* pComponent, DATA_OBJECT_TYPES type){ // Add code to handle the different notifications. // Handle MMCN_SHOW and MMCN_EXPAND to enumerate children items. // In response to MMCN_SHOW you have to enumerate both the scope // and result pane items. // For MMCN_EXPAND you only need to enumerate the scope items // Use IConsoleNameSpace::InsertItem to insert scope pane items // Use IResultData::InsertItem to insert result pane item. HRESULT hr = E_NOTIMPL; _ASSERTE(pComponentData != NULL || pComponent != NULL); CComPtr<IConsole> spConsole; CComQIPtr<IHeaderCtrl, &IID_IHeaderCtrl> spHeader; if (pComponentData != NULL) spConsole = ((CWarSvrSnapin*)pComponentData)->m_spConsole; else { spConsole = ((CWarSvrSnapinComponent*)pComponent)->m_spConsole; spHeader = spConsole; } switch (event) { case MMCN_SHOW: { CComQIPtr<IResultData, &IID_IResultData> spResultData(spConsole); // TODO : Enumerate the result pane items hr = S_OK; break; } case MMCN_EXPAND: { CComQIPtr<IConsoleNameSpace, &IID_IConsoleNameSpace> spConsoleNameSpace(spConsole); // Enumerate installed services WarWin32Registry::keyname_list_t svr_list; try { mRegRoot.EnumKey(svr_list); for(WarWin32Registry::keyname_list_t::const_iterator P = svr_list.begin() ; P != svr_list.end() ; P++) { WarWin32Registry reg_node; reg_node.Open(HKEY_LOCAL_MACHINE, mRegRoot.GetPath(P->c_str()), KEY_ALL_ACCESS); if (reg_node.GetStrValue(WAR_WINNT_REG_CLASSID, _T("")) == war_regstr_t(WarMmcNodeServices::m_SZNODETYPE)) { SCOPEDATAITEM sdi; memset(&sdi, 0, sizeof(sdi)); sdi.mask = SDI_STR | SDI_PARAM | SDI_IMAGE | SDI_OPENIMAGE | SDI_PARENT; sdi.displayname = MMC_CALLBACK; sdi.relativeID = param; sdi.lParam = (LPARAM)new WarMmcNodeServices( reg_node.GetPath(NULL)); hr = spConsoleNameSpace->InsertItem(&sdi); } } } catch(WarException) { hr = S_FALSE; break; } hr = S_OK; break; } case MMCN_ADD_IMAGES: { // Add Images IImageList* pImageList = (IImageList*) arg; hr = E_FAIL; // Load bitmaps associated with the scope pane // and add them to the image list // Loads the default bitmaps generated by the wizard // Change as required HBITMAP hBitmap16 = LoadBitmap(_Module.GetResourceInstance(), MAKEINTRESOURCE(IDB_WARSVRSNAPIN_16)); if (hBitmap16 != NULL) { HBITMAP hBitmap32 = LoadBitmap(_Module.GetResourceInstance(), MAKEINTRESOURCE(IDB_WARSVRSNAPIN_32)); if (hBitmap32 != NULL) { hr = pImageList->ImageListSetStrip((long*)hBitmap16, (long*)hBitmap32, 0, RGB(0, 128, 128)); if (FAILED(hr)) ATLTRACE(_T("IImageList::ImageListSetStrip failed\n")); } } break; } } return hr;}LPOLESTR CWarSvrStaticNode::GetResultPaneColInfo(int nCol){ if (nCol == 0) return m_bstrDisplayName; // TODO : Return the text for other columns return OLESTR("Override GetResultPaneColInfo");}HRESULT CWarSvrSnapin::Initialize(LPUNKNOWN pUnknown){ HRESULT hr = IComponentDataImpl<CWarSvrSnapin, CWarSvrSnapinComponent >::Initialize(pUnknown); if (FAILED(hr)) return hr; CComPtr<IImageList> spImageList; if (m_spConsole->QueryScopeImageList(&spImageList) != S_OK) { ATLTRACE(_T("IConsole::QueryScopeImageList failed\n")); return E_UNEXPECTED; } // Load bitmaps associated with the scope pane // and add them to the image list // Loads the default bitmaps generated by the wizard // Change as required HBITMAP hBitmap16 = LoadBitmap(_Module.GetResourceInstance(), MAKEINTRESOURCE(IDB_WARICONS_16)); if (hBitmap16 == NULL) return S_OK; HBITMAP hBitmap32 = LoadBitmap(_Module.GetResourceInstance(), MAKEINTRESOURCE(IDB_WARICONS_32)); if (hBitmap32 == NULL) return S_OK; if (spImageList->ImageListSetStrip((long*)hBitmap16, (long*)hBitmap32, 0, RGB(0, 128, 128)) != S_OK) { ATLTRACE(_T("IImageList::ImageListSetStrip failed\n")); return E_UNEXPECTED; } return S_OK;}HRESULT CWarSvrSnapin::LoadImages(IImageList* pImageList){ HRESULT hr = E_FAIL; HBITMAP m_hSmallBmp = LoadBitmap( _Module.GetResourceInstance(), MAKEINTRESOURCE(IDB_WARICONS_16)); if (m_hSmallBmp != NULL) { HBITMAP m_hLargeBmp = LoadBitmap( _Module.GetResourceInstance(), MAKEINTRESOURCE(IDB_WARICONS_32)); if (m_hLargeBmp != NULL) { hr = pImageList->ImageListSetStrip((long*) m_hSmallBmp, (long*) m_hLargeBmp,0, RGB(0, 128, 128)); if (FAILED(hr)) ATLTRACE(_T("IImageList::ImageListSetStrip failed\n")); } DeleteObject(m_hLargeBmp); } DeleteObject(m_hSmallBmp); return hr;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -