|
|
//+---------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation 1996-2001.
//
// File: cobject.cpp
//
// Contents: implementation of CConfigObject
//
//----------------------------------------------------------------------------
#include "stdafx.h"
#include "wsecmgr.h"
#include "attr.h"
#include "resource.h"
#include "snapmgr.h"
#include "util.h"
#include "servperm.h"
#include "CObject.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__; #endif
/////////////////////////////////////////////////////////////////////////////
// CConfigObject dialog
CConfigObject::CConfigObject(UINT nTemplateID) : CAttribute(nTemplateID ? nTemplateID : IDD), m_pfnCreateDsPage(NULL), m_pSI(NULL), m_pNewSD(NULL), m_NewSeInfo(0), m_hwndSecurity(NULL)
{
//{{AFX_DATA_INIT(CConfigObject)
m_radConfigPrevent = 0; m_radInheritOverwrite = 0; //}}AFX_DATA_INIT
m_pHelpIDs = (DWORD_PTR)a197HelpIDs; m_uTemplateResID = IDD; }
void CConfigObject::DoDataExchange(CDataExchange* pDX) { CAttribute::DoDataExchange(pDX); //{{AFX_DATA_MAP(CConfigObject)
DDX_Radio(pDX, IDC_CONFIG, m_radConfigPrevent); DDX_Radio(pDX, IDC_INHERIT, m_radInheritOverwrite); //}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CConfigObject, CAttribute) //{{AFX_MSG_MAP(CConfigObject)
ON_BN_CLICKED(IDC_SECURITY, OnTemplateSecurity) ON_BN_CLICKED(IDC_CONFIG, OnConfig) ON_BN_CLICKED(IDC_PREVENT, OnPrevent) ON_BN_CLICKED(IDC_OVERWRITE, OnOverwriteInherit) ON_BN_CLICKED(IDC_INHERIT, OnOverwriteInherit) //}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CConfigObject message handlers
BOOL CConfigObject::OnApply() { if ( !m_bReadOnly ) { DWORD dw = 0; int status = 0;
UpdateData(TRUE); PEDITTEMPLATE pTemp = m_pData->GetBaseProfile();
switch (m_radConfigPrevent) { case 0: // config
switch(m_radInheritOverwrite) { case 0: // inherit
dw = SCE_STATUS_CHECK; break;
case 1: // overwrite
dw = SCE_STATUS_OVERWRITE; break;
default: break; } break;
case 1: // prevent
dw = SCE_STATUS_IGNORE; break;
default: break; }
PSCE_OBJECT_SECURITY pObjSec=(PSCE_OBJECT_SECURITY)(m_pData->GetID());
if ( NULL == pObjSec ) { //
// this branch is impossible
//
if ( m_pNewSD != NULL ) { LocalFree(m_pNewSD); m_pNewSD = NULL; } } else { //
// an existing object
//
pObjSec->Status = (BYTE)dw;
if ( m_pNewSD != NULL ) { if ( pObjSec->pSecurityDescriptor != m_pNewSD && pObjSec->pSecurityDescriptor != NULL ) { LocalFree(pObjSec->pSecurityDescriptor); } pObjSec->pSecurityDescriptor = m_pNewSD; m_pNewSD = NULL;
pObjSec->SeInfo = m_NewSeInfo; } m_pData->SetStatus(dw); } m_pData->Update(m_pSnapin);
m_NewSeInfo = 0; m_hwndParent = NULL;
if ( m_pSI ) { m_pSI->Release(); m_pSI = NULL; } m_pfnCreateDsPage=NULL; }
return CAttribute::OnApply(); }
void CConfigObject::OnCancel() { if ( m_pNewSD ) { LocalFree(m_pNewSD); m_pNewSD = NULL; } m_NewSeInfo = 0; m_hwndParent = NULL;
if ( m_pSI ) { m_pSI->Release(); m_pSI = NULL; } m_pfnCreateDsPage=NULL;
CAttribute::OnCancel(); }
void CConfigObject::OnTemplateSecurity() { SE_OBJECT_TYPE SeType;
if (IsWindow(m_hwndSecurity)) { ::BringWindowToTop(m_hwndSecurity); return; }
switch(m_pData->GetType()) { case ITEM_PROF_REGSD: SeType = SE_REGISTRY_KEY; break; case ITEM_PROF_FILESD: SeType = SE_FILE_OBJECT; break; default: ASSERT(FALSE); return; }
INT_PTR nRet;
if ( SE_DS_OBJECT == SeType ) {
if ( !m_pfnCreateDsPage ) { if (!g_hDsSecDll) g_hDsSecDll = LoadLibrary(TEXT("dssec.dll"));
if ( g_hDsSecDll) { m_pfnCreateDsPage = (PFNDSCREATEISECINFO)GetProcAddress(g_hDsSecDll, "DSCreateISecurityInfoObject"); } }
if ( m_pfnCreateDsPage ) { nRet= MyCreateDsSecurityPage(&m_pSI, m_pfnCreateDsPage, &m_pNewSD, &m_NewSeInfo, (LPCTSTR)(m_pData->GetAttr()), QueryReadOnly() ? SECURITY_PAGE_READ_ONLY : SECURITY_PAGE, m_hwndParent); } else nRet = -1;
} else { BOOL bContainer; if ( SE_FILE_OBJECT == SeType ) { if ( m_pData->GetID() ) { bContainer = ((PSCE_OBJECT_SECURITY)(m_pData->GetID()))->IsContainer; } else { bContainer = FALSE; } } else { bContainer = TRUE; } m_hwndSecurity = (HWND) MyCreateSecurityPage2(bContainer, &m_pNewSD, &m_NewSeInfo, (LPCTSTR)(m_pData->GetAttr()), SeType, QueryReadOnly() ? SECURITY_PAGE_READ_ONLY : SECURITY_PAGE, GetSafeHwnd(), FALSE); // not modeless
}
if (NULL == m_hwndSecurity ) { /*
BUG 147098 applies here - don't display message if this was canceled CString str; str.LoadString(IDS_CANT_ASSIGN_SECURITY); AfxMessageBox(str); */ }
}
void CConfigObject::Initialize(CResult * pData) { CAttribute::Initialize(pData);
if ( m_pSI ) { m_pSI->Release(); m_pSI = NULL; } m_pfnCreateDsPage=NULL;
m_pNewSD = NULL; m_NewSeInfo = 0;
// if (SCE_NO_VALUE == pData->GetBase()) {
if ( pData->GetID() ) {
PSCE_OBJECT_SECURITY pObject = (PSCE_OBJECT_SECURITY)(pData->GetID());
switch (pObject-> Status) { case SCE_STATUS_IGNORE: m_radConfigPrevent = 1; m_radInheritOverwrite = 0; break; case SCE_STATUS_OVERWRITE: m_radConfigPrevent = 0; m_radInheritOverwrite = 1; break; case SCE_STATUS_CHECK: m_radConfigPrevent = 0; m_radInheritOverwrite = 0; break; case SCE_STATUS_NO_AUTO_INHERIT: default: m_radConfigPrevent = 1; m_radInheritOverwrite = 0; break; }
if ( pObject->pSecurityDescriptor ) {
MyMakeSelfRelativeSD(pObject->pSecurityDescriptor, &m_pNewSD); } m_NewSeInfo = pObject->SeInfo;
} }
BOOL CConfigObject::OnInitDialog() { CAttribute::OnInitDialog();
UpdateData(FALSE); AddUserControl(IDC_OVERWRITE); AddUserControl(IDC_PREVENT); AddUserControl(IDC_INHERIT); AddUserControl(IDC_SECURITY); AddUserControl(IDC_CONFIG);
OnConfigure();
if (ITEM_PROF_REGSD == m_pData->GetType()) { CString str; str.LoadString(IDS_REGISTRY_CONFIGURE); SetDlgItemText(IDC_CONFIG,str); str.LoadString(IDS_REGISTRY_APPLY); SetDlgItemText(IDC_OVERWRITE,str); str.LoadString(IDS_REGISTRY_INHERIT); SetDlgItemText(IDC_INHERIT,str); str.LoadString(IDS_REGISTRY_PREVENT); SetDlgItemText(IDC_PREVENT,str); } if (QueryReadOnly()) { CString str; str.LoadString(IDS_VIEW_SECURITY); SetDlgItemText(IDC_SECURITY,str); } if (m_bConfigure) { if (0 == m_radConfigPrevent) { OnConfig(); } else { OnPrevent(); } } return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CConfigObject::OnConfig() { CWnd *pRadio = 0;
int privValue = m_radConfigPrevent; //Raid #478746, Yanggao, 10/10/2001
UpdateData(); if (m_bConfigure && !QueryReadOnly()) { pRadio = GetDlgItem(IDC_INHERIT); pRadio->EnableWindow(TRUE); pRadio = GetDlgItem(IDC_OVERWRITE); pRadio->EnableWindow(TRUE); pRadio = GetDlgItem(IDC_SECURITY); //Raid #467312, Yang Gao
if( pRadio ) pRadio->EnableWindow(TRUE); if(m_radConfigPrevent != privValue) //Raid #478746, Yanggao, 10/10/2001
{ SetModified(TRUE); } } }
void CConfigObject::OnPrevent() { CWnd *pRadio = GetDlgItem(IDC_INHERIT); pRadio->EnableWindow(FALSE); pRadio = GetDlgItem(IDC_OVERWRITE); pRadio->EnableWindow(FALSE); pRadio = GetDlgItem(IDC_SECURITY); //Raid #467312, Yang Gao
if( pRadio ) pRadio->EnableWindow(FALSE);
int privValue = m_radConfigPrevent; //Raid #478746, Yanggao, 10/10/2001
UpdateData(); if(m_radConfigPrevent != privValue) { SetModified(TRUE); }
}
void CConfigObject::OnOverwriteInherit() //Raid #478746, Yanggao, 10/10/2001
{ int privValue = m_radInheritOverwrite; UpdateData(); if(m_radInheritOverwrite != privValue) { SetModified(TRUE); }
}
void CConfigObject::EnableUserControls( BOOL bEnable ) { CAttribute::EnableUserControls(bEnable); //
// IDC_SECURITY needs to be available even in read only
// mode so that the security page can be viewed.
//
// The page itself will be read only if necessary
//
if (QueryReadOnly() && bEnable) { CWnd *wnd = GetDlgItem(IDC_SECURITY); if (wnd) { wnd->EnableWindow(TRUE); } } }
|