|
|
//////////////////////////////////////////////////////////////////////////////////////////////////////////
//
// Microsoft WMIOLE DB Provider
// (C) Copyright 1999 Microsoft Corporation. All Rights Reserved.
//
//
// IDBDataSrcAdmin.cpp - IDBDataSourceAdmin interface implementation
//
//////////////////////////////////////////////////////////////////////////////////////////////////////////
#include "headers.h"
///////////////////////////////////////////////////////////////////////////////////////////////////////////
//
// CImpIDBDataSrcAdmin::CreateDataSource
//
// Creates a new Datasouce : ie creates a namespace
//
// Returns one of the following values:
// S_OK Method Succeeded
// DB_S_ERRORSOCCURRED new datasource was created but one or more properties was not set
// E_FAIL Provider-specific error
// E_INVALIDARG cPropertySets was not zero and rgPropertySets was null pointer
// E_OUTOFMEMORY Out of Memory
// OTHER Other HRESULTs returned by called functions
///////////////////////////////////////////////////////////////////////////////////////////////////////////
STDMETHODIMP CImpIDBDataSrcAdmin::CreateDataSource( ULONG cPropertySets, DBPROPSET rgPropertySets[ ], IUnknown * pUnkOuter, REFIID riid, IUnknown ** ppDBSession) { HRESULT hr = S_OK; CSetStructuredExceptionHandler seh;
TRY_BLOCK;
// Do nothing if no property was specified
if(cPropertySets != 0) { // Serialize the object
CAutoBlock cab(DATASOURCE->GetCriticalSection()); g_pCError->ClearErrorInfo();
if (m_pObj->m_fDSOInitialized) { hr = DB_E_ALREADYINITIALIZED; } else if( cPropertySets != 0 && rgPropertySets == NULL) { hr = E_INVALIDARG; } else if ( ppDBSession && (pUnkOuter) && (riid != IID_IUnknown) ) { hr = DB_E_NOAGGREGATION; } else { //===================================================================================
// Check Arguments for use by properties
//===================================================================================
if(SUCCEEDED(hr = m_pObj->m_pUtilProp->SetPropertiesArgChk(cPropertySets, rgPropertySets,m_pObj->m_fDSOInitialized))) { //===================================================================================
// just pass this call on to the utility object that manages our properties
//===================================================================================
if(SUCCEEDED(hr = m_pObj->m_pUtilProp->SetProperties(PROPSET_DSO,cPropertySets, rgPropertySets)) && SUCCEEDED(hr = m_pObj->InitializeConnectionProperties()) ) { if(SUCCEEDED(hr = m_pObj->m_pWbemWrap->CreateNameSpace())) { m_pObj->m_fDSOInitialized = TRUE; } } } }
// if session is to be created then
if(SUCCEEDED(hr) && ppDBSession) { hr = m_pObj->CreateSession(pUnkOuter,riid,ppDBSession); } } hr = hr == S_OK ? hr :g_pCError->PostHResult(hr,&IID_IDBDataSourceAdmin);
CATCH_BLOCK_HRESULT(hr,L"IDBDataSourceAdmin::CreateDataSource"); return hr; }
///////////////////////////////////////////////////////////////////////////////////////////////////////////
//
// CImpIDBDataSrcAdmin::DestroyDataSource
//
// Deletes a Datasouce : ie deletes a namespace
//
// Returns one of the following values:
// S_OK Method Succeeded
// E_FAIL Provider-specific error
// E_INVALIDARG cPropertySets was not zero and rgPropertySets was null pointer
// OTHER Other HRESULTs returned by called functions
///////////////////////////////////////////////////////////////////////////////////////////////////////////
STDMETHODIMP CImpIDBDataSrcAdmin::DestroyDataSource( void) { HRESULT hr = S_OK; CSetStructuredExceptionHandler seh;
TRY_BLOCK;
// Serialize the object
CAutoBlock cab(DATASOURCE->GetCriticalSection()); g_pCError->ClearErrorInfo();
if (!m_pObj->m_fDSOInitialized || (m_pObj->m_fDSOInitialized && m_pObj->m_fDBSessionCreated) ) { hr = E_UNEXPECTED; } else { if(SUCCEEDED(hr = m_pObj->m_pWbemWrap->DeleteNameSpace())) { m_pObj->m_fDSOInitialized = FALSE; } }
hr = hr == S_OK ? hr :g_pCError->PostHResult(hr,&IID_IDBDataSourceAdmin);
CATCH_BLOCK_HRESULT(hr,L"IDBDataSourceAdmin::DestroyDataSource"); return hr; }
///////////////////////////////////////////////////////////////////////////////////////////////////////////
//
// CImpIDBDataSrcAdmin::GetCreationProperties
//
// Gets datasource creation properties
//
// Returns one of the following values:
// S_OK Method Succeeded
// E_FAIL Provider-specific error
// DB_S_ERRORSOCCURRED One or more properties specified in were not supported
// E_INVALIDARG cPropertySets was not zero and rgPropertySets was null pointer
// E_OUTOFMEMORY out of memory
// DB_E_ERRORSOCCURRED values were not returned for any properties
// OTHER Other HRESULTs returned by called functions
///////////////////////////////////////////////////////////////////////////////////////////////////////////
STDMETHODIMP CImpIDBDataSrcAdmin::GetCreationProperties( ULONG cPropertyIDSets, const DBPROPIDSET rgPropertyIDSets[], ULONG * pcPropertyInfoSets, DBPROPINFOSET ** prgPropertyInfoSets, OLECHAR ** ppDescBuffer) { HRESULT hr = S_OK; CSetStructuredExceptionHandler seh; DWORD dwBitMask = PROPSET_DSO;
TRY_BLOCK;
// Serialize the object
CAutoBlock cab(DATASOURCE->GetCriticalSection()); g_pCError->ClearErrorInfo();
//=====================================================================================
// just pass this call on to the utility object that manages our properties
//=====================================================================================
hr = m_pObj->m_pUtilProp->GetPropertyInfo( m_pObj->m_fDSOInitialized, cPropertyIDSets, rgPropertyIDSets, pcPropertyInfoSets, prgPropertyInfoSets, ppDescBuffer);
hr = hr == S_OK ? hr :g_pCError->PostHResult(hr,&IID_IDBDataSourceAdmin);
CATCH_BLOCK_HRESULT(hr,L"IDBDataSourceAdmin::GetCreationProperties"); return hr; }
///////////////////////////////////////////////////////////////////////////////////////////////////////////
//
// CImpIDBDataSrcAdmin::GetCreationProperties
//
// Gets datasource creation properties
//
// Returns one of the following values:
// S_OK Method Succeeded
// E_FAIL Provider-specific error
// E_UNEXPECTED Datasource object was not initialized
// DB_S_ERRORSOCCURRED One or more properties specified in were not supported
// E_INVALIDARG cPropertySets was not zero and rgPropertySets was null pointer
// E_OUTOFMEMORY out of memory
// DB_E_ERRORSOCCURRED values were not returned for any properties
// OTHER Other HRESULTs returned by called functions
///////////////////////////////////////////////////////////////////////////////////////////////////////////
STDMETHODIMP CImpIDBDataSrcAdmin::ModifyDataSource( ULONG cPropertySets,DBPROPSET rgPropertySets[]) { HRESULT hr = S_OK; CSetStructuredExceptionHandler seh;
TRY_BLOCK;
// Serialize the object
CAutoBlock cab(DATASOURCE->GetCriticalSection()); g_pCError->ClearErrorInfo();
hr = DB_E_NOTSUPPORTED;
hr = hr == S_OK ? hr :g_pCError->PostHResult(hr,&IID_IDBDataSourceAdmin);
CATCH_BLOCK_HRESULT(hr,L"IDBDataSourceAdmin::ModifyDataSource"); return hr; }
|