226 lines
7.6 KiB
C++
226 lines
7.6 KiB
C++
//////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// 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;
|
|
}
|