Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

314 lines
8.5 KiB

//+---------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 2000 - 2001.
//
// File: compdata.cpp
//
// Contents:
//
// History: 07-26-2001 Hiteshr Created
//
//----------------------------------------------------------------------------
#include "headers.h"
// {1F5EEC01-1214-4d94-80C5-4BDCD2014DDD}
const GUID CLSID_RoleSnapin =
{ 0x1f5eec01, 0x1214, 0x4d94, { 0x80, 0xc5, 0x4b, 0xdc, 0xd2, 0x1, 0x4d, 0xdd } };
DEBUG_DECLARE_INSTANCE_COUNTER(CRoleComponentDataObject)
CRoleComponentDataObject::CRoleComponentDataObject()
{
TRACE_CONSTRUCTOR_EX(DEB_SNAPIN, CRoleComponentDataObject)
DEBUG_INCREMENT_INSTANCE_COUNTER(CRoleComponentDataObject)
m_columnSetList.AddTail(new CRoleDefaultColumnSet(L"---Default Column Set---"));
}
CRoleComponentDataObject::~CRoleComponentDataObject()
{
TRACE_DESTRUCTOR_EX(DEB_SNAPIN, CRoleComponentDataObject)
DEBUG_DECREMENT_INSTANCE_COUNTER(CRoleComponentDataObject)
}
STDMETHODIMP
CRoleComponentDataObject::
CompareObjects(LPDATAOBJECT lpDataObjectA, LPDATAOBJECT lpDataObjectB)
{
TRACE_METHOD_EX(DEB_SNAPIN,CRoleComponentDataObject,CompareObjects)
if(!lpDataObjectA || !lpDataObjectB)
{
ASSERT(lpDataObjectA);
ASSERT(lpDataObjectB);
}
CInternalFormatCracker ifcA, ifcB;
VERIFY(SUCCEEDED(ifcA.Extract(lpDataObjectA)));
VERIFY(SUCCEEDED(ifcB.Extract(lpDataObjectB)));
CTreeNode* pNodeA = ifcA.GetCookieAt(0);
CTreeNode* pNodeB = ifcB.GetCookieAt(0);
if(!pNodeA || !pNodeB)
{
ASSERT(pNodeA != NULL);
ASSERT(pNodeB != NULL);
return S_FALSE;
}
if(pNodeA == pNodeB)
return S_OK;
//Check if the are of same type container or leafnode
if(pNodeA->IsContainer() != pNodeB->IsContainer())
return S_FALSE;
CBaseAz* pBaseAzA = (dynamic_cast<CBaseNode*>(pNodeA))->GetBaseAzObject();
CBaseAz* pBaseAzB = (dynamic_cast<CBaseNode*>(pNodeB))->GetBaseAzObject();
ASSERT(pBaseAzA);
ASSERT(pBaseAzB);
if(CompareBaseAzObjects(pBaseAzA,pBaseAzB))
{
return S_OK;
}
return S_FALSE;
}
CRootData*
CRoleComponentDataObject::
OnCreateRootData()
{
TRACE_METHOD_EX(DEB_SNAPIN,CRoleComponentDataObject, OnCreateRootData)
CRoleRootData* pRoleRootNode = new CRoleRootData(this);
AFX_MANAGE_STATE(AfxGetStaticModuleState());
CString szSnapinName;
szSnapinName.LoadString(IDS_SNAPIN_NAME);
pRoleRootNode->SetDisplayName(szSnapinName);
return pRoleRootNode;
}
STDMETHODIMP
CRoleComponentDataObject::
CreateComponent(LPCOMPONENT* ppComponent)
{
TRACE_METHOD_EX(DEB_SNAPIN,CRoleComponentDataObject,CreateComponent)
if(!ppComponent)
{
ASSERT(FALSE);
return E_POINTER;
}
CComObject<CRoleComponentObject>* pObject;
HRESULT hr = CComObject<CRoleComponentObject>::CreateInstance(&pObject);
if(FAILED(hr))
{
DBG_OUT_HRESULT(hr);
return hr;
}
ASSERT(pObject != NULL);
//
// Store IComponentData
//
pObject->SetIComponentData(this);
hr = pObject->QueryInterface(IID_IComponent,
reinterpret_cast<void**>(ppComponent));
CHECK_HRESULT(hr);
return hr;
}
BOOL
CRoleComponentDataObject::LoadResources()
{
return
LoadContextMenuResources(CRootDataMenuHolder::GetMenuMap()) &&
LoadContextMenuResources(CAdminManagerNodeMenuHolder::GetMenuMap()) &&
LoadContextMenuResources(CApplicationNodeMenuHolder::GetMenuMap()) &&
LoadContextMenuResources(CScopeNodeMenuHolder::GetMenuMap()) &&
LoadContextMenuResources(CGroupCollectionNodeMenuHolder::GetMenuMap()) &&
LoadContextMenuResources(CRoleCollectionNodeMenuHolder::GetMenuMap()) &&
LoadContextMenuResources(CTaskCollectionNodeMenuHolder::GetMenuMap()) &&
LoadContextMenuResources(CGroupNodeMenuHolder::GetMenuMap()) &&
LoadContextMenuResources(CRoleNodeMenuHolder::GetMenuMap()) &&
LoadContextMenuResources(CTaskNodeMenuHolder::GetMenuMap()) &&
LoadContextMenuResources(COperationCollectionNodeMenuHolder::GetMenuMap()) &&
LoadContextMenuResources(CRoleDefinitionCollectionNodeMenuHolder::GetMenuMap()) &&
LoadResultHeaderResources(_DefaultHeaderStrings,N_DEFAULT_HEADER_COLS);
}
HRESULT
CRoleComponentDataObject::OnSetImages(LPIMAGELIST lpScopeImage)
{
TRACE_METHOD_EX(DEB_SNAPIN, CRoleComponentDataObject, OnSetImages)
return LoadIcons(lpScopeImage);
}
LPCWSTR
CRoleComponentDataObject::
GetHTMLHelpFileName()
{
TRACE_METHOD_EX(DEB_SNAPIN, CRoleComponentDataObject, GetHTMLHelpFileName)
Dbg(DEB_SNAPIN,"HTMLHelpFile is %ws\n", g_szHTMLHelpFileName);
return g_szHTMLHelpFileName;
}
void
CRoleComponentDataObject::
OnNodeContextHelp(CNodeList* /*pNode*/)
{
TRACE_METHOD_EX(DEB_SNAPIN,CRoleComponentDataObject,OnNodeContextHelp)
CComPtr<IDisplayHelp> spHelp;
HRESULT hr = GetConsole()->QueryInterface(IID_IDisplayHelp, (void **)&spHelp);
if (SUCCEEDED(hr))
{
CString strHelpPath = g_szLinkHTMLHelpFileName;
strHelpPath += L"::/";
strHelpPath += g_szTopHelpNodeName;
spHelp->ShowTopic((LPOLESTR)(LPCWSTR)strHelpPath);
}
}
void
CRoleComponentDataObject::
OnNodeContextHelp(CTreeNode*)
{
TRACE_METHOD_EX(DEB_SNAPIN,CRoleComponentDataObject,OnNodeContextHelp)
CComPtr<IDisplayHelp> spHelp;
HRESULT hr = GetConsole()->QueryInterface(IID_IDisplayHelp, (void **)&spHelp);
if (SUCCEEDED(hr))
{
CString strHelpPath = g_szLinkHTMLHelpFileName;
strHelpPath += L"::/";
strHelpPath += g_szTopHelpNodeName;
spHelp->ShowTopic((LPOLESTR)(LPCWSTR)strHelpPath);
}
}
void
CRoleComponentDataObject::OnTimer()
{
TRACE_METHOD_EX(DEB_SNAPIN,CRoleComponentDataObject,OnTimer)
}
void
CRoleComponentDataObject::OnTimerThread(WPARAM /*wParam*/, LPARAM /*lParam*/)
{
TRACE_METHOD_EX(DEB_SNAPIN,CRoleComponentDataObject,OnTimerThread)
}
CTimerThread*
CRoleComponentDataObject::OnCreateTimerThread()
{
TRACE_METHOD_EX(DEB_SNAPIN,CRoleComponentDataObject,OnCreateTimerThread)
return NULL;
}
CColumnSet*
CRoleComponentDataObject::GetColumnSet(LPCWSTR lpszID)
{
TRACE_METHOD_EX(DEB_SNAPIN,CRoleComponentDataObject, GetColumnSet)
return m_columnSetList.FindColumnSet(lpszID);
}
void
CBaseRoleExecContext::
Wait()
{
// The message loop lasts until we get a WM_QUIT message,
// upon which we shall return from the function.
while (TRUE)
{
DWORD result = 0;
MSG msg ;
// Read all of the messages in this next loop,
// removing each message as we read it.
while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{
// If it's a quit message
if(msg.message == WM_QUIT)
{
return;
}
else if((msg.message == WM_LBUTTONDOWN) ||
(msg.message == WM_RBUTTONDOWN) ||
(msg.message == WM_KEYDOWN))
{
//Ignore these messages while in wait
continue;
}
// Otherwise, dispatch the message.
DispatchMessage(&msg);
} // End of PeekMessage while loop.
// Wait for any message sent or posted to this queue
// or for one of the passed handles be set to signaled.
result = MsgWaitForMultipleObjects(1, &m_hEventHandle,
FALSE, INFINITE, QS_ALLINPUT);
// The result tells us the type of event we have.
if (result == (WAIT_OBJECT_0 + 1))
{
// New messages have arrived.
// Continue to the top of the always while loop to
// dispatch them and resume waiting.
continue;
}
else
{
// One of the handles became signaled.
return;
} // End of else clause.
} // End of the always while loop.
}
void CDisplayHelpFromPropPageExecContext::
Execute(LPARAM /*arg*/)
{
CComPtr<IDisplayHelp> spHelp;
HRESULT hr = m_pComponentDataObject->GetConsole()->QueryInterface(IID_IDisplayHelp, (void **)&spHelp);
if (SUCCEEDED(hr))
{
hr = spHelp->ShowTopic((LPOLESTR)(LPCWSTR)m_strHelpPath);
CHECK_HRESULT(hr);
}
}
//
//Helper Class for displaying secondary property pages from
//Existing property pages. For example on double clicking
//a member of group, display the property of member. Since
//propertysheet needs to be brought up from main thread, a
//message is posted from PropertyPage thread to Main thread.
//An instance of this class is sent as param and main
//thread calls execute on the Instance
//
void
CPropPageExecContext::Execute(LPARAM /*arg*/)
{
FindOrCreateModelessPropertySheet((CRoleComponentDataObject*)pComponentDataObject,pTreeNode);
}