///////////////////////////////////////////////////////////////////////////// // // Copyright (c) 1998-1999 Microsoft Corporation // // Module Name: // SmbSPage.cpp // // Abstract: // CClusterFileShareSecurityPage class implementation. This class will encapsulate // the cluster file share security page. // // Author: // Galen Barbee (galenb) February 11, 1998 // // Revision History: // // Notes: // ///////////////////////////////////////////////////////////////////////////// #include "stdafx.h" #include "resource.h" #include "SmbSPage.h" #include "AclUtils.h" #include #include "SmbShare.h" #include "SmbSSht.h" static GENERIC_MAPPING ShareMap = { FILE_GENERIC_READ, FILE_GENERIC_WRITE, FILE_GENERIC_EXECUTE, FILE_ALL_ACCESS }; static SI_ACCESS siFileShareAccesses[] = { { &GUID_NULL, FILE_ALL_ACCESS, MAKEINTRESOURCE(IDS_ACLEDIT_PERM_GEN_ALL), SI_ACCESS_GENERAL }, { &GUID_NULL, FILE_GENERIC_WRITE | DELETE, MAKEINTRESOURCE(IDS_ACLEDIT_PERM_GEN_MODIFY), SI_ACCESS_GENERAL }, { &GUID_NULL, FILE_GENERIC_READ | FILE_GENERIC_EXECUTE, MAKEINTRESOURCE(IDS_ACLEDIT_PERM_GEN_READ), SI_ACCESS_GENERAL } }; ///////////////////////////////////////////////////////////////////////////// // CClusterFileShareSecurityInformation security page ///////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////// //++ // // CClusterFileShareSecurityInformation::CClusterFileShareSecurityInformation // // Routine Description: // Default contructor // // Arguments: // none // // Return Value: // none // //-- ///////////////////////////////////////////////////////////////////////////// CClusterFileShareSecurityInformation::CClusterFileShareSecurityInformation( void ) { m_pShareMap = &ShareMap; m_psiAccess = (SI_ACCESS *) &siFileShareAccesses; m_nAccessElems = ARRAYSIZE( siFileShareAccesses ); m_nDefAccess = 2; // FILE_GEN_READ m_dwFlags = SI_EDIT_PERMS | SI_NO_ACL_PROTECT //| SI_UGOP_PROVIDED ; } //*** CClusterFileShareSecurityInformation::CClusterFileShareSecurityInformation() ///////////////////////////////////////////////////////////////////////////// //++ // // CClusterFileShareSecurityInformation::~CClusterFileShareSecurityInformation // // Routine Description: // Destructor // // Arguments: // none // // Return Value: // none // //-- ///////////////////////////////////////////////////////////////////////////// CClusterFileShareSecurityInformation::~CClusterFileShareSecurityInformation( void ) { } //*** CClusterFileShareSecurityInformation::~CClusterFileShareSecurityInformation() ///////////////////////////////////////////////////////////////////////////// //++ // // CClusterFileShareSecurityInformation::GetSecurity // // Routine Description: // Give the security descriptor to the common UI. // // Arguments: // RequestedInformation [IN] // ppSecurityDescriptor [IN, OUT] get the security descriptor // fDefault [IN] // // Return Value: // // //-- ///////////////////////////////////////////////////////////////////////////// STDMETHODIMP CClusterFileShareSecurityInformation::GetSecurity( IN SECURITY_INFORMATION RequestedInformation, IN OUT PSECURITY_DESCRIPTOR *ppSecurityDescriptor, IN BOOL fDefault ) { AFX_MANAGE_STATE( AfxGetStaticModuleState() ); HRESULT hr = E_FAIL; try { if ( ppSecurityDescriptor != NULL ) { *ppSecurityDescriptor = ::ClRtlCopySecurityDescriptor( Pcsp()->Pss()->Ppp()->Psec() ); hr = S_OK; } } catch ( ... ) { TRACE( _T("CClusterFileShareSecurityInformation::GetSecurity() - Unknown error occurred.\n") ); } return hr; } //*** CClusterFileShareSecurityInformation::GetSecurity() ///////////////////////////////////////////////////////////////////////////// //++ // // CClusterFileShareSecurityInformation::SetSecurity // // Routine Description: // Save the passed in descriptor // // Arguments: // RequestedInformation [IN] // ppSecurityDescriptor [IN] the new security descriptor // fDefault [IN] // // Return Value: // // //-- ///////////////////////////////////////////////////////////////////////////// STDMETHODIMP CClusterFileShareSecurityInformation::SetSecurity( SECURITY_INFORMATION SecurityInformation, PSECURITY_DESCRIPTOR pSecurityDescriptor ) { AFX_MANAGE_STATE( AfxGetStaticModuleState() ); HRESULT hr = E_FAIL; try { hr = CSecurityInformation::SetSecurity( SecurityInformation, pSecurityDescriptor ); if ( hr == S_OK ) { hr = Pcsp()->Pss()->Ppp()->SetSecurityDescriptor( pSecurityDescriptor ); } } catch( ... ) { ; } return hr; } //*** CClusterFileShareSecurityInformation::SetSecurity() ///////////////////////////////////////////////////////////////////////////// //++ // // CFileShareParamsPage::HrInit // // Routine Description: // Initialize the object // // Arguments: // pcsp [IN] back pointer to the parent property page // strServer [IN] cluster name // // Return Value: // // //-- ///////////////////////////////////////////////////////////////////////////// HRESULT CClusterFileShareSecurityInformation::HrInit( CClusterFileShareSecurityPage * pcsp, IN CString const & strServer, IN CString const & strNode ) { ASSERT( pcsp != NULL ); ASSERT( strServer.GetLength() > 0 ); AFX_MANAGE_STATE( AfxGetStaticModuleState() ); m_pcsp = pcsp; m_strServer = strServer; m_strNode = strNode; m_nLocalSIDErrorMessageID = IDS_LOCAL_ACCOUNTS_SPECIFIED_SMB; return S_OK; } //*** CClusterFileShareSecurityInformation::HrInit() //*************************************************************************// ///////////////////////////////////////////////////////////////////////////// // CClusterFileShareSecurityPage security property page ///////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////// //++ // // CClusterFileShareSecurityPage::CClusterFileShareSecurityPage // // Routine Description: // Default contructor // // Arguments: // none // // Return Value: // none // //-- ///////////////////////////////////////////////////////////////////////////// CClusterFileShareSecurityPage::CClusterFileShareSecurityPage( void ) : m_hpage( 0 ) , m_hkey( 0 ) , m_psecinfo( NULL ) , m_pss( NULL ) { // AFX_MANAGE_STATE( AfxGetStaticModuleState() ); } //*** CClusterFileShareSecurityPage::CClusterFileShareSecurityPage() ///////////////////////////////////////////////////////////////////////////// //++ // // CClusterFileShareSecurityPage::~CClusterFileShareSecurityPage // // Routine Description: // Destructor // // Arguments: // none // // Return Value: // none // //-- ///////////////////////////////////////////////////////////////////////////// CClusterFileShareSecurityPage::~CClusterFileShareSecurityPage( void ) { AFX_MANAGE_STATE( AfxGetStaticModuleState() ); m_psecinfo->Release(); } //*** CClusterFileShareSecurityPage::~CClusterFileShareSecurityPage() ///////////////////////////////////////////////////////////////////////////// //++ // // CClusterFileShareSecurityPage::HrInit // // Routine Description: // // // Arguments: // // // Return Value: // // //-- ///////////////////////////////////////////////////////////////////////////// HRESULT CClusterFileShareSecurityPage::HrInit( IN CExtObject * peo, IN CFileShareSecuritySheet * pss, IN CString const & strNode ) { ASSERT( peo != NULL ); ASSERT( pss != NULL ); AFX_MANAGE_STATE( AfxGetStaticModuleState() ); HRESULT hr = E_FAIL; if ( ( pss != NULL ) && ( peo != NULL ) ) { m_peo = peo; m_pss = pss; hr = CComObject::CreateInstance( &m_psecinfo ); if ( SUCCEEDED( hr ) ) { m_psecinfo->AddRef(); m_hkey = GetClusterKey( Hcluster(), KEY_ALL_ACCESS ); if ( m_hkey != NULL ) { m_hpage = CreateClusterSecurityPage( m_psecinfo ); if ( m_hpage != NULL ) { CString strServer; strServer.Format( _T( "\\\\%s" ), Peo()->StrClusterName() ); hr = m_psecinfo->HrInit( this, strServer, strNode ); } else { hr = E_FAIL; } } else { DWORD sc = ::GetLastError(); hr = HRESULT_FROM_WIN32( sc ); } } } return hr; } //*** CClusterFileShareSecurityPage::HrInit()