749 lines
17 KiB
C++
749 lines
17 KiB
C++
|
//+---------------------------------------------------------------------------
|
||
|
//
|
||
|
// Microsoft Windows
|
||
|
// Copyright (C) Microsoft Corporation, 1997-1998
|
||
|
//
|
||
|
// File: ScopeAdm.cxx
|
||
|
//
|
||
|
// Contents: CI Scope Administration Interface methods
|
||
|
//
|
||
|
// Classes: CScopeAdm
|
||
|
//
|
||
|
// History: 12-10-97 mohamedn created
|
||
|
//
|
||
|
//----------------------------------------------------------------------------
|
||
|
|
||
|
#include "pch.cxx"
|
||
|
#pragma hdrstop
|
||
|
|
||
|
#include "stdafx.h"
|
||
|
|
||
|
//+---------------------------------------------------------------------------
|
||
|
//
|
||
|
// Member: CScopeAdm::InterfaceSupportsErrorInfo, public
|
||
|
//
|
||
|
// Arguments: [riid] -- interface iid
|
||
|
//
|
||
|
// Returns: S_OK if interface supports IErrorInfo
|
||
|
//
|
||
|
// History: 12-10-97 mohamedn created
|
||
|
//
|
||
|
//----------------------------------------------------------------------------
|
||
|
|
||
|
STDMETHODIMP CScopeAdm::InterfaceSupportsErrorInfo(REFIID riid)
|
||
|
{
|
||
|
return ( riid == IID_IScopeAdm );
|
||
|
}
|
||
|
|
||
|
//+---------------------------------------------------------------------------
|
||
|
//
|
||
|
// Member: CScopeAdm::SetErrorInfo, public
|
||
|
//
|
||
|
// Synopsis: Creates & sets the error object
|
||
|
//
|
||
|
// Arguments: [hRes] -- HRESULT error code to set
|
||
|
// [ pwszDesc] -- error description
|
||
|
//
|
||
|
// Returns: S_OK upon success, other values upon failure
|
||
|
//
|
||
|
// History: 12-10-97 mohamedn created
|
||
|
//
|
||
|
//----------------------------------------------------------------------------
|
||
|
|
||
|
void CScopeAdm::SetErrorInfo( HRESULT hRes )
|
||
|
{
|
||
|
CiodmError err(hRes);
|
||
|
|
||
|
AtlSetErrorInfo(CLSID_ScopeAdm, err.GetErrorMessage(), 0 , 0, IID_IScopeAdm, hRes, 0 );
|
||
|
}
|
||
|
|
||
|
//+---------------------------------------------------------------------------
|
||
|
//
|
||
|
// Member: CScopeAdm::Initialize, public
|
||
|
//
|
||
|
// Synopsis: Initializes CScopeAdm object
|
||
|
//
|
||
|
// Arguments: [xScopeAdmin] -- CScopeAdmin to encapsulate.
|
||
|
//
|
||
|
// History: 12-10-97 mohamedn created
|
||
|
//
|
||
|
//----------------------------------------------------------------------------
|
||
|
|
||
|
void CScopeAdm::Initialize( XPtr<CScopeAdmin> & xScopeAdmin )
|
||
|
{
|
||
|
Win4Assert( _pICatAdm );
|
||
|
Win4Assert( !xScopeAdmin.IsNull() );
|
||
|
|
||
|
_xScopeAdmin.Set( xScopeAdmin.Acquire() );
|
||
|
|
||
|
_fValid = TRUE;
|
||
|
}
|
||
|
|
||
|
//+---------------------------------------------------------------------------
|
||
|
//
|
||
|
// Member: CScopeAdm::InternalAddRef, public
|
||
|
//
|
||
|
// Synopsis: overrides CComObjectRootEx<Base>::InternalAddRef, to AddRef parent too
|
||
|
//
|
||
|
// Arguments: none
|
||
|
//
|
||
|
// History: 12-10-97 mohamedn created
|
||
|
//
|
||
|
//----------------------------------------------------------------------------
|
||
|
ULONG CScopeAdm::InternalAddRef()
|
||
|
{
|
||
|
CLock lock(_mtx);
|
||
|
|
||
|
//
|
||
|
// AddRef self
|
||
|
//
|
||
|
unsigned cRef = CComObjectRootEx<CComMultiThreadModel>::InternalAddRef();
|
||
|
|
||
|
odmDebugOut(( DEB_TRACE,"CScopeAdm(%ws) AddRef returned: %d\n",
|
||
|
_xScopeAdmin.IsNull() ? L"" : _xScopeAdmin->GetPath(), cRef ));
|
||
|
|
||
|
//
|
||
|
// AddRef parent. It won't exist if the object is created independently
|
||
|
//
|
||
|
|
||
|
if ( 0 != _pICatAdm )
|
||
|
_pICatAdm->AddRef();
|
||
|
|
||
|
return cRef;
|
||
|
} //InternalAddRef
|
||
|
|
||
|
//+---------------------------------------------------------------------------
|
||
|
//
|
||
|
// Member: CScopeAdm::InternalRelease, public
|
||
|
//
|
||
|
// Synopsis: overrides CComObjectRootEx<Base>::InternalRelease, to release parent too.
|
||
|
//
|
||
|
// Arguments: none
|
||
|
//
|
||
|
// History: 12-10-97 mohamedn created
|
||
|
//
|
||
|
//----------------------------------------------------------------------------
|
||
|
|
||
|
ULONG CScopeAdm::InternalRelease()
|
||
|
{
|
||
|
CLock lock(_mtx);
|
||
|
|
||
|
//
|
||
|
// Rlease parent
|
||
|
//
|
||
|
|
||
|
if ( ( 0 != _pICatAdm ) &&
|
||
|
( 1 == m_dwRef ) ) // we're being deleted
|
||
|
{
|
||
|
_pICatAdm->DecObjectCount();
|
||
|
}
|
||
|
|
||
|
//
|
||
|
// Release self
|
||
|
//
|
||
|
unsigned cRef = CComObjectRootEx<CComMultiThreadModel>::InternalRelease();
|
||
|
|
||
|
if ( 0 != _pICatAdm )
|
||
|
_pICatAdm->Release();
|
||
|
|
||
|
return cRef;
|
||
|
} //InternalRelease
|
||
|
|
||
|
//+---------------------------------------------------------------------------
|
||
|
//
|
||
|
// Member: CScopeAdm::Rescan, public
|
||
|
//
|
||
|
// Synopsis: Forces a rescan
|
||
|
//
|
||
|
// Arguments: [fFull] -- TRUE --> full rescan, FALSE --> incremental
|
||
|
//
|
||
|
// Returns: S_OK upon success, other values upon failure
|
||
|
//
|
||
|
// History: 12-10-97 mohamedn created
|
||
|
//
|
||
|
//----------------------------------------------------------------------------
|
||
|
|
||
|
STDMETHODIMP CScopeAdm::Rescan(VARIANT_BOOL fFull)
|
||
|
{
|
||
|
|
||
|
SCODE sc = S_OK;
|
||
|
|
||
|
CLock lock(_mtx);
|
||
|
|
||
|
TRANSLATE_EXCEPTIONS;
|
||
|
TRY
|
||
|
{
|
||
|
SafeForScripting();
|
||
|
|
||
|
if ( !_fValid )
|
||
|
{
|
||
|
odmDebugOut(( DEB_ERROR, "Invalid Scope: %ws\n", _xScopeAdmin->GetPath() ));
|
||
|
|
||
|
sc = HRESULT_FROM_WIN32( ERROR_INVALID_STATE );
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
CCatalogAdmin * pCatalogAdmin = _pICatAdm->GetCatalogAdmin();
|
||
|
|
||
|
Win4Assert( pCatalogAdmin );
|
||
|
|
||
|
sc = UpdateContentIndex( _xScopeAdmin->GetPath(), // root of scope to scan for updates
|
||
|
pCatalogAdmin->GetName(), // catalog name
|
||
|
pCatalogAdmin->GetMachName(),// machine name
|
||
|
fFull );
|
||
|
}
|
||
|
}
|
||
|
CATCH( CException, e )
|
||
|
{
|
||
|
sc = e.GetErrorCode();
|
||
|
}
|
||
|
END_CATCH
|
||
|
UNTRANSLATE_EXCEPTIONS;
|
||
|
|
||
|
if ( FAILED(sc) )
|
||
|
{
|
||
|
odmDebugOut(( DEB_ERROR, "Rescan Failed: %x\n",sc ));
|
||
|
|
||
|
SetErrorInfo( sc );
|
||
|
}
|
||
|
|
||
|
return sc;
|
||
|
}
|
||
|
|
||
|
//+---------------------------------------------------------------------------
|
||
|
//
|
||
|
// Member: CScopeAdm::SetLogonInfo, public
|
||
|
//
|
||
|
// Synopsis: Sets Logon Name/password
|
||
|
//
|
||
|
// Arguments: [bstrLogon] -- Logon name
|
||
|
// [bstrPassword] -- password
|
||
|
//
|
||
|
// Returns: S_OK upon success, other values upon failure
|
||
|
//
|
||
|
// History: 12-10-97 mohamedn created
|
||
|
//
|
||
|
//----------------------------------------------------------------------------
|
||
|
|
||
|
STDMETHODIMP CScopeAdm::SetLogonInfo( BSTR bstrLogon, BSTR bstrPassword )
|
||
|
{
|
||
|
SCODE sc = S_OK;
|
||
|
|
||
|
CLock lock(_mtx);
|
||
|
|
||
|
TRANSLATE_EXCEPTIONS;
|
||
|
TRY
|
||
|
{
|
||
|
|
||
|
SafeForScripting();
|
||
|
|
||
|
ValidateInputParam( bstrLogon );
|
||
|
|
||
|
ValidateInputParam( bstrPassword );
|
||
|
|
||
|
if ( !_fValid )
|
||
|
{
|
||
|
odmDebugOut(( DEB_ERROR, "Invalid Scope: %ws\n", _xScopeAdmin->GetPath() ));
|
||
|
|
||
|
sc = HRESULT_FROM_WIN32( ERROR_INVALID_STATE );
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
CCatalogAdmin * pCatalogAdmin = _pICatAdm->GetCatalogAdmin();
|
||
|
WCHAR const * pwszPath = _xScopeAdmin->GetPath();
|
||
|
|
||
|
Win4Assert( pCatalogAdmin );
|
||
|
Win4Assert( pwszPath );
|
||
|
|
||
|
if ( pwszPath[1] == L':' )
|
||
|
{
|
||
|
odmDebugOut(( DEB_ERROR, "Can't set Logon info for local drives\n" ));
|
||
|
|
||
|
sc = E_INVALIDARG;
|
||
|
}
|
||
|
else if ( bstrLogon && *bstrLogon )
|
||
|
{
|
||
|
_xScopeAdmin->SetLogonInfo( bstrLogon, bstrPassword, *pCatalogAdmin );
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
odmDebugOut(( DEB_ERROR, "invalid logon arguments\n" ));
|
||
|
|
||
|
sc = E_INVALIDARG;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
CATCH( CException, e )
|
||
|
{
|
||
|
sc = e.GetErrorCode();
|
||
|
}
|
||
|
END_CATCH
|
||
|
UNTRANSLATE_EXCEPTIONS;
|
||
|
|
||
|
if ( FAILED(sc) )
|
||
|
{
|
||
|
odmDebugOut(( DEB_ERROR, "SetLogonInfo Failed: %x\n",sc ));
|
||
|
|
||
|
SetErrorInfo( sc );
|
||
|
}
|
||
|
|
||
|
return sc;
|
||
|
}
|
||
|
|
||
|
//+---------------------------------------------------------------------------
|
||
|
//
|
||
|
// Member: CScopeAdm::get_Path, public
|
||
|
//
|
||
|
// Synopsis: Gets the scope path Property
|
||
|
//
|
||
|
// Arguments: [pVal] -- out param, buffer containing scope path
|
||
|
//
|
||
|
// Returns: S_OK upon success, other values upon failure.
|
||
|
//
|
||
|
// History: 12-10-97 mohamedn created
|
||
|
//
|
||
|
//----------------------------------------------------------------------------
|
||
|
|
||
|
STDMETHODIMP CScopeAdm::get_Path(BSTR * pVal)
|
||
|
{
|
||
|
SCODE sc = S_OK;
|
||
|
|
||
|
CLock lock(_mtx);
|
||
|
|
||
|
TRANSLATE_EXCEPTIONS;
|
||
|
TRY
|
||
|
{
|
||
|
SafeForScripting();
|
||
|
|
||
|
if ( !_fValid )
|
||
|
{
|
||
|
odmDebugOut(( DEB_ERROR, "Invalid Scope: %ws\n", _xScopeAdmin->GetPath() ));
|
||
|
|
||
|
sc = HRESULT_FROM_WIN32( ERROR_INVALID_STATE );
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
WCHAR const * pwszPath = _xScopeAdmin->GetPath();
|
||
|
|
||
|
*pVal = SysAllocString(pwszPath);
|
||
|
if ( !*pVal )
|
||
|
{
|
||
|
sc = E_OUTOFMEMORY;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
CATCH( CException, e )
|
||
|
{
|
||
|
sc = e.GetErrorCode();
|
||
|
}
|
||
|
END_CATCH
|
||
|
UNTRANSLATE_EXCEPTIONS;
|
||
|
|
||
|
if ( FAILED(sc) )
|
||
|
{
|
||
|
odmDebugOut(( DEB_ERROR, "get_PathRescan Failed: %x\n",sc ));
|
||
|
|
||
|
SetErrorInfo( sc );
|
||
|
}
|
||
|
|
||
|
return sc;
|
||
|
}
|
||
|
|
||
|
//+---------------------------------------------------------------------------
|
||
|
//
|
||
|
// Member: CScopeAdm::put_Path, public
|
||
|
//
|
||
|
// Synopsis: Sets the scope path Property
|
||
|
//
|
||
|
// Arguments: [newVal] -- in param, buffer containing scope path
|
||
|
//
|
||
|
// Returns: S_OK upon success, other values upon failure.
|
||
|
//
|
||
|
// History: 12-10-97 mohamedn created
|
||
|
//
|
||
|
//----------------------------------------------------------------------------
|
||
|
|
||
|
STDMETHODIMP CScopeAdm::put_Path(BSTR newVal)
|
||
|
{
|
||
|
SCODE sc = S_OK;
|
||
|
CLock lock(_mtx);
|
||
|
|
||
|
TRANSLATE_EXCEPTIONS;
|
||
|
TRY
|
||
|
{
|
||
|
SafeForScripting();
|
||
|
|
||
|
ValidateInputParam( newVal );
|
||
|
|
||
|
if ( !_fValid )
|
||
|
{
|
||
|
odmDebugOut(( DEB_ERROR, "Invalid Scope: %ws\n", _xScopeAdmin->GetPath() ));
|
||
|
|
||
|
sc = HRESULT_FROM_WIN32( ERROR_INVALID_STATE );
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
if ( _xScopeAdmin->IsVirtual() )
|
||
|
{
|
||
|
odmDebugOut(( DEB_ERROR, "Can't change virtual path, must use IIS\n" ));
|
||
|
|
||
|
sc = HRESULT_FROM_WIN32(ERROR_INVALID_FUNCTION);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
_xScopeAdmin->SetPath(newVal);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
}
|
||
|
CATCH( CException, e )
|
||
|
{
|
||
|
sc = e.GetErrorCode();
|
||
|
}
|
||
|
END_CATCH
|
||
|
UNTRANSLATE_EXCEPTIONS;
|
||
|
|
||
|
if ( FAILED(sc) )
|
||
|
{
|
||
|
odmDebugOut(( DEB_ERROR, "put_PathRescan Failed: %x\n",sc ));
|
||
|
|
||
|
SetErrorInfo( sc );
|
||
|
}
|
||
|
|
||
|
return sc;
|
||
|
}
|
||
|
|
||
|
//+---------------------------------------------------------------------------
|
||
|
//
|
||
|
// Member: CScopeAdm::get_Alias, public
|
||
|
//
|
||
|
// Synopsis: Gets the scope Alias Property
|
||
|
//
|
||
|
// Arguments: [pVal] -- out param, buffer containing scope Alias
|
||
|
//
|
||
|
// Returns: S_OK upon success, other values upon failure.
|
||
|
//
|
||
|
// History: 12-10-97 mohamedn created
|
||
|
//
|
||
|
//----------------------------------------------------------------------------
|
||
|
|
||
|
STDMETHODIMP CScopeAdm::get_Alias(BSTR * pVal)
|
||
|
{
|
||
|
SCODE sc = S_OK;
|
||
|
|
||
|
CLock lock(_mtx);
|
||
|
|
||
|
TRANSLATE_EXCEPTIONS;
|
||
|
TRY
|
||
|
{
|
||
|
SafeForScripting();
|
||
|
|
||
|
if ( !_fValid )
|
||
|
{
|
||
|
odmDebugOut(( DEB_ERROR, "Invalid Scope: %ws\n", _xScopeAdmin->GetPath() ));
|
||
|
|
||
|
sc = HRESULT_FROM_WIN32( ERROR_INVALID_STATE );
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
WCHAR const * pwszAlias = _xScopeAdmin->GetAlias();
|
||
|
|
||
|
*pVal = SysAllocString(pwszAlias);
|
||
|
if ( !*pVal )
|
||
|
{
|
||
|
sc = E_OUTOFMEMORY;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
CATCH( CException, e )
|
||
|
{
|
||
|
sc = e.GetErrorCode();
|
||
|
}
|
||
|
END_CATCH
|
||
|
UNTRANSLATE_EXCEPTIONS;
|
||
|
|
||
|
if ( FAILED(sc) )
|
||
|
{
|
||
|
odmDebugOut(( DEB_ERROR, "get_Alias Failed: %x\n",sc ));
|
||
|
|
||
|
SetErrorInfo( sc );
|
||
|
}
|
||
|
|
||
|
return sc;
|
||
|
}
|
||
|
|
||
|
//+---------------------------------------------------------------------------
|
||
|
//
|
||
|
// Member: CScopeAdm::put_Alias , public
|
||
|
//
|
||
|
// Synopsis: Sets the scope alias Property
|
||
|
//
|
||
|
// Arguments: [newVal] -- in param, buffer containing scope alias
|
||
|
//
|
||
|
// Returns: S_OK upon success, other values upon failure.
|
||
|
//
|
||
|
// History: 12-10-97 mohamedn created
|
||
|
//
|
||
|
//----------------------------------------------------------------------------
|
||
|
|
||
|
STDMETHODIMP CScopeAdm::put_Alias(BSTR newVal)
|
||
|
{
|
||
|
|
||
|
SCODE sc = S_OK;
|
||
|
|
||
|
CLock lock(_mtx);
|
||
|
|
||
|
TRANSLATE_EXCEPTIONS;
|
||
|
TRY
|
||
|
{
|
||
|
SafeForScripting();
|
||
|
|
||
|
ValidateInputParam( newVal );
|
||
|
|
||
|
if ( !_fValid )
|
||
|
{
|
||
|
odmDebugOut(( DEB_ERROR, "Invalid Scope: %ws\n", _xScopeAdmin->GetPath() ));
|
||
|
|
||
|
sc = HRESULT_FROM_WIN32( ERROR_INVALID_STATE );
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
_xScopeAdmin->SetAlias(newVal);
|
||
|
}
|
||
|
}
|
||
|
CATCH( CException, e )
|
||
|
{
|
||
|
sc = e.GetErrorCode();
|
||
|
}
|
||
|
END_CATCH
|
||
|
UNTRANSLATE_EXCEPTIONS;
|
||
|
|
||
|
if ( FAILED(sc) )
|
||
|
{
|
||
|
odmDebugOut(( DEB_ERROR, "put_Alias Failed: %x\n",sc ));
|
||
|
|
||
|
SetErrorInfo( sc );
|
||
|
}
|
||
|
|
||
|
return sc;
|
||
|
}
|
||
|
|
||
|
//+---------------------------------------------------------------------------
|
||
|
//
|
||
|
// Member: CScopeAdm::get_ExcludeScope, public
|
||
|
//
|
||
|
// Synopsis: Gets the exclude scope Property
|
||
|
//
|
||
|
// Arguments: [pVal] -- out param, containing exclude scope flag
|
||
|
//
|
||
|
// Returns: S_OK upon success, other values upon failure.
|
||
|
//
|
||
|
// History: 12-10-97 mohamedn created
|
||
|
//
|
||
|
//----------------------------------------------------------------------------
|
||
|
|
||
|
STDMETHODIMP CScopeAdm::get_ExcludeScope(VARIANT_BOOL * pVal)
|
||
|
{
|
||
|
SCODE sc = S_OK;
|
||
|
|
||
|
CLock lock(_mtx);
|
||
|
|
||
|
TRANSLATE_EXCEPTIONS;
|
||
|
TRY
|
||
|
{
|
||
|
SafeForScripting();
|
||
|
|
||
|
if ( !_fValid )
|
||
|
{
|
||
|
odmDebugOut(( DEB_ERROR, "Invalid Scope: %ws\n", _xScopeAdmin->GetPath() ));
|
||
|
|
||
|
sc = HRESULT_FROM_WIN32( ERROR_INVALID_STATE );
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
*pVal = (SHORT)_xScopeAdmin->IsExclude();
|
||
|
}
|
||
|
}
|
||
|
CATCH( CException, e )
|
||
|
{
|
||
|
sc = e.GetErrorCode();
|
||
|
}
|
||
|
END_CATCH
|
||
|
UNTRANSLATE_EXCEPTIONS;
|
||
|
|
||
|
if ( FAILED(sc) )
|
||
|
{
|
||
|
odmDebugOut(( DEB_ERROR, "get_ExcludeScope Failed: %x\n",sc ));
|
||
|
|
||
|
SetErrorInfo( sc );
|
||
|
}
|
||
|
|
||
|
return sc;
|
||
|
}
|
||
|
|
||
|
//+---------------------------------------------------------------------------
|
||
|
//
|
||
|
// Member: CScopeAdm::put_ExcludeScope , public
|
||
|
//
|
||
|
// Synopsis: Sets the scope Exclude flag Property
|
||
|
//
|
||
|
// Arguments: [newVal] -- in param, Exclude scope flag to set
|
||
|
//
|
||
|
// Returns: S_OK upon success, other values upon failure.
|
||
|
//
|
||
|
// History: 12-10-97 mohamedn created
|
||
|
//
|
||
|
//----------------------------------------------------------------------------
|
||
|
|
||
|
STDMETHODIMP CScopeAdm::put_ExcludeScope(VARIANT_BOOL newVal)
|
||
|
{
|
||
|
SCODE sc = S_OK;
|
||
|
|
||
|
CLock lock(_mtx);
|
||
|
|
||
|
TRANSLATE_EXCEPTIONS;
|
||
|
TRY
|
||
|
{
|
||
|
SafeForScripting();
|
||
|
|
||
|
if ( !_fValid )
|
||
|
{
|
||
|
odmDebugOut(( DEB_ERROR, "Invalid Scope: %ws\n", _xScopeAdmin->GetPath() ));
|
||
|
|
||
|
sc = HRESULT_FROM_WIN32( ERROR_INVALID_STATE );
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
_xScopeAdmin->SetExclude(newVal);
|
||
|
}
|
||
|
}
|
||
|
CATCH( CException, e )
|
||
|
{
|
||
|
|
||
|
sc = e.GetErrorCode();
|
||
|
}
|
||
|
END_CATCH
|
||
|
UNTRANSLATE_EXCEPTIONS;
|
||
|
|
||
|
if ( FAILED(sc) )
|
||
|
{
|
||
|
odmDebugOut(( DEB_ERROR, "put_ExcludeScope Failed: %x\n",sc ));
|
||
|
|
||
|
SetErrorInfo( sc );
|
||
|
}
|
||
|
|
||
|
return sc;
|
||
|
}
|
||
|
|
||
|
//+---------------------------------------------------------------------------
|
||
|
//
|
||
|
// Member: CScopeAdm::get_VirtualScope, public
|
||
|
//
|
||
|
// Synopsis: Gets the VirtualScope property
|
||
|
//
|
||
|
// Arguments: [pVal] -- out param, containing VirtualScope flag
|
||
|
//
|
||
|
// Returns: S_OK upon success, other values upon failure.
|
||
|
//
|
||
|
// History: 12-10-97 mohamedn created
|
||
|
//
|
||
|
//----------------------------------------------------------------------------
|
||
|
|
||
|
STDMETHODIMP CScopeAdm::get_VirtualScope(VARIANT_BOOL * pVal)
|
||
|
{
|
||
|
SCODE sc = S_OK;
|
||
|
|
||
|
CLock lock(_mtx);
|
||
|
|
||
|
TRANSLATE_EXCEPTIONS;
|
||
|
TRY
|
||
|
{
|
||
|
SafeForScripting();
|
||
|
|
||
|
if ( !_fValid )
|
||
|
{
|
||
|
odmDebugOut(( DEB_ERROR, "Invalid Scope: %ws\n", _xScopeAdmin->GetPath() ));
|
||
|
|
||
|
sc = HRESULT_FROM_WIN32( ERROR_INVALID_STATE );
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
*pVal = (SHORT)_xScopeAdmin->IsVirtual();
|
||
|
}
|
||
|
}
|
||
|
CATCH( CException, e )
|
||
|
{
|
||
|
sc = e.GetErrorCode();
|
||
|
}
|
||
|
END_CATCH
|
||
|
UNTRANSLATE_EXCEPTIONS;
|
||
|
|
||
|
if ( FAILED(sc) )
|
||
|
{
|
||
|
odmDebugOut(( DEB_ERROR, "get_VirtualScope Failed: %x\n",sc ));
|
||
|
|
||
|
SetErrorInfo( sc );
|
||
|
}
|
||
|
|
||
|
return sc;
|
||
|
}
|
||
|
|
||
|
//+---------------------------------------------------------------------------
|
||
|
//
|
||
|
// Member: CScopeAdm::get_Logon, public
|
||
|
//
|
||
|
// Synopsis: Gets the logon name
|
||
|
//
|
||
|
// Arguments: [pVal] -- out param, containing logon name
|
||
|
//
|
||
|
// Returns: S_OK upon success, other values upon failure.
|
||
|
//
|
||
|
// History: 12-10-97 mohamedn created
|
||
|
//
|
||
|
//----------------------------------------------------------------------------
|
||
|
|
||
|
STDMETHODIMP CScopeAdm::get_Logon(BSTR * pVal)
|
||
|
{
|
||
|
SCODE sc = S_OK;
|
||
|
|
||
|
CLock lock(_mtx);
|
||
|
|
||
|
TRANSLATE_EXCEPTIONS;
|
||
|
TRY
|
||
|
{
|
||
|
SafeForScripting();
|
||
|
|
||
|
if ( !_fValid )
|
||
|
{
|
||
|
odmDebugOut(( DEB_ERROR, "Invalid Scope: %ws\n", _xScopeAdmin->GetPath() ));
|
||
|
|
||
|
sc = HRESULT_FROM_WIN32( ERROR_INVALID_STATE );
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
WCHAR const * pwszLogon = _xScopeAdmin->GetLogon();
|
||
|
|
||
|
*pVal = SysAllocString(pwszLogon);
|
||
|
if ( !*pVal )
|
||
|
{
|
||
|
sc = E_OUTOFMEMORY;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
CATCH( CException, e )
|
||
|
{
|
||
|
sc = e.GetErrorCode();
|
||
|
}
|
||
|
END_CATCH
|
||
|
UNTRANSLATE_EXCEPTIONS;
|
||
|
|
||
|
if ( FAILED(sc) )
|
||
|
{
|
||
|
odmDebugOut(( DEB_ERROR, "get_Logon Failed: %x\n",sc ));
|
||
|
|
||
|
SetErrorInfo( sc );
|
||
|
}
|
||
|
|
||
|
return sc;
|
||
|
}
|