|
|
//+--------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1994 - 2001.
//
// File: delobjs.cpp
//
// Contents: Functions for handling the deletion of template objects
//
//---------------------------------------------------------------------------
#include "stdafx.h"
#include "afxdlgs.h"
#include "cookie.h"
#include "snapmgr.h"
#include "wrapper.h"
#include "util.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__; #endif
HRESULT CSnapin::OnDeleteObjects( LPDATAOBJECT pDataObj, DATA_OBJECT_TYPES cctType, MMC_COOKIE cookie, LPARAM arg, LPARAM param) {
if ( 0 == cookie) return S_OK;
if (NULL == pDataObj) return S_OK;
INTERNAL *pAllInternals, *pInternal; pAllInternals = ExtractInternalFormat( pDataObj );
//
// Find out if this is a mutli select item.
//
int iCnt = 1; pInternal = pAllInternals;
if(!pInternal) return S_OK;
if(pAllInternals && pAllInternals->m_cookie == (MMC_COOKIE)MMC_MULTI_SELECT_COOKIE) { pInternal = pAllInternals; iCnt = (int)pInternal->m_type; pInternal++; }
CFolder *pFolder = m_pSelectedFolder; BOOL bAsk = TRUE;
while( iCnt-- ){ cookie = pInternal->m_cookie; cctType = pInternal->m_type;
if ( cctType == CCT_RESULT ) { CResult* pResult = (CResult *)cookie;
RESULT_TYPES rsltType = pResult->GetType();
if ( rsltType == ITEM_PROF_GROUP || rsltType == ITEM_PROF_REGSD || rsltType == ITEM_PROF_FILESD ) {
if(bAsk ){ CString str,strFmt;
//
// The first cast asks the users if they wish to delete all selected items.
// the second case asks to delete one file.
//
if(bAsk && iCnt > 1 ){ str.LoadString( IDS_DELETE_ALL_ITEMS); } else { strFmt.LoadString(IDS_QUERY_DELETE); str.Format(strFmt,pResult->GetAttr()); }
//
// Ask the question. We only want to ask the question once, so set
// bAsk to false so that we neve enter this block again.
//
if ( IDNO == AfxMessageBox((LPCTSTR)str, MB_YESNO, 0) ) { iCnt = 0; continue; } bAsk = FALSE; }
//
// free memory associated with the item
//
BOOL bDelete=FALSE;
TRACE(_T("CSnapin::OnDeleteObjects-pResult(%x)\n"),pResult);
if ( rsltType == ITEM_PROF_GROUP ) {
PSCE_GROUP_MEMBERSHIP pGroup, pParentGrp; PEDITTEMPLATE pTemplate; //
// delete this group from the template
//
pTemplate = pResult->GetBaseProfile();
if ( pResult->GetBase() != 0 && pTemplate && pTemplate->pTemplate && pTemplate->pTemplate->pGroupMembership ) {
for ( pGroup=pTemplate->pTemplate->pGroupMembership, pParentGrp=NULL; pGroup != NULL; pParentGrp=pGroup, pGroup=pGroup->Next ) {
if ( pResult->GetBase() == (LONG_PTR)pGroup ) { //
// remove this node from the list
//
if ( pParentGrp ) { pParentGrp->Next = pGroup->Next; } else { pTemplate->pTemplate->pGroupMembership = pGroup->Next; } pGroup->Next = NULL; TRACE(_T("CSnapin::OnDeleteObjects-pGroup(%x)\n"),pGroup); //
// free the node
//
if ( pGroup ) { SceFreeMemory((PVOID)pGroup, SCE_STRUCT_GROUP); } break; } } } if ( pTemplate ) { (void)pTemplate->SetDirty(AREA_GROUP_MEMBERSHIP); }
bDelete = TRUE;
} else if ( rsltType == ITEM_PROF_REGSD || rsltType == ITEM_PROF_FILESD ) {
PSCE_OBJECT_SECURITY pObject; PSCE_OBJECT_ARRAY poa; DWORD i,j; PEDITTEMPLATE pTemplate; AREA_INFORMATION Area;
pObject = (PSCE_OBJECT_SECURITY)(pResult->GetID()); pTemplate = pResult->GetBaseProfile();
if ( rsltType == ITEM_PROF_REGSD ) { poa = pTemplate->pTemplate->pRegistryKeys.pAllNodes; Area = AREA_REGISTRY_SECURITY; } else if ( rsltType == ITEM_PROF_FILESD ) { poa = pTemplate->pTemplate->pFiles.pAllNodes; Area = AREA_FILE_SECURITY; } else { poa = pTemplate->pTemplate->pDsObjects.pAllNodes; Area = AREA_DS_OBJECTS; }
if ( pResult->GetID() != 0 && pTemplate && pTemplate->pTemplate && poa ) {
i=0; while ( i < poa->Count && (pResult->GetID() != (LONG_PTR)(poa->pObjectArray[i])) ) i++;
if ( i < poa->Count ) { //
// remove this node from the array, but the arry won't be reallocated
//
for ( j=i+1; j<poa->Count; j++ ) { poa->pObjectArray[j-1] = poa->pObjectArray[j]; } poa->pObjectArray[poa->Count-1] = NULL;
poa->Count--; //
// free the node
//
TRACE(_T("CSnapin::OnDeleteObjects-pObject(%x)\n"),pObject); if ( pObject ) { if ( pObject->Name != NULL ) LocalFree( pObject->Name );
if ( pObject->pSecurityDescriptor != NULL ) LocalFree(pObject->pSecurityDescriptor);
LocalFree( pObject ); } } } if ( pTemplate ) { (void)pTemplate->SetDirty(Area); }
bDelete = TRUE; } if ( bDelete ) { //
// delete from the result pane
//
HRESULTITEM hItem = NULL; if(m_pResult->FindItemByLParam( (LPARAM)pResult, &hItem) == S_OK){ m_pResult->DeleteItem(hItem, 0); } //
// delete the item from result list and free the buffer
//
POSITION pos=NULL;
//if ( FindResult((long)cookie, &pos) ) {
// if ( pos ) {
if (m_pSelectedFolder->RemoveResultItem( m_resultItemHandle, pResult ) == ERROR_SUCCESS) {
//
// delete the node
//
delete pResult; }
//
// Notify any other views to also delete the item
//
m_pConsole->UpdateAllViews((LPDATAOBJECT)this, (LONG_PTR)pResult, UAV_RESULTITEM_REMOVE); } } } pInternal++; }
if( pAllInternals ) { FREE_INTERNAL(pAllInternals); } return S_OK; }
CResult* CSnapin::FindResult(MMC_COOKIE cookie, POSITION* thePos) { POSITION pos = NULL; //m_resultItemList.GetHeadPosition();
POSITION curPos; CResult* pResult = NULL;
if(!m_pSelectedFolder || !m_resultItemHandle) { return NULL; }
do { curPos = pos; if( m_pSelectedFolder->GetResultItem( m_resultItemHandle, pos, &pResult) != ERROR_SUCCESS ) { break; }
// pos is already updated to the next item after this call
//pResult = m_resultItemList.GetNext(pos);
// how to compare result item correctly ?
// for now, let's compare the pointer address.
if ((MMC_COOKIE)pResult == cookie) { if ( thePos ) { *thePos = curPos; }
return pResult; } } while( pos );
if ( thePos ) *thePos = NULL;
return NULL; }
void OnDeleteHelper(CRegKey& regkeySCE,CString tmpstr) { //
// replace the "\" with "/" because registry does not take "\" in a single key
//
int npos = tmpstr.Find(L'\\'); while (npos != -1) { *(tmpstr.GetBuffer(1)+npos) = L'/'; npos = tmpstr.Find(L'\\'); } regkeySCE.DeleteSubKey(tmpstr);
regkeySCE.Close(); }
HRESULT CComponentDataImpl::OnDelete(LPDATAOBJECT lpDataObject, LPARAM arg, LPARAM param) { ASSERT(lpDataObject); AFX_MANAGE_STATE(AfxGetStaticModuleState( ));
if ( lpDataObject == NULL ) { return S_OK; }
HRESULT hr = S_OK;
INTERNAL* pInternal = ExtractInternalFormat(lpDataObject);
if ( pInternal ) { MMC_COOKIE cookie = pInternal->m_cookie;
CFolder* pFolder = (CFolder *)cookie; FOLDER_TYPES fldType = pFolder->GetType();
if ( fldType == LOCATIONS || fldType == PROFILE ) {
CString str; str.Format(IDS_DELETE_CONFIRM,pFolder->GetName() );
if ( IDYES == AfxMessageBox((LPCTSTR)str, MB_YESNO, 0) ) { //
// delete the nodes and all related children info
//
if ( fldType == PROFILE ) { if (CAttribute::m_nDialogs > 0) { CString str; AfxFormatString1(str,IDS_CLOSE_PAGES,pFolder->GetName()); AfxMessageBox(str,MB_OK); hr = S_FALSE; } else { //
// delete a single inf file
//
DeleteFile(pFolder->GetInfFile());
hr = DeleteOneTemplateNodes(cookie); }
} else { //
// delete a registry path from SCE
//
CRegKey regkeySCE; CString tmpstr; tmpstr.LoadString(IDS_TEMPLATE_LOCATION_KEY); LONG lRes;
lRes = regkeySCE.Open(HKEY_LOCAL_MACHINE, tmpstr); if (lRes == ERROR_SUCCESS) { OnDeleteHelper(regkeySCE,pFolder->GetName()); } //
// Bug 375324: Delete from HKCU as well as HKLM
//
lRes = regkeySCE.Open(HKEY_CURRENT_USER, tmpstr); if (lRes == ERROR_SUCCESS) { OnDeleteHelper(regkeySCE,pFolder->GetName()); }
MMC_COOKIE FindCookie=FALSE; HSCOPEITEM pItemChild;
pItemChild = NULL; hr = m_pScope->GetChildItem(pFolder->GetScopeItem()->ID, &pItemChild, &FindCookie); //
// find a child item
//
while ( pItemChild ) { if ( FindCookie ) { //
// find a template, delete it
//
DeleteOneTemplateNodes(FindCookie); }
// get next pointer
pItemChild = NULL; FindCookie = FALSE; hr = m_pScope->GetChildItem( pFolder->GetScopeItem()->ID, &pItemChild, &FindCookie);
} //
// delete this location node
//
DeleteThisNode(pFolder);
}
} } FREE_INTERNAL(pInternal); }
return hr; }
HRESULT CComponentDataImpl::DeleteOneTemplateNodes(MMC_COOKIE cookie) {
if ( !cookie ) { return S_OK; }
CFolder *pFolder = (CFolder *)cookie;
//
// delete the template info first, this will delete handles
// associated with any extension services
//
if ( pFolder->GetInfFile() ) {
DeleteTemplate(pFolder->GetInfFile());
} //
// delete the scope items and m_scopeItemList (for all children)
//
DeleteChildrenUnderNode(pFolder);
//
// delete this location node
//
DeleteThisNode(pFolder);
return S_OK;
}
void CComponentDataImpl::DeleteTemplate(CString infFile) {
PEDITTEMPLATE pTemplateInfo = NULL;
CString stri = infFile; stri.MakeLower();
if ( m_Templates.Lookup(stri, pTemplateInfo) ) {
m_Templates.RemoveKey(stri);
if ( pTemplateInfo ) {
if ( pTemplateInfo->pTemplate ) SceFreeProfileMemory(pTemplateInfo->pTemplate);
delete pTemplateInfo; } } }
void CSnapin::CreateProfilePolicyResultList(MMC_COOKIE cookie, FOLDER_TYPES type, PEDITTEMPLATE pSceInfo, LPDATAOBJECT pDataObj) { if ( !pSceInfo ) { return; }
bool bVerify=false; UINT i; DWORD curVal; UINT IdsMax[]={IDS_SYS_LOG_MAX, IDS_SEC_LOG_MAX, IDS_APP_LOG_MAX}; UINT IdsRet[]={IDS_SYS_LOG_RET, IDS_SEC_LOG_RET, IDS_APP_LOG_RET}; UINT IdsDays[]={IDS_SYS_LOG_DAYS, IDS_SEC_LOG_DAYS, IDS_APP_LOG_DAYS}; UINT IdsGuest[]={IDS_SYS_LOG_GUEST, IDS_SEC_LOG_GUEST, IDS_APP_LOG_GUEST};
switch ( type ) { case POLICY_PASSWORD:
// L"Maximum passage age", L"Days"
AddResultItem(IDS_MAX_PAS_AGE, SCE_NO_VALUE, pSceInfo->pTemplate->MaximumPasswordAge, ITEM_PROF_DW, -1, cookie, bVerify,pSceInfo,pDataObj);
// L"Minimum passage age", L"Days"
AddResultItem(IDS_MIN_PAS_AGE, SCE_NO_VALUE, pSceInfo->pTemplate->MinimumPasswordAge, ITEM_PROF_DW, -1, cookie, bVerify,pSceInfo,pDataObj);
// L"Minimum passage length", L"Characters"
AddResultItem(IDS_MIN_PAS_LEN, SCE_NO_VALUE, pSceInfo->pTemplate->MinimumPasswordLength, ITEM_PROF_DW, -1, cookie, bVerify,pSceInfo,pDataObj);
// L"Password history size", L"Passwords"
AddResultItem(IDS_PAS_UNIQUENESS, SCE_NO_VALUE, pSceInfo->pTemplate->PasswordHistorySize, ITEM_PROF_DW, -1, cookie, bVerify,pSceInfo,pDataObj);
// L"Password complexity", L""
AddResultItem(IDS_PAS_COMPLEX, SCE_NO_VALUE, pSceInfo->pTemplate->PasswordComplexity, ITEM_PROF_BOOL, -1, cookie, bVerify,pSceInfo,pDataObj);
// NT5 new flag
// L"Clear Text Password", L""
AddResultItem(IDS_CLEAR_PASSWORD, SCE_NO_VALUE, pSceInfo->pTemplate->ClearTextPassword, ITEM_PROF_BOOL, -1, cookie, bVerify,pSceInfo,pDataObj);
#if defined(USE_REQ_LOGON_ITEM)
// L"Require logon to change password", L""
AddResultItem(IDS_REQ_LOGON, SCE_NO_VALUE, pSceInfo->pTemplate->RequireLogonToChangePassword, ITEM_PROF_BOOL, -1, cookie, bVerify,pSceInfo,pDataObj);
#endif
break;
case POLICY_KERBEROS: if (!VerifyKerberosInfo(pSceInfo->pTemplate)) { AddResultItem(IDS_CANT_DISPLAY_ERROR_OOM,NULL,NULL,ITEM_OTHER,-1,cookie); break; } AddResultItem(IDS_KERBEROS_MAX_SERVICE,SCE_NO_VALUE, pSceInfo->pTemplate->pKerberosInfo->MaxServiceAge, ITEM_PROF_DW,-1,cookie,bVerify,pSceInfo,pDataObj); AddResultItem(IDS_KERBEROS_MAX_CLOCK,SCE_NO_VALUE, pSceInfo->pTemplate->pKerberosInfo->MaxClockSkew, ITEM_PROF_DW,-1,cookie,bVerify,pSceInfo,pDataObj); AddResultItem(IDS_KERBEROS_RENEWAL,SCE_NO_VALUE, pSceInfo->pTemplate->pKerberosInfo->MaxRenewAge, ITEM_PROF_DW,-1,cookie,bVerify,pSceInfo,pDataObj); AddResultItem(IDS_KERBEROS_MAX_AGE,SCE_NO_VALUE, pSceInfo->pTemplate->pKerberosInfo->MaxTicketAge, ITEM_PROF_DW,-1,cookie,bVerify,pSceInfo,pDataObj); AddResultItem(IDS_KERBEROS_VALIDATE_CLIENT,SCE_NO_VALUE, pSceInfo->pTemplate->pKerberosInfo->TicketValidateClient, ITEM_PROF_BOOL,-1,cookie,bVerify,pSceInfo,pDataObj); break;
case POLICY_LOCKOUT:
// L"Account lockout count", L"Attempts"
AddResultItem(IDS_LOCK_COUNT, SCE_NO_VALUE, pSceInfo->pTemplate->LockoutBadCount, ITEM_PROF_DW, -1, cookie, bVerify,pSceInfo,pDataObj);
// L"Reset lockout count after", L"Minutes"
AddResultItem(IDS_LOCK_RESET_COUNT, SCE_NO_VALUE, pSceInfo->pTemplate->ResetLockoutCount, ITEM_PROF_DW, -1, cookie, bVerify,pSceInfo,pDataObj);
// L"Lockout duration", L"Minutes"
AddResultItem(IDS_LOCK_DURATION, SCE_NO_VALUE, pSceInfo->pTemplate->LockoutDuration, ITEM_PROF_DW, -1, cookie, bVerify,pSceInfo,pDataObj);
break;
case POLICY_AUDIT:
//
// Event auditing
//
// if ( pSceInfo->pTemplate->EventAuditingOnOff)
// curVal = 1;
// else
// curVal = 0;
// L"Event Auditing Mode",
// AddResultItem(IDS_EVENT_ON, SCE_NO_VALUE,
// pSceInfo->pTemplate->EventAuditingOnOff, ITEM_PROF_BON, -1, cookie, bVerify,pSceInfo,pDataObj);
// L"Audit system events"
AddResultItem(IDS_SYSTEM_EVENT, SCE_NO_VALUE, pSceInfo->pTemplate->AuditSystemEvents, ITEM_PROF_B2ON, -1, cookie, bVerify,pSceInfo,pDataObj);
// L"Audit logon events"
AddResultItem(IDS_LOGON_EVENT, SCE_NO_VALUE, pSceInfo->pTemplate->AuditLogonEvents, ITEM_PROF_B2ON, -1, cookie, bVerify,pSceInfo,pDataObj);
// L"Audit Object Access"
AddResultItem(IDS_OBJECT_ACCESS, SCE_NO_VALUE, pSceInfo->pTemplate->AuditObjectAccess, ITEM_PROF_B2ON, -1, cookie, bVerify,pSceInfo,pDataObj);
// L"Audit Privilege Use"
AddResultItem(IDS_PRIVILEGE_USE, SCE_NO_VALUE, pSceInfo->pTemplate->AuditPrivilegeUse, ITEM_PROF_B2ON, -1, cookie, bVerify,pSceInfo,pDataObj);
// L"Audit policy change"
AddResultItem(IDS_POLICY_CHANGE, SCE_NO_VALUE, pSceInfo->pTemplate->AuditPolicyChange, ITEM_PROF_B2ON, -1, cookie, bVerify,pSceInfo,pDataObj);
// L"Audit Account Manage"
AddResultItem(IDS_ACCOUNT_MANAGE, SCE_NO_VALUE, pSceInfo->pTemplate->AuditAccountManage, ITEM_PROF_B2ON, -1, cookie, bVerify,pSceInfo,pDataObj);
// L"Audit process tracking"
AddResultItem(IDS_PROCESS_TRACK, SCE_NO_VALUE, pSceInfo->pTemplate->AuditProcessTracking, ITEM_PROF_B2ON, -1, cookie, bVerify,pSceInfo,pDataObj);
// L"Audit directory service access"
AddResultItem(IDS_DIRECTORY_ACCESS, SCE_NO_VALUE, pSceInfo->pTemplate->AuditDSAccess, ITEM_PROF_B2ON, -1, cookie, bVerify,pSceInfo,pDataObj);
// L"Audit Account Logon"
AddResultItem(IDS_ACCOUNT_LOGON, SCE_NO_VALUE, pSceInfo->pTemplate->AuditAccountLogon, ITEM_PROF_B2ON, -1, cookie, bVerify,pSceInfo,pDataObj);
break;
case POLICY_OTHER:
//
// Account Logon category
//
// L"Force logoff when logon hour expire", L""
AddResultItem(IDS_FORCE_LOGOFF, SCE_NO_VALUE, pSceInfo->pTemplate->ForceLogoffWhenHourExpire, ITEM_PROF_BOOL, -1, cookie, bVerify,pSceInfo,pDataObj);
// L"Accounts: Administrator account status", L""
AddResultItem(IDS_ENABLE_ADMIN, SCE_NO_VALUE, pSceInfo->pTemplate->EnableAdminAccount, ITEM_PROF_BOOL, -1, cookie, bVerify,pSceInfo,pDataObj);
// L"Accounts: Guest account status", L""
AddResultItem(IDS_ENABLE_GUEST, SCE_NO_VALUE, pSceInfo->pTemplate->EnableGuestAccount, ITEM_PROF_BOOL, -1, cookie, bVerify,pSceInfo,pDataObj);
// L"New Administrator account name"
AddResultItem(IDS_NEW_ADMIN, 0, (LONG_PTR)(LPCTSTR)pSceInfo->pTemplate->NewAdministratorName, ITEM_PROF_SZ, -1, cookie,bVerify,pSceInfo,pDataObj);
// L"New Guest account name"
AddResultItem(IDS_NEW_GUEST, NULL, (LONG_PTR)(LPCTSTR)pSceInfo->pTemplate->NewGuestName, ITEM_PROF_SZ, -1, cookie,bVerify,pSceInfo,pDataObj);
// L"Network access: Allow anonymous SID/Name translation"
AddResultItem(IDS_LSA_ANON_LOOKUP, SCE_NO_VALUE, pSceInfo->pTemplate->LSAAnonymousNameLookup, ITEM_PROF_BOOL, -1, cookie, bVerify,pSceInfo,pDataObj);
CreateProfileRegValueList(cookie, pSceInfo, pDataObj);
break;
case POLICY_LOG: //
// Event Log setting
//
for ( i=0; i<3; i++) {
// L"... Log Maximum Size", L"KBytes"
AddResultItem(IdsMax[i], SCE_NO_VALUE, pSceInfo->pTemplate->MaximumLogSize[i], ITEM_PROF_DW, -1, cookie, bVerify,pSceInfo,pDataObj);
// L"... Log Retention Method",
AddResultItem(IdsRet[i], SCE_NO_VALUE, pSceInfo->pTemplate->AuditLogRetentionPeriod[i], ITEM_PROF_RET, -1, cookie, bVerify,pSceInfo,pDataObj);
//
// AuditLogRetentionPeriod has already been interpreted by the
// SCE engine into the RetentionDays setting. So, the RSOP UI
// should display RetentionDays if it exists in the WMI db.
//
// if ( pSceInfo->pTemplate->AuditLogRetentionPeriod[i] == 1) {
// curVal = pSceInfo->pTemplate->RetentionDays[i];
// } else {
// curVal = SCE_NO_VALUE;
// }
// L"... Log Retention days", "days"
// AddResultItem(IdsDays[i], SCE_NO_VALUE, curVal, ITEM_PROF_DW, -1, cookie, bVerify,pSceInfo,pDataObj);
AddResultItem(IdsDays[i], SCE_NO_VALUE, pSceInfo->pTemplate->RetentionDays[i], ITEM_PROF_DW, -1, cookie, bVerify,pSceInfo,pDataObj);
// L"RestrictGuestAccess", L""
AddResultItem(IdsGuest[i], SCE_NO_VALUE, pSceInfo->pTemplate->RestrictGuestAccess[i], ITEM_PROF_BOOL, -1, cookie, bVerify,pSceInfo,pDataObj); }
break; }
}
void CSnapin::CreateAnalysisPolicyResultList(MMC_COOKIE cookie, FOLDER_TYPES type, PEDITTEMPLATE pSceInfo, PEDITTEMPLATE pBase, LPDATAOBJECT pDataObj ) { if ( !pSceInfo || !pBase ) { AddResultItem(IDS_ERROR_NO_ANALYSIS_INFO,NULL,NULL,ITEM_OTHER,-1,cookie); return; }
bool bVerify=true; UINT i; UINT IdsMax[]={IDS_SYS_LOG_MAX, IDS_SEC_LOG_MAX, IDS_APP_LOG_MAX}; UINT IdsRet[]={IDS_SYS_LOG_RET, IDS_SEC_LOG_RET, IDS_APP_LOG_RET}; UINT IdsDays[]={IDS_SYS_LOG_DAYS, IDS_SEC_LOG_DAYS, IDS_APP_LOG_DAYS}; UINT IdsGuest[]={IDS_SYS_LOG_GUEST, IDS_SEC_LOG_GUEST, IDS_APP_LOG_GUEST};
DWORD status; LONG_PTR setting;
switch ( type ) { case POLICY_PASSWORD_ANALYSIS: //
// password category
//
// L"Maximum passage age", L"Days"
AddResultItem(IDS_MAX_PAS_AGE, pSceInfo->pTemplate->MaximumPasswordAge, pBase->pTemplate->MaximumPasswordAge, ITEM_DW, 1, cookie, bVerify, pBase, //The template to save this attribute in
pDataObj); //The data object for the scope note who owns the result pane
// L"Minimum passage age", L"Days"
AddResultItem(IDS_MIN_PAS_AGE, pSceInfo->pTemplate->MinimumPasswordAge, pBase->pTemplate->MinimumPasswordAge, ITEM_DW, 1, cookie, bVerify, pBase, //The template to save this attribute in
pDataObj); //The data object for the scope note who owns the result pane
// L"Minimum passage length", L"Characters"
AddResultItem(IDS_MIN_PAS_LEN, pSceInfo->pTemplate->MinimumPasswordLength, pBase->pTemplate->MinimumPasswordLength, ITEM_DW, 1, cookie, bVerify, pBase, //The template to save this attribute in
pDataObj); //The data object for the scope note who owns the result pane
// L"Password history size", L"Passwords"
AddResultItem(IDS_PAS_UNIQUENESS, pSceInfo->pTemplate->PasswordHistorySize, pBase->pTemplate->PasswordHistorySize, ITEM_DW, 1, cookie, bVerify, pBase, //The template to save this attribute in
pDataObj); //The data object for the scope note who owns the result pane
// L"Password complexity", L""
AddResultItem(IDS_PAS_COMPLEX, pSceInfo->pTemplate->PasswordComplexity, pBase->pTemplate->PasswordComplexity, ITEM_BOOL, 1, cookie, bVerify, pBase, //The template to save this attribute in
pDataObj); //The data object for the scope note who owns the result pane
// L"Clear Text Password", L""
AddResultItem(IDS_CLEAR_PASSWORD, pSceInfo->pTemplate->ClearTextPassword, pBase->pTemplate->ClearTextPassword, ITEM_BOOL, 1, cookie, bVerify, pBase, //The template to save this attribute in
pDataObj); //The data object for the scope note who owns the result pane
#if defined(USE_REQ_LOGON_ITEM)
// L"Require logon to change password", L""
AddResultItem(IDS_REQ_LOGON, pSceInfo->pTemplate->RequireLogonToChangePassword, pBase->pTemplate->RequireLogonToChangePassword, ITEM_BOOL, 1, cookie, bVerify, pBase, //The template to save this attribute in
pDataObj); //The data object for the scope note who owns the result pane
#endif
break; case POLICY_KERBEROS_ANALYSIS: if (!VerifyKerberosInfo(pSceInfo->pTemplate) || !VerifyKerberosInfo(pBase->pTemplate)) { AddResultItem(IDS_CANT_DISPLAY_ERROR_OOM,NULL,NULL,ITEM_OTHER,-1,cookie); break; } AddResultItem(IDS_KERBEROS_MAX_SERVICE, pSceInfo->pTemplate->pKerberosInfo->MaxServiceAge, pBase->pTemplate->pKerberosInfo->MaxServiceAge, ITEM_DW,-1,cookie,bVerify, pBase, //The template to save this attribute in
pDataObj); //The data object for the scope note who owns the result pane
AddResultItem(IDS_KERBEROS_MAX_CLOCK, pSceInfo->pTemplate->pKerberosInfo->MaxClockSkew, pBase->pTemplate->pKerberosInfo->MaxClockSkew, ITEM_DW,-1,cookie,bVerify, pBase, //The template to save this attribute in
pDataObj); //The data object for the scope note who owns the result pane
AddResultItem(IDS_KERBEROS_VALIDATE_CLIENT, pSceInfo->pTemplate->pKerberosInfo->TicketValidateClient, pBase->pTemplate->pKerberosInfo->TicketValidateClient, ITEM_BOOL,-1,cookie,bVerify, pBase, //The template to save this attribute in
pDataObj); //The data object for the scope note who owns the result pane
AddResultItem(IDS_KERBEROS_RENEWAL, pSceInfo->pTemplate->pKerberosInfo->MaxRenewAge, pBase->pTemplate->pKerberosInfo->MaxRenewAge, ITEM_DW,-1,cookie,bVerify, pBase, //The template to save this attribute in
pDataObj); //The data object for the scope note who owns the result pane
AddResultItem(IDS_KERBEROS_MAX_AGE, pSceInfo->pTemplate->pKerberosInfo->MaxTicketAge, pBase->pTemplate->pKerberosInfo->MaxTicketAge, ITEM_DW,-1,cookie,bVerify, pBase, //The template to save this attribute in
pDataObj); //The data object for the scope note who owns the result pane
break;
case POLICY_LOCKOUT_ANALYSIS: //
// Account Lockout category
//
// L"Account lockout count", L"Attempts"
AddResultItem(IDS_LOCK_COUNT, pSceInfo->pTemplate->LockoutBadCount, pBase->pTemplate->LockoutBadCount, ITEM_DW, 1, cookie, bVerify, pBase, //The template to save this attribute in
pDataObj); //The data object for the scope note who owns the result pane
// L"Reset lockout count after", L"Minutes"
AddResultItem(IDS_LOCK_RESET_COUNT, pSceInfo->pTemplate->ResetLockoutCount, pBase->pTemplate->ResetLockoutCount, ITEM_DW, 1, cookie, bVerify, pBase, //The template to save this attribute in
pDataObj); //The data object for the scope note who owns the result pane
// L"Lockout duration", L"Minutes"
AddResultItem(IDS_LOCK_DURATION, pSceInfo->pTemplate->LockoutDuration, pBase->pTemplate->LockoutDuration, ITEM_DW, 1, cookie, bVerify, pBase, //The template to save this attribute in
pDataObj); //The data object for the scope note who owns the result pane
break;
case POLICY_AUDIT_ANALYSIS: //
// Event auditing
//
// L"Event Auditing Mode",
// AddResultItem(IDS_EVENT_ON, pSceInfo->pTemplate->EventAuditingOnOff,
// pBase->pTemplate->EventAuditingOnOff, ITEM_BON, 1, cookie, bVerify);
// L"Audit system events"
AddResultItem(IDS_SYSTEM_EVENT, pSceInfo->pTemplate->AuditSystemEvents, pBase->pTemplate->AuditSystemEvents, ITEM_B2ON, 1, cookie, bVerify, pBase, //The template to save this attribute in
pDataObj); //The data object for the scope note who owns the result pane
// L"Audit logon events"
AddResultItem(IDS_LOGON_EVENT, pSceInfo->pTemplate->AuditLogonEvents, pBase->pTemplate->AuditLogonEvents, ITEM_B2ON, 1, cookie, bVerify, pBase, //The template to save this attribute in
pDataObj); //The data object for the scope note who owns the result pane
// L"Audit Object Access"
AddResultItem(IDS_OBJECT_ACCESS, pSceInfo->pTemplate->AuditObjectAccess, pBase->pTemplate->AuditObjectAccess, ITEM_B2ON, 1, cookie, bVerify, pBase, //The template to save this attribute in
pDataObj); //The data object for the scope note who owns the result pane
// L"Audit Privilege Use"
AddResultItem(IDS_PRIVILEGE_USE, pSceInfo->pTemplate->AuditPrivilegeUse, pBase->pTemplate->AuditPrivilegeUse, ITEM_B2ON, 1, cookie, bVerify, pBase, //The template to save this attribute in
pDataObj); //The data object for the scope note who owns the result pane
// L"Audit policy change"
AddResultItem(IDS_POLICY_CHANGE, pSceInfo->pTemplate->AuditPolicyChange, pBase->pTemplate->AuditPolicyChange, ITEM_B2ON, 1, cookie, bVerify, pBase, //The template to save this attribute in
pDataObj); //The data object for the scope note who owns the result pane
// L"Audit Account Manage"
AddResultItem(IDS_ACCOUNT_MANAGE, pSceInfo->pTemplate->AuditAccountManage, pBase->pTemplate->AuditAccountManage, ITEM_B2ON, 1, cookie, bVerify, pBase, //The template to save this attribute in
pDataObj); //The data object for the scope note who owns the result pane
// L"Audit process tracking"
AddResultItem(IDS_PROCESS_TRACK, pSceInfo->pTemplate->AuditProcessTracking, pBase->pTemplate->AuditProcessTracking, ITEM_B2ON, 1, cookie, bVerify, pBase, //The template to save this attribute in
pDataObj); //The data object for the scope note who owns the result pane
// L"Audit directory access "
AddResultItem(IDS_DIRECTORY_ACCESS, pSceInfo->pTemplate->AuditDSAccess, pBase->pTemplate->AuditDSAccess, ITEM_B2ON, 1, cookie, bVerify, pBase, //The template to save this attribute in
pDataObj); //The data object for the scope note who owns the result pane
// L"Audit account logon"
AddResultItem(IDS_ACCOUNT_LOGON, pSceInfo->pTemplate->AuditAccountLogon, pBase->pTemplate->AuditAccountLogon, ITEM_B2ON, 1, cookie, bVerify, pBase, //The template to save this attribute in
pDataObj); //The data object for the scope note who owns the result pane
break;
case POLICY_LOG_ANALYSIS:
//
// Event Log setting
//
for ( i=0; i<3; i++) { // Maximum Log Size
AddResultItem(IdsMax[i], pSceInfo->pTemplate->MaximumLogSize[i], pBase->pTemplate->MaximumLogSize[i], ITEM_DW, 1, cookie, bVerify, pBase, //The template to save this attribute in
pDataObj); //The data object for the scope note who owns the result pane
// L"... Log Retention Method",
AddResultItem(IdsRet[i], pSceInfo->pTemplate->AuditLogRetentionPeriod[i], pBase->pTemplate->AuditLogRetentionPeriod[i], ITEM_RET, 1, cookie, bVerify, pBase, //The template to save this attribute in
pDataObj); //The data object for the scope note who owns the result pane
if ( pSceInfo->pTemplate->AuditLogRetentionPeriod[i] == 1 || pBase->pTemplate->AuditLogRetentionPeriod[i] == 1) // L"... Log Retention days", "days"
AddResultItem(IdsDays[i], pSceInfo->pTemplate->RetentionDays[i], pBase->pTemplate->RetentionDays[i], ITEM_DW, 1, cookie, bVerify, pBase, //The template to save this attribute in
pDataObj); //The data object for the scope note who owns the result pane
// L"RestrictGuestAccess", L""
AddResultItem(IdsGuest[i], pSceInfo->pTemplate->RestrictGuestAccess[i], pBase->pTemplate->RestrictGuestAccess[i], ITEM_BOOL, 1, cookie, bVerify, pBase, //The template to save this attribute in
pDataObj); //The data object for the scope note who owns the result pane
}
break;
case POLICY_OTHER_ANALYSIS:
// L"Force logoff when logon hour expire", L""
AddResultItem(IDS_FORCE_LOGOFF, pSceInfo->pTemplate->ForceLogoffWhenHourExpire, pBase->pTemplate->ForceLogoffWhenHourExpire, ITEM_BOOL, 1, cookie, bVerify, pBase, //The template to save this attribute in
pDataObj); //The data object for the scope note who owns the result pane
// L"Accounts: Administrator account status", L""
AddResultItem(IDS_ENABLE_ADMIN, pSceInfo->pTemplate->EnableAdminAccount, pBase->pTemplate->EnableAdminAccount, ITEM_BOOL, 1, cookie, bVerify, pBase, //The template to save this attribute in
pDataObj); //The data object for the scope note who owns the result pane
// L"Accounts: Guest account status", L""
AddResultItem(IDS_ENABLE_GUEST, pSceInfo->pTemplate->EnableGuestAccount, pBase->pTemplate->EnableGuestAccount, ITEM_BOOL, 1, cookie, bVerify, pBase, //The template to save this attribute in
pDataObj); //The data object for the scope note who owns the result pane
// L"Network access: Allow anonymous SID/Name translation"
AddResultItem(IDS_LSA_ANON_LOOKUP, pSceInfo->pTemplate->LSAAnonymousNameLookup, pBase->pTemplate->LSAAnonymousNameLookup, ITEM_BOOL, 1, cookie, bVerify, pBase, //The template to save this attribute in
pDataObj); //The data object for the scope note who owns the result pane
// L"New Administrator account name"
setting = (LONG_PTR)(pSceInfo->pTemplate->NewAdministratorName); if ( !pBase->pTemplate->NewAdministratorName ) { status = SCE_STATUS_NOT_CONFIGURED; } else if ( pSceInfo->pTemplate->NewAdministratorName) { status = SCE_STATUS_MISMATCH; } else { setting = (LONG_PTR)(pBase->pTemplate->NewAdministratorName); status = SCE_STATUS_GOOD; } AddResultItem(IDS_NEW_ADMIN, setting, (LONG_PTR)(LPCTSTR)pBase->pTemplate->NewAdministratorName, ITEM_SZ, status, cookie,false, pBase, //The template to save this attribute in
pDataObj); //The data object for the scope note who owns the result pane
// L"New Guest account name"
setting = (LONG_PTR)(pSceInfo->pTemplate->NewGuestName); if ( !pBase->pTemplate->NewGuestName ) { status = SCE_STATUS_NOT_CONFIGURED; } else if ( pSceInfo->pTemplate->NewGuestName) { status = SCE_STATUS_MISMATCH; } else { setting = (LONG_PTR)(pBase->pTemplate->NewGuestName); status = SCE_STATUS_GOOD; } AddResultItem(IDS_NEW_GUEST, setting, (LONG_PTR)(LPCTSTR)pBase->pTemplate->NewGuestName, ITEM_SZ, status, cookie,false, pBase, //The template to save this attribute in
pDataObj); //The data object for the scope note who owns the result pane
CreateAnalysisRegValueList(cookie, pSceInfo, pBase, pDataObj,ITEM_REGVALUE);
break; } }
void CSnapin::CreateLocalPolicyResultList(MMC_COOKIE cookie, FOLDER_TYPES type, PEDITTEMPLATE pLocal, PEDITTEMPLATE pEffective, LPDATAOBJECT pDataObj ) { if ( !pLocal || !pEffective ) { AddResultItem(IDS_ERROR_NO_LOCAL_POLICY_INFO,NULL,NULL,ITEM_OTHER,-1,cookie); return; }
bool bVerify= false; UINT i; UINT IdsMax[]={IDS_SYS_LOG_MAX, IDS_SEC_LOG_MAX, IDS_APP_LOG_MAX}; UINT IdsRet[]={IDS_SYS_LOG_RET, IDS_SEC_LOG_RET, IDS_APP_LOG_RET}; UINT IdsDays[]={IDS_SYS_LOG_DAYS, IDS_SEC_LOG_DAYS, IDS_APP_LOG_DAYS}; UINT IdsGuest[]={IDS_SYS_LOG_GUEST, IDS_SEC_LOG_GUEST, IDS_APP_LOG_GUEST};
DWORD status; LONG_PTR setting;
switch ( type ) { case LOCALPOL_PASSWORD: //
// password category
//
// L"Maximum passage age", L"Days"
AddResultItem(IDS_MAX_PAS_AGE, pEffective->pTemplate->MaximumPasswordAge, pLocal->pTemplate->MaximumPasswordAge, ITEM_LOCALPOL_DW, 1, cookie, bVerify, pLocal, //The template to save this attribute in
pDataObj); //The data object for the scope note who owns the result pane
// L"Minimum passage age", L"Days"
AddResultItem(IDS_MIN_PAS_AGE, pEffective->pTemplate->MinimumPasswordAge, pLocal->pTemplate->MinimumPasswordAge, ITEM_LOCALPOL_DW, 1, cookie, bVerify, pLocal, //The template to save this attribute in
pDataObj); //The data object for the scope note who owns the result pane
// L"Minimum passage length", L"Characters"
AddResultItem(IDS_MIN_PAS_LEN, pEffective->pTemplate->MinimumPasswordLength, pLocal->pTemplate->MinimumPasswordLength, ITEM_LOCALPOL_DW, 1, cookie, bVerify, pLocal, //The template to save this attribute in
pDataObj); //The data object for the scope note who owns the result pane
// L"Password history size", L"Passwords"
AddResultItem(IDS_PAS_UNIQUENESS, pEffective->pTemplate->PasswordHistorySize, pLocal->pTemplate->PasswordHistorySize, ITEM_LOCALPOL_DW, 1, cookie, bVerify, pLocal, //The template to save this attribute in
pDataObj); //The data object for the scope note who owns the result pane
// L"Password complexity", L""
AddResultItem(IDS_PAS_COMPLEX, pEffective->pTemplate->PasswordComplexity, pLocal->pTemplate->PasswordComplexity, ITEM_LOCALPOL_BOOL, 1, cookie, bVerify, pLocal, //The template to save this attribute in
pDataObj); //The data object for the scope note who owns the result pane
// L"Clear Text Password", L""
AddResultItem(IDS_CLEAR_PASSWORD, pEffective->pTemplate->ClearTextPassword, pLocal->pTemplate->ClearTextPassword, ITEM_LOCALPOL_BOOL, 1, cookie, bVerify, pLocal, //The template to save this attribute in
pDataObj); //The data object for the scope note who owns the result pane
#if defined(USE_REQ_LOGON_ITEM)
// L"Require logon to change password", L""
AddResultItem(IDS_REQ_LOGON, pEffective->pTemplate->RequireLogonToChangePassword, pLocal->pTemplate->RequireLogonToChangePassword, ITEM_LOCALPOL_BOOL, 1, cookie, bVerify, pLocal, //The template to save this attribute in
pDataObj); //The data object for the scope note who owns the result pane
#endif
break;
case LOCALPOL_KERBEROS: if (!VerifyKerberosInfo(pLocal->pTemplate) || !VerifyKerberosInfo(pEffective->pTemplate)) { AddResultItem(IDS_CANT_DISPLAY_ERROR_OOM,NULL,NULL,ITEM_OTHER,-1,cookie); break; } AddResultItem(IDS_KERBEROS_MAX_SERVICE, pEffective->pTemplate->pKerberosInfo->MaxServiceAge, pLocal->pTemplate->pKerberosInfo->MaxServiceAge, ITEM_LOCALPOL_DW,-1,cookie,bVerify, pLocal, //The template to save this attribute in
pDataObj); //The data object for the scope note who owns the result pane
AddResultItem(IDS_KERBEROS_MAX_CLOCK, pEffective->pTemplate->pKerberosInfo->MaxClockSkew, pLocal->pTemplate->pKerberosInfo->MaxClockSkew, ITEM_LOCALPOL_DW,-1,cookie,bVerify, pLocal, //The template to save this attribute in
pDataObj); //The data object for the scope note who owns the result pane
AddResultItem(IDS_KERBEROS_VALIDATE_CLIENT, pEffective->pTemplate->pKerberosInfo->TicketValidateClient, pLocal->pTemplate->pKerberosInfo->TicketValidateClient, ITEM_LOCALPOL_BOOL,-1,cookie,bVerify, pLocal, //The template to save this attribute in
pDataObj); //The data object for the scope note who owns the result pane
AddResultItem(IDS_KERBEROS_RENEWAL, pEffective->pTemplate->pKerberosInfo->MaxRenewAge, pLocal->pTemplate->pKerberosInfo->MaxRenewAge, ITEM_LOCALPOL_DW,-1,cookie,bVerify, pLocal, //The template to save this attribute in
pDataObj); //The data object for the scope note who owns the result pane
AddResultItem(IDS_KERBEROS_MAX_AGE, pEffective->pTemplate->pKerberosInfo->MaxTicketAge, pLocal->pTemplate->pKerberosInfo->MaxTicketAge, ITEM_LOCALPOL_DW,-1,cookie,bVerify, pLocal, //The template to save this attribute in
pDataObj); //The data object for the scope note who owns the result pane
break;
case LOCALPOL_LOCKOUT: //
// Account Lockout category
//
// L"Account lockout count", L"Attempts"
AddResultItem(IDS_LOCK_COUNT, pEffective->pTemplate->LockoutBadCount, pLocal->pTemplate->LockoutBadCount,ITEM_LOCALPOL_DW, 1, cookie, bVerify, pLocal, //The template to save this attribute in
pDataObj); //The data object for the scope note who owns the result pane
// L"Reset lockout count after", L"Minutes"
AddResultItem(IDS_LOCK_RESET_COUNT, pEffective->pTemplate->ResetLockoutCount, pLocal->pTemplate->ResetLockoutCount, ITEM_LOCALPOL_DW, 1, cookie, bVerify, pLocal, //The template to save this attribute in
pDataObj); //The data object for the scope note who owns the result pane
// L"Lockout duration", L"Minutes"
AddResultItem(IDS_LOCK_DURATION, pEffective->pTemplate->LockoutDuration, pLocal->pTemplate->LockoutDuration, ITEM_LOCALPOL_DW, 1, cookie, bVerify, pLocal, //The template to save this attribute in
pDataObj); //The data object for the scope note who owns the result pane
break;
case LOCALPOL_AUDIT: //
// Event auditing
//
// L"Event Auditing Mode",
// AddResultItem(IDS_EVENT_ON, pLocal->pTemplate->EventAuditingOnOff,
// pEffective->pTemplate->EventAuditingOnOff, ITEM_LOCALPOL_BON, 1, cookie, bVerify);
// L"Audit system events"
AddResultItem(IDS_SYSTEM_EVENT, pEffective->pTemplate->AuditSystemEvents, pLocal->pTemplate->AuditSystemEvents, ITEM_LOCALPOL_B2ON, 1, cookie, bVerify, pLocal, //The template to save this attribute in
pDataObj); //The data object for the scope note who owns the result pane
// L"Audit logon events"
AddResultItem(IDS_LOGON_EVENT, pEffective->pTemplate->AuditLogonEvents, pLocal->pTemplate->AuditLogonEvents, ITEM_LOCALPOL_B2ON, 1, cookie, bVerify, pLocal, //The template to save this attribute in
pDataObj); //The data object for the scope note who owns the result pane
// L"Audit Object Access"
AddResultItem(IDS_OBJECT_ACCESS, pEffective->pTemplate->AuditObjectAccess, pLocal->pTemplate->AuditObjectAccess, ITEM_LOCALPOL_B2ON, 1, cookie, bVerify, pLocal, //The template to save this attribute in
pDataObj); //The data object for the scope note who owns the result pane
// L"Audit Privilege Use"
AddResultItem(IDS_PRIVILEGE_USE, pEffective->pTemplate->AuditPrivilegeUse, pLocal->pTemplate->AuditPrivilegeUse, ITEM_LOCALPOL_B2ON, 1, cookie, bVerify, pLocal, //The template to save this attribute in
pDataObj); //The data object for the scope note who owns the result pane
// L"Audit policy change"
AddResultItem(IDS_POLICY_CHANGE, pEffective->pTemplate->AuditPolicyChange, pLocal->pTemplate->AuditPolicyChange, ITEM_LOCALPOL_B2ON, 1, cookie, bVerify, pLocal, //The template to save this attribute in
pDataObj); //The data object for the scope note who owns the result pane
// L"Audit Account Manage"
AddResultItem(IDS_ACCOUNT_MANAGE, pEffective->pTemplate->AuditAccountManage, pLocal->pTemplate->AuditAccountManage, ITEM_LOCALPOL_B2ON, 1, cookie, bVerify, pLocal, //The template to save this attribute in
pDataObj); //The data object for the scope note who owns the result pane
// L"Audit process tracking"
AddResultItem(IDS_PROCESS_TRACK, pEffective->pTemplate->AuditProcessTracking, pLocal->pTemplate->AuditProcessTracking, ITEM_LOCALPOL_B2ON, 1, cookie, bVerify, pLocal, //The template to save this attribute in
pDataObj); //The data object for the scope note who owns the result pane
// L"Audit directory access "
AddResultItem(IDS_DIRECTORY_ACCESS, pEffective->pTemplate->AuditDSAccess, pLocal->pTemplate->AuditDSAccess, ITEM_LOCALPOL_B2ON, 1, cookie, bVerify, pLocal, //The template to save this attribute in
pDataObj); //The data object for the scope note who owns the result pane
// L"Audit account logon"
AddResultItem(IDS_ACCOUNT_LOGON, pEffective->pTemplate->AuditAccountLogon, pLocal->pTemplate->AuditAccountLogon, ITEM_LOCALPOL_B2ON, 1, cookie, bVerify, pLocal, //The template to save this attribute in
pDataObj); //The data object for the scope note who owns the result pane
break;
case LOCALPOL_LOG:
//
// Event Log setting
//
for ( i=0; i<3; i++) { // Maximum Log Size
AddResultItem(IdsMax[i], pEffective->pTemplate->MaximumLogSize[i], pLocal->pTemplate->MaximumLogSize[i], ITEM_LOCALPOL_DW, 1, cookie, bVerify, pLocal, //The template to save this attribute in
pDataObj); //The data object for the scope note who owns the result pane
// L"... Log Retention Method",
AddResultItem(IdsRet[i], pEffective->pTemplate->AuditLogRetentionPeriod[i], pLocal->pTemplate->AuditLogRetentionPeriod[i], ITEM_LOCALPOL_RET, 1, cookie, bVerify, pLocal, //The template to save this attribute in
pDataObj); //The data object for the scope note who owns the result pane
if ( pLocal->pTemplate->AuditLogRetentionPeriod[i] == 1 || pEffective->pTemplate->AuditLogRetentionPeriod[i] == 1) // L"... Log Retention days", "days"
AddResultItem(IdsDays[i], pEffective->pTemplate->RetentionDays[i], pLocal->pTemplate->RetentionDays[i], ITEM_LOCALPOL_DW, 1, cookie, bVerify, pLocal, //The template to save this attribute in
pDataObj); //The data object for the scope note who owns the result pane
// L"RestrictGuestAccess", L""
AddResultItem(IdsGuest[i], pEffective->pTemplate->RestrictGuestAccess[i], pLocal->pTemplate->RestrictGuestAccess[i], ITEM_LOCALPOL_BOOL, 1, cookie, bVerify, pLocal, //The template to save this attribute in
pDataObj); //The data object for the scope note who owns the result pane
}
break;
case LOCALPOL_OTHER:
// L"Force logoff when logon hour expire", L""
AddResultItem(IDS_FORCE_LOGOFF, pEffective->pTemplate->ForceLogoffWhenHourExpire, pLocal->pTemplate->ForceLogoffWhenHourExpire, ITEM_LOCALPOL_BOOL, 1, cookie, bVerify, pLocal, //The template to save this attribute in
pDataObj); //The data object for the scope note who owns the result pane
// L"Accounts: Administrator account status", L""
AddResultItem(IDS_ENABLE_ADMIN, pEffective->pTemplate->EnableAdminAccount, pLocal->pTemplate->EnableAdminAccount, ITEM_LOCALPOL_BOOL, 1, cookie, bVerify, pLocal, //The template to save this attribute in
pDataObj); //The data object for the scope note who owns the result pane
// L"Accounts: Guest account status", L""
AddResultItem(IDS_ENABLE_GUEST, pEffective->pTemplate->EnableGuestAccount, pLocal->pTemplate->EnableGuestAccount, ITEM_LOCALPOL_BOOL, 1, cookie, bVerify, pLocal, //The template to save this attribute in
pDataObj); //The data object for the scope note who owns the result pane
// L"Network access: Allow anonymous SID/Name translation"
AddResultItem(IDS_LSA_ANON_LOOKUP, pEffective->pTemplate->LSAAnonymousNameLookup, pLocal->pTemplate->LSAAnonymousNameLookup, ITEM_LOCALPOL_BOOL, 1, cookie, bVerify, pLocal, //The template to save this attribute in
pDataObj); //The data object for the scope note who owns the result pane
// L"New Administrator account name"
setting = (LONG_PTR)(pEffective->pTemplate->NewAdministratorName); if ( !pLocal->pTemplate->NewAdministratorName ) { status = SCE_STATUS_NOT_CONFIGURED; } else if ( pEffective->pTemplate->NewAdministratorName) { status = SCE_STATUS_MISMATCH; } else { setting = (LONG_PTR)(pEffective->pTemplate->NewAdministratorName); status = SCE_STATUS_GOOD; }
AddResultItem(IDS_NEW_ADMIN, setting, (LONG_PTR)(LPCTSTR)pLocal->pTemplate->NewAdministratorName, ITEM_LOCALPOL_SZ, status, cookie,false, pLocal, //The template to save this attribute in
pDataObj); //The data object for the scope note who owns the result pane
// L"New Guest account name"
setting = (LONG_PTR)(pEffective->pTemplate->NewGuestName); if ( !pLocal->pTemplate->NewGuestName ) { status = SCE_STATUS_NOT_CONFIGURED; } else if ( pEffective->pTemplate->NewGuestName) { status = SCE_STATUS_MISMATCH; } else { setting = (LONG_PTR)(pEffective->pTemplate->NewGuestName); status = SCE_STATUS_GOOD; } AddResultItem(IDS_NEW_GUEST, setting, (LONG_PTR)(LPCTSTR)pLocal->pTemplate->NewGuestName, ITEM_LOCALPOL_SZ, status, cookie,false, pLocal, //The template to save this attribute in
pDataObj); //The data object for the scope note who owns the result pane
CreateAnalysisRegValueList(cookie, pEffective, pLocal, pDataObj,ITEM_LOCALPOL_REGVALUE);
break;
case LOCALPOL_PRIVILEGE: { // find in the current setting list
CString strDisp; TCHAR szPriv[255]; TCHAR szDisp[255]; DWORD cbDisp; DWORD dwMatch; PSCE_PRIVILEGE_ASSIGNMENT pPrivLocal; PSCE_PRIVILEGE_ASSIGNMENT pPrivEffective;
for ( int i=0; i<cPrivCnt; i++ ) {
cbDisp = 255; if ( SCESTATUS_SUCCESS == SceLookupPrivRightName(i,szPriv, (PINT)&cbDisp) ) { // find the local setting
for (pPrivLocal=pLocal->pTemplate->OtherInfo.sap.pPrivilegeAssignedTo; pPrivLocal!=NULL; pPrivLocal=pPrivLocal->Next) {
if ( _wcsicmp(szPriv, pPrivLocal->Name) == 0 ) { break; } }
// find the effective setting
for (pPrivEffective=pEffective->pTemplate->OtherInfo.smp.pPrivilegeAssignedTo; pPrivEffective!=NULL; pPrivEffective=pPrivEffective->Next) {
if ( _wcsicmp(szPriv, pPrivEffective->Name) == 0 ) { break; } }
cbDisp = 255; GetRightDisplayName(NULL,(LPCTSTR)szPriv,szDisp,&cbDisp);
//
// Status field is not loaded for local policy mode, except for not configured
//
dwMatch = CEditTemplate::ComputeStatus( pPrivLocal, pPrivEffective );
CResult *pResult = AddResultItem(szDisp, // The name of the attribute being added
(LONG_PTR)pPrivEffective, // The local policy setting of the attribute
(LONG_PTR)pPrivLocal, // The effective policy setting of the attribute
ITEM_LOCALPOL_PRIVS, // The type of of the attribute's data
dwMatch, // The mismatch status of the attribute
cookie, // The cookie for the result item pane
FALSE, // True if the setting is set only if it differs from base (so copy the data)
szPriv, // The units the attribute is set in
0, // An id to let us know where to save this attribute
pLocal, // The template to save this attribute in
pDataObj); // The data object for the scope note who owns the result pane
} }
break; } } }
//+--------------------------------------------------------------------------
//
// Method: TransferAnalysisName
//
// Synopsis: Copy a name data from the last inspection information to the
// computer template
//
// Arguments: [dwItem] - The id of the item to copy
//
// Returns: none
//
//---------------------------------------------------------------------------
void CSnapin::TransferAnalysisName(LONG_PTR dwItem) { PEDITTEMPLATE pet; PSCE_PROFILE_INFO pProfileInfo; PSCE_PROFILE_INFO pBaseInfo;
pet = GetTemplate(GT_LAST_INSPECTION,AREA_SECURITY_POLICY); if (!pet) { return; } pProfileInfo = pet->pTemplate;
pet = GetTemplate(GT_COMPUTER_TEMPLATE,AREA_SECURITY_POLICY); if (!pet) { return; } pBaseInfo = pet->pTemplate;
switch ( dwItem ) { case IDS_NEW_GUEST: if ( pProfileInfo->NewGuestName ) { LocalFree(pProfileInfo->NewGuestName); }
pProfileInfo->NewGuestName = pBaseInfo->NewGuestName; pBaseInfo->NewGuestName = NULL;
break; case IDS_NEW_ADMIN: if ( pProfileInfo->NewAdministratorName ) { LocalFree(pProfileInfo->NewAdministratorName); }
pProfileInfo->NewAdministratorName = pBaseInfo->NewAdministratorName; pBaseInfo->NewAdministratorName = NULL; break; }
}
|