Source code of Windows XP (NT5)
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.
|
|
//+---------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation 1996-2001.
//
// File: attrprop.cpp
//
// Contents: implementation of code for adding property pages
//
//----------------------------------------------------------------------------
#include "stdafx.h"
#include "wsecmgr.h"
#include "resource.h"
#include <accctrl.h>
#include "servperm.h"
#include "stdafx.h"
#include "wsecmgr.h"
#include "snapmgr.h"
#include "util.h"
#include "UIThread.h"
#include "attr.h"
#include "aaudit.h"
#include "aenable.h"
#include "AMember.h"
#include "anumber.h"
#include "AObject.h"
#include "ARet.h"
#include "ARight.h"
#include "aservice.h"
#include "astring.h"
#include "CAudit.h"
#include "CEnable.h"
#include "CGroup.h"
#include "CName.h"
#include "CNumber.h"
#include "cobject.h"
#include "CPrivs.h"
#include "CRet.h"
#include "cservice.h"
#include "regvldlg.h"
#include "perfanal.h"
#include "applcnfg.h"
#include "wrapper.h"
#include "locdesc.h"
#include "profdesc.h"
#include "newprof.h"
#include "laudit.h"
#include "lenable.h"
#include "lret.h"
#include "lnumber.h"
#include "lstring.h"
#include "lright.h"
#include "achoice.h"
#include "cchoice.h"
#include "lchoice.h"
#include "dattrs.h"
#include "lflags.h"
#include "aflags.h"
#include "multisz.h"
#include "precpage.h"
//+--------------------------------------------------------------------------
//
// Function: CloneAttrDialog
//
// Synopsis: Create a new CAttribute object of the appropriate class for
// the type and pData passed in
//
// Arguments: [type] - The type of data the CAttribute will represent
// [pData] - More information about the CAttribute
// [bGP] - True to use CDomain* instead of CConfig* dialogs
//
//
//---------------------------------------------------------------------------
CAttribute *CloneAttrDialog(CResult *pData, BOOL bGP) { switch(pData->GetType()) { case ITEM_ANAL_SERV: return new CAnalysisService;
case ITEM_B2ON: return new CAttrAudit;
case ITEM_BON: case ITEM_BOOL: return new CAttrEnable (0);
case ITEM_FILESD: case ITEM_REGSD: return new CAttrObject;
case ITEM_DW: return new CAttrNumber (0);
case ITEM_GROUP: // PropertySheet based
break;
case ITEM_PRIVS: return new CAttrRight;
case ITEM_PROF_B2ON: return bGP ? new CDomainAudit : new CConfigAudit (0);
case ITEM_PROF_BOOL: return bGP ? new CDomainEnable : new CConfigEnable (0);
case ITEM_PROF_FILESD: case ITEM_PROF_REGSD: return bGP ? new CDomainObject : new CConfigObject (0);
case ITEM_PROF_DW: return bGP ? new CDomainNumber : new CConfigNumber (0);
case ITEM_PROF_GROUP: return bGP ? new CDomainGroup : new CConfigGroup (0);
case ITEM_PROF_PRIVS: return bGP ? new CDomainPrivs : new CConfigPrivs (0);
case ITEM_PROF_REGVALUE: switch(pData->GetID()) { case SCE_REG_DISPLAY_NUMBER: return bGP ? new CDomainRegNumber : new CConfigRegNumber (0);
case SCE_REG_DISPLAY_STRING: return bGP ? new CDomainRegString(0) : new CConfigRegString (0); //Raid #381309, 4/31/2001
case SCE_REG_DISPLAY_FLAGS: return bGP ? new CDomainRegFlags : new CConfigRegFlags (0);
case SCE_REG_DISPLAY_CHOICE: return bGP ? new CDomainChoice : new CConfigChoice (0);
case SCE_REG_DISPLAY_MULTISZ: if ( bGP ) return new CDomainRegMultiSZ; else return new CConfigRegMultiSZ;
default: return bGP ? new CDomainRegEnable : new CConfigRegEnable (0); }
case ITEM_PROF_RET: return bGP ? new CDomainRet : new CConfigRet (0);
case ITEM_PROF_SERV: return bGP ? new CDomainService : new CConfigService (0);
case ITEM_PROF_SZ: return bGP ? new CDomainName : new CConfigName (0);
case ITEM_REGVALUE: switch (pData->GetID()) { case SCE_REG_DISPLAY_NUMBER: return new CAttrRegNumber;
case SCE_REG_DISPLAY_STRING: return new CAttrRegString (0);
case SCE_REG_DISPLAY_CHOICE: return new CAttrChoice;
case SCE_REG_DISPLAY_FLAGS: return new CAttrRegFlags;
case SCE_REG_DISPLAY_MULTISZ: return new CAttrRegMultiSZ;
default: return new CAttrRegEnable; }
case ITEM_RET: return new CAttrRet (0);
case ITEM_SZ: return new CAttrString (0);
case ITEM_LOCALPOL_RET: return new CLocalPolRet;
case ITEM_LOCALPOL_SZ: return new CLocalPolString;
case ITEM_LOCALPOL_B2ON: return new CLocalPolAudit;
case ITEM_LOCALPOL_BON: case ITEM_LOCALPOL_BOOL: return new CLocalPolEnable;
case ITEM_LOCALPOL_DW: return new CLocalPolNumber;
case ITEM_LOCALPOL_PRIVS: return new CLocalPolRight;
case ITEM_LOCALPOL_REGVALUE: switch (pData->GetID()) { case SCE_REG_DISPLAY_NUMBER: return new CLocalPolRegNumber;
case SCE_REG_DISPLAY_STRING: return new CLocalPolRegString (0);
case SCE_REG_DISPLAY_MULTISZ: return new CLocalPolRegMultiSZ;
case SCE_REG_DISPLAY_CHOICE: return new CLocalPolChoice;
case SCE_REG_DISPLAY_FLAGS: return new CLocalPolRegFlags;
default: return new CLocalPolRegEnable; } }
return 0; }
BOOL IsPointerType(CResult *pData) { switch (pData->GetType()) { case ITEM_LOCALPOL_PRIVS: case ITEM_LOCALPOL_SZ: return TRUE;
case ITEM_REGVALUE: switch (pData->GetID()) { case SCE_REG_DISPLAY_STRING: case SCE_REG_DISPLAY_MULTISZ: return TRUE;
default: return FALSE; } break;
default: break; } return FALSE; }
HRESULT CSnapin::AddAttrPropPages(LPPROPERTYSHEETCALLBACK pCallback, CResult *pData, LONG_PTR handle) { ASSERT(pCallback); ASSERT(pData); if (!pCallback || !pData) { return E_POINTER; }
BOOL bGP = ( (GetModeBits() & MB_SINGLE_TEMPLATE_ONLY) == MB_SINGLE_TEMPLATE_ONLY ); BOOL bReadOnly = ( (GetModeBits() & MB_READ_ONLY) == MB_READ_ONLY ); RESULT_TYPES type = pData->GetType(); CAttribute* pAttr = NULL; HRESULT hr = S_OK;
//
// If the item has an entry from global policy then treat it as read only
//
if ((GetModeBits() & MB_LOCALSEC) == MB_LOCALSEC) { bGP = FALSE; if (type == ITEM_LOCALPOL_REGVALUE) { SCE_REGISTRY_VALUE_INFO *pRegValue = NULL; pRegValue = (PSCE_REGISTRY_VALUE_INFO)pData->GetSetting(); if ( pRegValue && pRegValue->Status != SCE_STATUS_NOT_CONFIGURED ) { bReadOnly = TRUE; } } else if (IsPointerType(pData)) { //
// If there is a setting it's a pointer; if not, it is NULL
//
if (pData->GetSetting()) { bReadOnly = TRUE; } } else if ((LONG_PTR)ULongToPtr(SCE_NO_VALUE) != pData->GetSetting()) { bReadOnly = TRUE; } } if (type == ITEM_GROUP) { CAttrMember *pMemberPage = new CAttrMember; CAttrMember *pMemberOfPage = new CAttrMember;
if ( pMemberPage && pMemberOfPage) { pMemberPage->Initialize(pData); pMemberPage->SetMemberType(GROUP_MEMBERS); pMemberPage->SetSnapin(this); pMemberPage->SetSibling(pMemberOfPage); HPROPSHEETPAGE hPage = MyCreatePropertySheetPage (&pMemberPage->m_psp); if (hPage) { hr = pCallback->AddPage (hPage); ASSERT (SUCCEEDED (hr)); // the pointer is already added to the sheet
pMemberPage = NULL; } else { // Oops, fail to create the property sheet page
hr = E_FAIL; }
if ( SUCCEEDED(hr) ) { pMemberOfPage->Initialize(pData); pMemberOfPage->SetMemberType(GROUP_MEMBER_OF); pMemberOfPage->SetSnapin(this); pMemberOfPage->SetSibling(pMemberPage); HPROPSHEETPAGE hPage = MyCreatePropertySheetPage (&pMemberOfPage->m_psp); if (hPage) { hr = pCallback->AddPage (hPage); ASSERT (SUCCEEDED (hr)); // the pointer is already added to the sheet
pMemberOfPage = NULL; } else { hr = E_FAIL; } } } else { hr = E_OUTOFMEMORY; }
if ( pMemberPage ) { delete pMemberPage; }
if ( pMemberOfPage ) { delete pMemberOfPage; } } else { pAttr = CloneAttrDialog(pData,bGP); if (pAttr) { pAttr->SetSnapin(this); pAttr->Initialize(pData); pAttr->SetReadOnly(bReadOnly); pAttr->SetTitle(pData->GetAttrPretty()); HPROPSHEETPAGE hPage = MyCreatePropertySheetPage (&pAttr->m_psp); if (hPage) { hr = pCallback->AddPage (hPage); ASSERT (SUCCEEDED (hr)); } else { //
// fail to create the property sheet
//
delete pAttr; hr = E_FAIL; } } else { hr = E_OUTOFMEMORY; } }
if ( SUCCEEDED(hr) ) { //
// In RSOP mode we need to add a precedence page too
//
if ((GetModeBits() & MB_RSOP) == MB_RSOP) { CPrecedencePage *ppp = new CPrecedencePage; if (ppp) { ppp->SetTitle(pData->GetAttrPretty()); ppp->Initialize(pData,GetWMIRsop()); HPROPSHEETPAGE hPage = MyCreatePropertySheetPage (&ppp->m_psp); if (hPage) { hr = pCallback->AddPage (hPage); ASSERT (SUCCEEDED (hr)); } else { //
// if the property sheet fails to be created, should free the buffer
//
delete ppp; hr = E_FAIL; } } else { hr = E_OUTOFMEMORY; } } }
return hr; }
HRESULT CComponentDataImpl::AddAttrPropPages(LPPROPERTYSHEETCALLBACK pCallback, CFolder *pData, LONG_PTR handle) { HRESULT hr=E_FAIL; CString strName;
ASSERT(pCallback); ASSERT(pData); if (!pCallback || !pData) { return E_POINTER; }
BOOL bReadOnly = ((GetModeBits() & MB_READ_ONLY) == MB_READ_ONLY); pData->GetDisplayName(strName,0);
CAttrObject *pAttr = new CAttrObject; if (pAttr) { pAttr->Initialize(pData,this); pAttr->SetTitle(strName); pAttr->SetReadOnly(bReadOnly); HPROPSHEETPAGE hPage = MyCreatePropertySheetPage (&pAttr->m_psp); if ( hPage ) { hr = pCallback->AddPage (hPage); ASSERT (SUCCEEDED (hr)); } else { delete pAttr; hr = E_FAIL; } } else { hr = E_OUTOFMEMORY; }
return hr; }
|