|
|
//---------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1992 - 1997
//
// File: cnamesp.cxx
//
// Contents: Namespace Object
//
// History: 01-30-95 krishnag Created.
//
//----------------------------------------------------------------------------
#include "iis.hxx"
#pragma hdrstop
DEFINE_IDispatch_Implementation(CIISNamespace) DEFINE_IADs_Implementation(CIISNamespace)
// Class CIISNamespace
CIISNamespace::CIISNamespace() { VariantInit(&_vFilter);
ENLIST_TRACKING(CIISNamespace); }
HRESULT CIISNamespace::CreateNamespace( BSTR Parent, BSTR NamespaceName, CCredentials& Credentials, DWORD dwObjectState, REFIID riid, void **ppvObj ) { CIISNamespace FAR * pNamespace = NULL; HRESULT hr = S_OK;
hr = AllocateNamespaceObject( Credentials, &pNamespace ); BAIL_ON_FAILURE(hr);
hr = pNamespace->InitializeCoreObject( Parent, NamespaceName, L"Namespace", L"", CLSID_IISNamespace, dwObjectState ); BAIL_ON_FAILURE(hr);
hr = pNamespace->QueryInterface(riid, ppvObj); BAIL_ON_FAILURE(hr);
pNamespace->Release();
RRETURN(hr);
error:
delete pNamespace; RRETURN(hr); }
CIISNamespace::~CIISNamespace( ) { VariantClear(&_vFilter); delete _pDispMgr; }
STDMETHODIMP CIISNamespace::QueryInterface(REFIID iid, LPVOID FAR* ppv) { if (IsEqualIID(iid, IID_IUnknown)) { *ppv = (IADs FAR *)this; }else if (IsEqualIID(iid, IID_IDispatch)) { *ppv = (IADs FAR *)this; } else if (IsEqualIID(iid, IID_IADsContainer)) { *ppv = (IADsContainer FAR *) this; } else if (IsEqualIID(iid, IID_IADs)) { *ppv = (IADs FAR *) this; } else if (IsEqualIID(iid, IID_IADsOpenDSObject)) { *ppv = (IADsOpenDSObject FAR *) this; } else { *ppv = NULL; return E_NOINTERFACE; } AddRef(); return NOERROR; }
STDMETHODIMP CIISNamespace::SetInfo(THIS) { RRETURN(E_NOTIMPL); }
STDMETHODIMP CIISNamespace::GetInfo(THIS) { RRETURN(E_NOTIMPL); }
/* IADsContainer methods */
STDMETHODIMP CIISNamespace::get_Count(long FAR* retval) { RRETURN(E_NOTIMPL); }
STDMETHODIMP CIISNamespace::get_Filter(THIS_ VARIANT FAR* pVar) { RRETURN(E_NOTIMPL); }
STDMETHODIMP CIISNamespace::put_Filter(THIS_ VARIANT Var) { RRETURN(E_NOTIMPL); }
STDMETHODIMP CIISNamespace::put_Hints(THIS_ VARIANT Var) { RRETURN( E_NOTIMPL); }
STDMETHODIMP CIISNamespace::get_Hints(THIS_ VARIANT FAR* pVar) { RRETURN(E_NOTIMPL); }
STDMETHODIMP CIISNamespace::GetObject( THIS_ BSTR ClassName, BSTR RelativeName, IDispatch * FAR* ppObject ) { HRESULT hr = S_OK;
hr = ::RelativeGetObject( _ADsPath, ClassName, RelativeName, _Credentials, ppObject, TRUE ); RRETURN(hr);
}
STDMETHODIMP CIISNamespace::get__NewEnum(THIS_ IUnknown * FAR* retval) { HRESULT hr; IUnknown FAR* punkEnum=NULL; IEnumVARIANT * penum = NULL;
*retval = NULL;
//
// Create new enumerator for items currently
// in collection and QI for IUnknown
//
hr = CIISNamespaceEnum::Create( (CIISNamespaceEnum **)&penum, _vFilter, _Credentials ); if (FAILED(hr)){
goto error; } hr = penum->QueryInterface( IID_IUnknown, (VOID FAR* FAR*)retval );
if (FAILED(hr)){ goto error; }
if (penum) { penum->Release(); }
return NOERROR;
error:
if (penum) { delete penum; }
return hr; }
STDMETHODIMP CIISNamespace::Create(THIS_ BSTR ClassName, BSTR RelativeName, IDispatch * FAR* ppObject) { RRETURN(E_NOTIMPL); }
STDMETHODIMP CIISNamespace::Delete(THIS_ BSTR SourceName, BSTR Type) { RRETURN(E_NOTIMPL); }
STDMETHODIMP CIISNamespace::CopyHere(THIS_ BSTR SourceName, BSTR NewName, IDispatch * FAR* ppObject) { RRETURN(E_NOTIMPL); }
STDMETHODIMP CIISNamespace::MoveHere(THIS_ BSTR SourceName, BSTR NewName, IDispatch * FAR* ppObject) { RRETURN(E_NOTIMPL); }
HRESULT CIISNamespace::AllocateNamespaceObject( CCredentials& Credentials, CIISNamespace ** ppNamespace ) { CIISNamespace FAR * pNamespace = NULL; CAggregatorDispMgr FAR * pDispMgr = NULL; HRESULT hr = S_OK;
pNamespace = new CIISNamespace(); if (pNamespace == NULL) { hr = E_OUTOFMEMORY; } BAIL_ON_FAILURE(hr);
pDispMgr = new CAggregatorDispMgr; if (pDispMgr == NULL) { hr = E_OUTOFMEMORY; } BAIL_ON_FAILURE(hr);
hr = pDispMgr->LoadTypeInfoEntry( LIBID_ADs, IID_IADs, (IADs *)pNamespace, DISPID_REGULAR ); BAIL_ON_FAILURE(hr);
hr = pDispMgr->LoadTypeInfoEntry( LIBID_ADs, IID_IADsOpenDSObject, (IADsOpenDSObject *)pNamespace, DISPID_REGULAR ); BAIL_ON_FAILURE(hr);
hr = pDispMgr->LoadTypeInfoEntry( LIBID_ADs, IID_IADsContainer, (IADsContainer *)pNamespace, DISPID_NEWENUM ); BAIL_ON_FAILURE(hr);
pNamespace->_Credentials = Credentials; pNamespace->_pDispMgr = pDispMgr; *ppNamespace = pNamespace;
RRETURN(hr);
error: if (pDispMgr) { delete pDispMgr; }
if (pNamespace) { delete pNamespace; }
RRETURN(hr); }
STDMETHODIMP CIISNamespace::Get( THIS_ BSTR bstrName, VARIANT FAR* pvProp ) {
//
// retrieve dataobject from cache; if one exists
//
//
//
//
RRETURN(E_NOTIMPL); }
STDMETHODIMP CIISNamespace::Put( THIS_ BSTR bstrName, VARIANT vProp ) { RRETURN(E_NOTIMPL); }
STDMETHODIMP CIISNamespace::GetEx( THIS_ BSTR bstrName, VARIANT FAR* pvProp ) { RRETURN(E_NOTIMPL); }
STDMETHODIMP CIISNamespace::PutEx( THIS_ long lnControlCode, BSTR bstrName, VARIANT vProp ) { RRETURN(E_NOTIMPL); }
STDMETHODIMP CIISNamespace::OpenDSObject( BSTR lpszDNName, BSTR lpszUserName, BSTR lpszPassword, LONG lnReserved, IDispatch FAR * * ppADsObj ) { HRESULT hr = S_OK; IUnknown * pObject = NULL; CCredentials Credentials;
hr = Credentials.SetUserName(lpszUserName); BAIL_ON_FAILURE(hr);
hr = Credentials.SetPassword(lpszPassword); BAIL_ON_FAILURE(hr);
hr = ::GetObject( lpszDNName, Credentials, (LPVOID *)&pObject ); BAIL_ON_FAILURE(hr);
hr = pObject->QueryInterface( IID_IDispatch, (void **)ppADsObj ); BAIL_ON_FAILURE(hr);
error:
if (pObject) { pObject->Release(); }
RRETURN(hr); }
|