//Copyright (c) 1998 - 1999 Microsoft Corporation #include"stdafx.h" #include"snodes.h" #include"resource.h" #define ERROR_USERDEFINED_LICENSE_VIOLATION ( ( DWORD )0xC000026AL ) extern void xxxErrMessage( HWND hwnd , INT_PTR nResMessageId , INT_PTR nResTitleId , UINT nFlags ); extern void TscAccessDeniedMsg( HWND hwnd ); extern void TscGeneralErrMsg( HWND hwnd ); extern void ReportStatusError( HWND hwnd , DWORD dwStatus ); void SnodeErrorHandler( HWND hParent , INT nObjectId , DWORD dwStatus ); //---------------------------------------------------------- CSettingNode::CSettingNode( ) { m_szAttributeName = NULL; m_szAttributeValue = NULL; SetNodeType( RSETTINGS_NODE ); m_objectid = -1; m_pSettings = NULL; m_hrStatus = S_OK; } //---------------------------------------------------------- void CSettingNode::SetObjectId( INT id ) { m_objectid = id; } //---------------------------------------------------------- HRESULT CSettingNode::SetAttributeValue( DWORD nVal , PDWORD pdwStatus ) { HRESULT hr = S_OK; ISettingsComp *pSettings = NULL; INT nObjectId = GetObjectId( ); if( nObjectId < CUSTOM_EXTENSION ) { pSettings = reinterpret_cast< ISettingsComp *>( m_pSettings ); if( pSettings == NULL ) { ODS( L"CSettingNode::SetAttributeValue downcasting failure\n" ); return E_FAIL; } } if( nObjectId == LICENSING ) { DWORD dwNewStatus; hr = pSettings->SetLicensingMode( nVal , pdwStatus, &dwNewStatus ); if( SUCCEEDED( hr ) ) { xx_SetValue( nVal ); } else { if ((NULL != pdwStatus) && (ERROR_SUCCESS == *pdwStatus)) { // make sure any failure gets returned to caller *pdwStatus = dwNewStatus; } } } else { if( nObjectId == DELETED_DIRS_ONEXIT ) // Delete temp dirs on exit { hr = pSettings->SetDelDirsOnExit( ( BOOL )nVal ); } else if( nObjectId == PERSESSION_TEMPDIR )// User temp dirs per session { hr = pSettings->SetUseTempDirPerSession( ( BOOL )nVal ); } /* else if( nObjectId == DEF_CONSECURITY ) // default security descriptor { hr = m_pSettings->SetDefaultSecurity( nVal ); }*/ else if( nObjectId == ACTIVE_DESK ) { hr = pSettings->SetActiveDesktopState( nVal , pdwStatus ); } else if( nObjectId == USERSECURITY ) { hr = pSettings->SetUserPerm( nVal , pdwStatus ); if( FAILED( hr ) ) { return hr; } } else if( nObjectId == SINGLE_SESSION ) { hr = pSettings->SetSingleSessionState( nVal , pdwStatus ); } if( FAILED( hr ) ) { if( hr == E_ACCESSDENIED ) { *pdwStatus = ERROR_ACCESS_DENIED; } else { *pdwStatus = ( DWORD )hr; // general failure } } else { xx_SetValue( nVal ); } } return hr; } //---------------------------------------------------------- BOOL CSettingNode::SetAttributeName( LPTSTR psz ) { if( psz != NULL ) { int cchText = lstrlen( psz ) + 1; if( m_szAttributeName != NULL ) { delete[] m_szAttributeName; } m_szAttributeName = ( LPTSTR )new TCHAR[ cchText ]; if( m_szAttributeName != NULL ) { lstrcpy( m_szAttributeName , psz ); } return TRUE; } return FALSE; } //---------------------------------------------------------- LPTSTR CSettingNode::GetAttributeValue( ) { DWORD nVal = 0; DWORD dwStatus; ISettingsComp *pSettings = NULL; HRESULT hr = S_OK; INT nObjectId = GetObjectId( ); if( nObjectId < CUSTOM_EXTENSION ) { pSettings = reinterpret_cast< ISettingsComp *>( m_pSettings ); if( pSettings == NULL ) { hr = E_FAIL; } ODS( L"Getting attribute value\n" ); } if( SUCCEEDED( hr ) ) { POLICY_TS_MACHINE p; RegGetMachinePolicy(&p); switch( nObjectId ) { case DELETED_DIRS_ONEXIT: // Delete temp dirs on exit hr = pSettings->GetDelDirsOnExit( ( PBOOL )&nVal ); if (p.fPolicyDeleteTempFoldersOnExit) nVal = p.fDeleteTempFoldersOnExit; break; case PERSESSION_TEMPDIR:// User temp dirs per session hr = pSettings->GetUseTempDirPerSession( ( PBOOL )&nVal ); if (p.fPolicyTempFoldersPerSession) nVal = p.fTempFoldersPerSession; break; /* case DEF_CONSECURITY: // default security descriptor hr = m_pSettings->GetDefaultSecurity( &nVal ); break; */ case LICENSING: // licensing mode hr = pSettings->GetLicensingMode( &nVal , &dwStatus ); break; case ACTIVE_DESK: hr = pSettings->GetActiveDesktopState( ( PBOOL )&nVal , &dwStatus ); break; case USERSECURITY: hr = pSettings->GetUserPerm( ( PBOOL )&nVal , &dwStatus ); break; case SINGLE_SESSION: hr = pSettings->GetSingleSessionState( ( PBOOL )&nVal , &dwStatus ); if (p.fPolicySingleSessionPerUser) nVal = p.fSingleSessionPerUser; break; default: if( nObjectId >= CUSTOM_EXTENSION ) { ODS( L"Getting attribute value\n" ); nVal = 0; // we don't care we leave it up to the provider hr = S_OK; } } } if( FAILED( hr ) ) { TCHAR szBuffer[ 80 ]; szBuffer[0] = 0; if( m_szAttributeValue != NULL ) { delete[] m_szAttributeValue; } VERIFY_E( 0 , LoadString( _Module.GetResourceInstance( ) , IDS_SSERROR , szBuffer , SIZE_OF_BUFFER( szBuffer ) ) ); m_szAttributeValue = ( LPTSTR )new TCHAR[ lstrlen( szBuffer ) + 1 ]; if( m_szAttributeValue != NULL ) { lstrcpy( m_szAttributeValue , szBuffer ); } if( nObjectId != LICENSING ) { xx_SetValue( 0 ); } } else { xx_SetValue( nVal ); } m_hrStatus = hr; return m_szAttributeValue; } //---------------------------------------------------------- DWORD CSettingNode::GetImageIdx( ) { return ( DWORD )3; } //---------------------------------------------------------- BOOL CSettingNode::AddMenuItems( LPCONTEXTMENUCALLBACK pcmc , PLONG pl ) { HRESULT hr = E_FAIL; TCHAR tchName[ 80 ]; TCHAR tchStatus[ 256 ]; CONTEXTMENUITEM cmi; BOOL bVal = FALSE; INT nObjectId = GetObjectId( ); POLICY_TS_MACHINE p; RegGetMachinePolicy(&p); switch( nObjectId ) { case DELETED_DIRS_ONEXIT: VERIFY_E( 0 , LoadString( _Module.GetResourceInstance( ) , IDS_PROPERTIES_MENU , tchName , SIZE_OF_BUFFER( tchName ) ) ); cmi.strName = tchName; VERIFY_E( 0 , LoadString( _Module.GetResourceInstance( ) , IDS_STANDARAD_PROPERTIES_STATUS , tchStatus , SIZE_OF_BUFFER( tchStatus ) ) ); cmi.strStatusBarText = tchStatus; cmi.lCommandID = IDM_SETTINGS_PROPERTIES; cmi.lInsertionPointID = CCM_INSERTIONPOINTID_PRIMARY_TOP;//CCM_INSERTIONPOINTID_PRIMARY_TASK; cmi.fFlags = cmi.fSpecialFlags = 0; *pl |= CCM_INSERTIONALLOWED_TOP; //CCM_INSERTIONALLOWED_TASK; hr = pcmc->AddItem( &cmi ); if( SUCCEEDED( hr ) ) { bVal = ( BOOL )xx_GetValue( ); if( bVal ) { VERIFY_E( 0 , LoadString( _Module.GetResourceInstance( ) , IDS_NOMENU , tchName , SIZE_OF_BUFFER( tchName ) ) ); cmi.strName = tchName; VERIFY_E( 0 , LoadString( _Module.GetResourceInstance( ) , IDS_NOTDELTEMP_STATUS , tchStatus , SIZE_OF_BUFFER( tchStatus ) ) ); cmi.strStatusBarText = tchStatus; } else { VERIFY_E( 0 , LoadString( _Module.GetResourceInstance( ) , IDS_YESMENU , tchName , SIZE_OF_BUFFER( tchName ) ) ); cmi.strName = tchName; VERIFY_E( 0 , LoadString( _Module.GetResourceInstance( ) , IDS_DELTEMP_STATUS , tchStatus , SIZE_OF_BUFFER( tchStatus ) ) ); cmi.strStatusBarText = tchStatus; } if (p.fPolicyDeleteTempFoldersOnExit) { //Clear the last 2 bits since MF_GRAYED is //incompatible with MF_DISABLED cmi.fFlags &= 0xFFFFFFFCL; cmi.fFlags |= MF_GRAYED; } cmi.lCommandID = IDM_SETTINGS_DELTEMPDIRSONEXIT; hr = pcmc->AddItem( &cmi ); } break; case PERSESSION_TEMPDIR: VERIFY_E( 0 , LoadString( _Module.GetResourceInstance( ) , IDS_PROPERTIES_MENU , tchName , SIZE_OF_BUFFER( tchName ) ) ); cmi.strName = tchName; VERIFY_E( 0 , LoadString( _Module.GetResourceInstance( ) , IDS_STANDARAD_PROPERTIES_STATUS , tchStatus , SIZE_OF_BUFFER( tchStatus ) ) ); cmi.strStatusBarText = tchStatus; cmi.lCommandID = IDM_SETTINGS_PROPERTIES; cmi.lInsertionPointID = CCM_INSERTIONPOINTID_PRIMARY_TOP;//CCM_INSERTIONPOINTID_PRIMARY_TASK; cmi.fFlags = cmi.fSpecialFlags = 0; *pl |= CCM_INSERTIONALLOWED_TOP; //CCM_INSERTIONALLOWED_TASK; hr = pcmc->AddItem( &cmi ); if( SUCCEEDED( hr ) ) { bVal = ( BOOL )xx_GetValue( ); if( bVal ) { VERIFY_E( 0 , LoadString( _Module.GetResourceInstance( ) , IDS_NOMENU , tchName , SIZE_OF_BUFFER( tchName ) ) ); cmi.strName = tchName; VERIFY_E( 0 , LoadString( _Module.GetResourceInstance( ) , IDS_NOTUSEPERSESSION_STATUS , tchStatus , SIZE_OF_BUFFER( tchStatus ) ) ); cmi.strStatusBarText = tchStatus; } else { VERIFY_E( 0 , LoadString( _Module.GetResourceInstance( ) , IDS_YESMENU , tchName , SIZE_OF_BUFFER( tchName ) ) ); cmi.strName = tchName; VERIFY_E( 0 , LoadString( _Module.GetResourceInstance( ) , IDS_USEPERSESSION_STATUS , tchStatus , SIZE_OF_BUFFER( tchStatus ) ) ); cmi.strStatusBarText = tchStatus; } if (p.fPolicyTempFoldersPerSession) { //Clear the last 2 bits since MF_GRAYED is //incompatible with MF_DISABLED cmi.fFlags &= 0xFFFFFFFCL; cmi.fFlags |= MF_GRAYED; } cmi.lCommandID = IDM_SETTINGS_USETMPDIR; hr = pcmc->AddItem( &cmi ); } break; /* case DEF_CONSECURITY: VERIFY_E( 0 , LoadString( _Module.GetResourceInstance( ) , IDS_PROPERTIES_MENU , tchName , SIZE_OF_BUFFER( tchName ) ) ); cmi.strName = tchName; VERIFY_E( 0 , LoadString( _Module.GetResourceInstance( ) , IDS_STANDARAD_PROPERTIES_STATUS , tchStatus , SIZE_OF_BUFFER( tchStatus ) ) ); cmi.strStatusBarText = tchStatus; cmi.lCommandID = IDM_SETTINGS_PROPERTIES; cmi.lInsertionPointID = CCM_INSERTIONPOINTID_PRIMARY_TOP;//CCM_INSERTIONPOINTID_PRIMARY_TASK; cmi.fFlags = cmi.fSpecialFlags = 0; *pl |= CCM_INSERTIONALLOWED_TOP; //CCM_INSERTIONALLOWED_TASK; hr = pcmc->AddItem( &cmi ); break; */ case LICENSING: VERIFY_E( 0 , LoadString( _Module.GetResourceInstance( ) , IDS_PROPERTIES_MENU , tchName , SIZE_OF_BUFFER( tchName ) ) ); cmi.strName = tchName; VERIFY_E( 0 , LoadString( _Module.GetResourceInstance( ) , IDS_STANDARAD_PROPERTIES_STATUS , tchStatus , SIZE_OF_BUFFER( tchStatus ) ) ); cmi.strStatusBarText = tchStatus; cmi.lCommandID = IDM_SETTINGS_PROPERTIES; cmi.lInsertionPointID = CCM_INSERTIONPOINTID_PRIMARY_TOP;//CCM_INSERTIONPOINTID_PRIMARY_TASK; cmi.fFlags = cmi.fSpecialFlags = 0; *pl |= CCM_INSERTIONALLOWED_TOP; //CCM_INSERTIONALLOWED_TASK; hr = pcmc->AddItem( &cmi ); break; case ACTIVE_DESK: VERIFY_E( 0 , LoadString( _Module.GetResourceInstance( ) , IDS_PROPERTIES_MENU , tchName , SIZE_OF_BUFFER( tchName ) ) ); cmi.strName = tchName; VERIFY_E( 0 , LoadString( _Module.GetResourceInstance( ) , IDS_ACTIVEDESK_PROP_STATUS , tchStatus , SIZE_OF_BUFFER( tchStatus ) ) ); cmi.strStatusBarText = tchStatus; cmi.lCommandID = IDM_SETTINGS_PROPERTIES; cmi.lInsertionPointID = CCM_INSERTIONPOINTID_PRIMARY_TOP;//CCM_INSERTIONPOINTID_PRIMARY_TASK; cmi.fFlags = cmi.fSpecialFlags = 0; *pl |= CCM_INSERTIONALLOWED_TOP; //CCM_INSERTIONALLOWED_TASK; hr = pcmc->AddItem( &cmi ); if( SUCCEEDED( hr ) ) { bVal = ( BOOL )xx_GetValue( ); if( bVal ) { VERIFY_E( 0 , LoadString( _Module.GetResourceInstance( ) , IDS_DISABLEMENU , tchName , SIZE_OF_BUFFER( tchName ) ) ); cmi.strName = tchName; VERIFY_E( 0 , LoadString( _Module.GetResourceInstance( ) , IDS_DISABLE_ADP_STATUS , tchStatus , SIZE_OF_BUFFER( tchStatus ) ) ); cmi.strStatusBarText = tchStatus; } else { VERIFY_E( 0 , LoadString( _Module.GetResourceInstance( ) , IDS_ENABLEMENU , tchName , SIZE_OF_BUFFER( tchName ) ) ); cmi.strName = tchName; VERIFY_E( 0 , LoadString( _Module.GetResourceInstance( ) , IDS_ENABLE_ADP_STATUS , tchStatus , SIZE_OF_BUFFER( tchStatus ) ) ); cmi.strStatusBarText = tchStatus; } cmi.lCommandID = IDM_SETTINGS_ADP; hr = pcmc->AddItem( &cmi ); } break; case SINGLE_SESSION: VERIFY_E( 0 , LoadString( _Module.GetResourceInstance( ) , IDS_PROPERTIES_MENU , tchName , SIZE_OF_BUFFER( tchName ) ) ); cmi.strName = tchName; VERIFY_E( 0 , LoadString( _Module.GetResourceInstance( ) , IDS_STANDARAD_PROPERTIES_STATUS , tchStatus , SIZE_OF_BUFFER( tchStatus ) ) ); cmi.strStatusBarText = tchStatus; cmi.lCommandID = IDM_SETTINGS_PROPERTIES; cmi.lInsertionPointID = CCM_INSERTIONPOINTID_PRIMARY_TOP;//CCM_INSERTIONPOINTID_PRIMARY_TASK; cmi.fFlags = cmi.fSpecialFlags = 0; *pl |= CCM_INSERTIONALLOWED_TOP; //CCM_INSERTIONALLOWED_TASK; hr = pcmc->AddItem( &cmi ); if( SUCCEEDED( hr ) ) { bVal = ( BOOL )xx_GetValue( ); if( bVal ) { VERIFY_E( 0 , LoadString( _Module.GetResourceInstance( ) , IDS_NOMENU , tchName , SIZE_OF_BUFFER( tchName ) ) ); cmi.strName = tchName; VERIFY_E( 0 , LoadString( _Module.GetResourceInstance( ) , IDS_DISABLE_SINGLESESSION_STATUS , tchStatus , SIZE_OF_BUFFER( tchStatus ) ) ); cmi.strStatusBarText = tchStatus; } else { VERIFY_E( 0 , LoadString( _Module.GetResourceInstance( ) , IDS_YESMENU , tchName , SIZE_OF_BUFFER( tchName ) ) ); cmi.strName = tchName; VERIFY_E( 0 , LoadString( _Module.GetResourceInstance( ) , IDS_ENABLE_SINGLESESSION_STATUS , tchStatus , SIZE_OF_BUFFER( tchStatus ) ) ); cmi.strStatusBarText = tchStatus; } if (p.fPolicySingleSessionPerUser) { //Clear the last 2 bits since MF_GRAYED is //incompatible with MF_DISABLED cmi.fFlags &= 0xFFFFFFFCL; cmi.fFlags |= MF_GRAYED; } cmi.lCommandID = IDM_SETTINGS_SS; hr = pcmc->AddItem( &cmi ); } break; case USERSECURITY: VERIFY_E( 0 , LoadString( _Module.GetResourceInstance( ) , IDS_PROPERTIES_MENU , tchName , SIZE_OF_BUFFER( tchName ) ) ); cmi.strName = tchName; VERIFY_E( 0 , LoadString( _Module.GetResourceInstance( ) , IDS_STANDARAD_PROPERTIES_STATUS , tchStatus , SIZE_OF_BUFFER( tchStatus ) ) ); cmi.strStatusBarText = tchStatus; cmi.lCommandID = IDM_SETTINGS_PROPERTIES; cmi.lInsertionPointID = CCM_INSERTIONPOINTID_PRIMARY_TOP;//CCM_INSERTIONPOINTID_PRIMARY_TASK; cmi.fFlags = cmi.fSpecialFlags = 0; *pl |= CCM_INSERTIONALLOWED_TOP; //CCM_INSERTIONALLOWED_TASK; hr = pcmc->AddItem( &cmi ); break; default: if( nObjectId >= CUSTOM_EXTENSION ) { IExtendServerSettings *pSetting = reinterpret_cast< IExtendServerSettings * >( m_pSettings ); if( pSetting != NULL ) { PMENUEXTENSION pMex = NULL; INT cbItems = 0; if( SUCCEEDED( pSetting->GetMenuItems( &cbItems , &pMex ) ) ) { for( INT i = 0 ; i < cbItems; i++ ) { cmi.strName = pMex[ i ].MenuItemName; cmi.strStatusBarText = pMex[ i ].StatusBarText; cmi.lCommandID = pMex[ i ].cmd; cmi.lInsertionPointID = CCM_INSERTIONPOINTID_PRIMARY_TOP; cmi.fFlags = cmi.fSpecialFlags = 0; *pl |= CCM_INSERTIONALLOWED_TOP; if (p.fPolicySessionDirectoryActive) { //Gray out everything but properties if (cmi.lCommandID != IDM_MENU_PROPS) { //Clear the last 2 bits since MF_GRAYED is //incompatible with MF_DISABLED cmi.fFlags &= 0xFFFFFFFCL; cmi.fFlags |= MF_GRAYED; } } pcmc->AddItem( &cmi ); } hr = S_OK; LocalFree( pMex ); } } } } return ( SUCCEEDED( hr ) ? TRUE : FALSE ); } //---------------------------------------------------------- BOOL CSettingNode::SetInterface( LPUNKNOWN pInf ) { pInf->AddRef( ); m_pSettings = pInf; return TRUE; } //---------------------------------------------------------- CSettingNode::~CSettingNode( ) { DBGMSG( L"CSettingNode dtor called for objectid %d\n" , m_objectid ); if( m_szAttributeName != NULL ) { delete[] m_szAttributeName; } if( m_szAttributeValue != NULL ) { delete[] m_szAttributeValue; } if( m_pSettings != NULL ) { m_pSettings->Release( ); } } //--------------------------------------------------------- // Helper functions //--------------------------------------------------------- BOOL CSettingNode::xx_SetValue( INT nVal ) { TCHAR szBuffer[ 1024 ]; szBuffer[0] = 0; INT nObjectId = GetObjectId( ); if( m_szAttributeValue != NULL ) { delete[] m_szAttributeValue; } switch( nObjectId ) { case SINGLE_SESSION: if( ( BOOL )nVal ) { VERIFY_E( 0 , LoadString( _Module.GetResourceInstance( ) , IDS_YES , szBuffer , SIZE_OF_BUFFER( szBuffer ) ) ); } else { VERIFY_E( 0 , LoadString( _Module.GetResourceInstance( ) , IDS_NO , szBuffer , SIZE_OF_BUFFER( szBuffer ) ) ); } break; case DELETED_DIRS_ONEXIT: // Delete temp dirs on exit if( ( BOOL )nVal ) { VERIFY_E( 0 , LoadString( _Module.GetResourceInstance( ) , IDS_YES , szBuffer , SIZE_OF_BUFFER( szBuffer ) ) ); } else { VERIFY_E( 0 , LoadString( _Module.GetResourceInstance( ) , IDS_NO , szBuffer , SIZE_OF_BUFFER( szBuffer ) ) ); } break; case PERSESSION_TEMPDIR:// User temp dirs per session if( ( BOOL )nVal ) { VERIFY_E( 0 , LoadString( _Module.GetResourceInstance( ) , IDS_YES , szBuffer , SIZE_OF_BUFFER( szBuffer ) ) ); } else { VERIFY_E( 0 , LoadString( _Module.GetResourceInstance( ) , IDS_NO , szBuffer , SIZE_OF_BUFFER( szBuffer ) ) ); } break; /* case DEF_CONSECURITY: // default security descriptor switch( nVal ) { case 0: // this shoudl never happen case 1: VERIFY_E( 0 , LoadString( _Module.GetResourceInstance( ) , IDS_RAA , szBuffer , SIZE_OF_BUFFER( szBuffer ) ) ); break; case 2: VERIFY_E( 0 , LoadString( _Module.GetResourceInstance( ) , IDS_AS , szBuffer , SIZE_OF_BUFFER( szBuffer ) ) ); break; case 3: VERIFY_E( 0 , LoadString( _Module.GetResourceInstance( ) , IDS_AA , szBuffer , SIZE_OF_BUFFER( szBuffer ) ) ); break; } break; */ case LICENSING: // licensing mode { ISettingsComp *pSettings = reinterpret_cast< ISettingsComp * > (m_pSettings); if (NULL != pSettings) { WCHAR *wszName, *wszDescription; DWORD dwStatus; HRESULT hr; hr = pSettings->GetLicensingModeInfo( nVal, &wszName, &wszDescription, &dwStatus); if (SUCCEEDED(hr)) { _ASSERTE( ERROR_SUCCESS == dwStatus ); lstrcpyn(szBuffer,wszName,sizeof(szBuffer)/sizeof(TCHAR)); CoTaskMemFree(wszName); CoTaskMemFree(wszDescription); } } } break; case ACTIVE_DESK: if( ( BOOL )nVal ) { VERIFY_E( 0 , LoadString( _Module.GetResourceInstance( ) , IDS_ENABLED , szBuffer , SIZE_OF_BUFFER( szBuffer ) ) ); } else { VERIFY_E( 0 , LoadString( _Module.GetResourceInstance( ) , IDS_DISABLED , szBuffer , SIZE_OF_BUFFER( szBuffer ) ) ); } break; case USERSECURITY: if( ( BOOL )nVal ) { VERIFY_E( 0 , LoadString( _Module.GetResourceInstance( ) , IDS_USERPERM_NT4 , szBuffer , SIZE_OF_BUFFER( szBuffer ) ) ); } else { VERIFY_E( 0 , LoadString( _Module.GetResourceInstance( ) , IDS_USERPERM_W2K , szBuffer , SIZE_OF_BUFFER( szBuffer ) ) ); } break; default: if( nObjectId >= CUSTOM_EXTENSION ) { IExtendServerSettings *pSettings = reinterpret_cast< IExtendServerSettings *>( m_pSettings ); if( pSettings != NULL ) { pSettings->GetDisplayableValueName( szBuffer ); DBGMSG( L"xx_SetValue for Extension returned %s\n" , szBuffer ); } } } // switch m_szAttributeValue = ( LPTSTR )new TCHAR[ lstrlen( szBuffer ) + 1 ]; if( m_szAttributeValue != NULL ) { lstrcpy( m_szAttributeValue , szBuffer ); } m_nGenericValue = nVal; return TRUE; } //---------------------------------------------------------------------- // And all out central server setting error handler // this is setup in this manner to allow MMC to own the Msgbx as well // as the custom dialog pages // void SnodeErrorHandler( HWND hParent , INT nObjectId , DWORD dwStatus ) { switch( nObjectId ) { case DELETED_DIRS_ONEXIT: // Delete temp dirs on exit case PERSESSION_TEMPDIR:// User temp dirs per session case SINGLE_SESSION: // Restrict to single session per user // case DEF_CONSECURITY: // default security descriptor case LICENSING: // licensing mode case ACTIVE_DESK: if( dwStatus == ERROR_ACCESS_DENIED ) { TscAccessDeniedMsg( hParent ); } else { TscGeneralErrMsg( hParent ); } break; case USERSECURITY: if( dwStatus != 0 ) { ReportStatusError( hParent , dwStatus ); } } // switch }