//+------------------------------------------------------------------------- // // Microsoft Windows // Copyright (C) Microsoft Corporation, 1996 - 1998 // // File: Catalog.cxx // // Contents: Used to manage catalog(s) state // // History: 27-Nov-1996 KyleP Created // //-------------------------------------------------------------------------- #include #pragma hdrstop #include #include extern "C" { #include } #include // // Global data // SScopeColumn coldefScope[] = { { CScope::GetPath, MSG_COL_ROOT }, { CScope::GetAlias, MSG_COL_ALIAS }, { CScope::GetInclude, MSG_COL_EXCLUDE } }; BOOL CScope::_fFirstTime = TRUE; CScope::CScope( CCatalog & cat, WCHAR const * pwcsPath, WCHAR const * pwcsAlias, BOOL fExclude, BOOL fVirtual, BOOL fShadowAlias ) : _pwcsPath( 0 ), _pwcsAlias( 0 ), _fExclude( fExclude ), _fVirtual( fVirtual ), _fShadowAlias( fShadowAlias ), _fZombie( FALSE ), _cat( cat ) { TRY { Set( pwcsPath, _pwcsPath ); Set( pwcsAlias, _pwcsAlias ); } CATCH( CException, e ) { delete [] _pwcsPath; delete [] _pwcsAlias; RETHROW(); } END_CATCH } CScope::~CScope() { delete [] _pwcsPath; delete [] _pwcsAlias; } void CScope::Modify(WCHAR const * pwcsPath, WCHAR const * pwcsAlias, BOOL fExclude) { Win4Assert( !IsZombie() ); Reset( pwcsPath, _pwcsPath ); Reset( pwcsAlias, _pwcsAlias ); _fExclude = fExclude; } void CScope::InitHeader( CListViewHeader & Header ) { // // Initialize header // for ( unsigned i = 0; i < sizeof(coldefScope)/sizeof(coldefScope[0]); i++ ) { if ( _fFirstTime ) coldefScope[i].srTitle.Init( ghInstance ); Header.Add( i, STRINGRESOURCE(coldefScope[i].srTitle), LVCFMT_LEFT, MMCLV_AUTO ); } _fFirstTime = FALSE; } void CScope::Set( WCHAR const * pwcsSrc, WCHAR * & pwcsDst ) { if ( 0 == pwcsSrc ) { pwcsDst = new WCHAR[1]; RtlCopyMemory( pwcsDst, L"", sizeof(WCHAR) ); } else { unsigned cc = wcslen( pwcsSrc ) + 1; pwcsDst = new WCHAR [cc]; RtlCopyMemory( pwcsDst, pwcsSrc, cc * sizeof(WCHAR) ); } } void CScope::Reset( WCHAR const * pwcsSrc, WCHAR * & pwcsDst ) { delete pwcsDst; Set(pwcsSrc, pwcsDst); } void CScope::Rescan( BOOL fFull ) { _cat.RescanScope( _pwcsPath, fFull ); } // The username and password are not stored locally. They will // be retrieved on demand from the catadmin object. SCODE CScope::GetUsername(WCHAR *pwszLogon) { SCODE sc = S_OK; TRY { // // First, remove from CI. // CMachineAdmin MachineAdmin( _cat.GetMachine() ); XPtr xCatalogAdmin( MachineAdmin.QueryCatalogAdmin( _cat.GetCat(TRUE) ) ); XPtr xScopeAdmin( xCatalogAdmin->QueryScopeAdmin(_pwcsPath) ); if ( !xScopeAdmin.IsNull() ) wcscpy(pwszLogon, xScopeAdmin->GetLogon()); } CATCH (CException, e) { sc = e.GetErrorCode(); } END_CATCH return sc; } SCODE CScope::GetPassword(WCHAR *pwszPassword) { WCHAR szLogon[UNLEN + 1]; szLogon[0] = 0; GetUsername(szLogon); *pwszPassword = 0; BOOL fOK = TRUE; // don't attempt to get pwd of a NULL logon name! if (0 != szLogon[0]) CiGetPassword(_cat.GetCat(TRUE), szLogon, pwszPassword); return fOK ? S_OK:S_FALSE; }