209 lines
7 KiB
C++
209 lines
7 KiB
C++
//////////////////////////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// Microsoft WMIOLE DB Provider
|
|
// (C) Copyright 1999 Microsoft Corporation. All Rights Reserved.
|
|
//
|
|
// IDBProperties and IDBInfo interface implementations
|
|
//
|
|
//////////////////////////////////////////////////////////////////////////////////////////////////
|
|
#include "headers.h"
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// Returns information about the different properties that can be set on the provider
|
|
//
|
|
// HRESULT
|
|
// S_OK The method succeeded
|
|
// E_INVALIDARG pcPropertyInfo or prgPropertyInfo was NULL
|
|
// E_OUTOFMEMORY Out of memory
|
|
//
|
|
//////////////////////////////////////////////////////////////////////////////////////////////////
|
|
STDMETHODIMP CImplIDBBinderProperties::GetPropertyInfo (
|
|
ULONG cPropertySets, // IN Number of properties being asked about
|
|
const DBPROPIDSET rgPropertySets[], // IN Array of cPropertySets properties about which to return information
|
|
ULONG* pcPropertyInfoSets, // OUT Number of properties for which information is being returned
|
|
DBPROPINFOSET** prgPropertyInfoSets,// OUT Buffer containing default values returned
|
|
WCHAR** ppDescBuffer // OUT Buffer containing property descriptions
|
|
)
|
|
{
|
|
assert( m_pObj );
|
|
assert( m_pObj->m_pUtilProp );
|
|
HRESULT hr = S_OK;
|
|
CSetStructuredExceptionHandler seh;
|
|
|
|
TRY_BLOCK;
|
|
|
|
// Serialize the object
|
|
CAutoBlock cab(BINDER->GetCriticalSection());
|
|
|
|
// Clear ErrorInfo
|
|
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,
|
|
cPropertySets,
|
|
rgPropertySets,
|
|
pcPropertyInfoSets,
|
|
prgPropertyInfoSets,
|
|
ppDescBuffer);
|
|
|
|
hr = hr == S_OK ? hr :g_pCError->PostHResult(hr,&IID_IDBBinderProperties);
|
|
|
|
CATCH_BLOCK_HRESULT(hr,L"IDBBinderProperties::GetPropertyInfo");
|
|
return hr;
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// Returns current settings of all properties of the required property set
|
|
//
|
|
// HRESULT
|
|
// S_OK The method succeeded
|
|
// E_INVALIDARG pcProperties or prgPropertyInfo was NULL
|
|
// E_OUTOFMEMORY Out of memory
|
|
//
|
|
//////////////////////////////////////////////////////////////////////////////////////////////////
|
|
STDMETHODIMP CImplIDBBinderProperties::GetProperties (
|
|
ULONG cPropertySets, // IN count of restiction guids
|
|
const DBPROPIDSET rgPropertySets[], // IN restriction guids
|
|
ULONG* pcProperties, // OUT count of properties returned
|
|
DBPROPSET** prgProperties // OUT property information returned
|
|
)
|
|
{
|
|
DWORD dwBitMask = GetBitMask(rgPropertySets[0].guidPropertySet);
|
|
|
|
assert( m_pObj );
|
|
assert( m_pObj->m_pUtilProp );
|
|
HRESULT hr = S_OK;
|
|
CSetStructuredExceptionHandler seh;
|
|
|
|
TRY_BLOCK;
|
|
|
|
// Serialize the object
|
|
CAutoBlock cab(BINDER->GetCriticalSection());
|
|
|
|
// Clear ErrorInfo
|
|
g_pCError->ClearErrorInfo();
|
|
|
|
//=================================================================================
|
|
// Check Arguments
|
|
//=================================================================================
|
|
hr = m_pObj->m_pUtilProp->GetPropertiesArgChk(dwBitMask, cPropertySets, rgPropertySets, pcProperties, prgProperties,m_pObj->m_fDSOInitialized);
|
|
if ( !FAILED(hr) ){
|
|
|
|
//=============================================================================
|
|
// Just pass this call on to the utility object that manages our properties
|
|
//=============================================================================
|
|
hr = m_pObj->m_pUtilProp->GetProperties(dwBitMask,cPropertySets, rgPropertySets,pcProperties, prgProperties );
|
|
}
|
|
|
|
hr = hr == S_OK ? hr :g_pCError->PostHResult(hr,&IID_IDBBinderProperties);
|
|
|
|
CATCH_BLOCK_HRESULT(hr,L"IDBBinderProperties::GetProperties");
|
|
return hr;
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// Set properties on the provider
|
|
//
|
|
// HRESULT
|
|
// S_OK | The method succeeded
|
|
// E_INVALIDARG | cProperties was not equal to 0 and rgProperties was NULL
|
|
//
|
|
//////////////////////////////////////////////////////////////////////////////////////////////////
|
|
STDMETHODIMP CImplIDBBinderProperties::SetProperties ( ULONG cProperties,DBPROPSET rgProperties[] )
|
|
{
|
|
HRESULT hr = E_FAIL;
|
|
DWORD dwBitMask = GetBitMask(rgProperties[0].guidPropertySet);
|
|
CSetStructuredExceptionHandler seh;
|
|
|
|
assert( m_pObj );
|
|
assert( m_pObj->m_pUtilProp );
|
|
|
|
TRY_BLOCK;
|
|
|
|
// Serialize the object
|
|
CAutoBlock cab(BINDER->GetCriticalSection());
|
|
|
|
// Clear ErrorInfo
|
|
g_pCError->ClearErrorInfo();
|
|
|
|
//===================================================================================
|
|
// Quick return if the Count of Properties is 0
|
|
//===================================================================================
|
|
if( cProperties == 0 ){
|
|
hr = S_OK ;
|
|
}
|
|
|
|
//===================================================================================
|
|
// Check Arguments for use by properties
|
|
//===================================================================================
|
|
hr = m_pObj->m_pUtilProp->SetPropertiesArgChk(cProperties, rgProperties,m_pObj->m_fDSOInitialized);
|
|
if( !FAILED(hr) ){
|
|
|
|
|
|
//===================================================================================
|
|
// just pass this call on to the utility object that manages our properties
|
|
//===================================================================================
|
|
hr = m_pObj->m_pUtilProp->SetProperties(dwBitMask,cProperties, rgProperties);
|
|
}
|
|
|
|
hr = hr == S_OK ? hr :g_pCError->PostHResult(hr,&IID_IDBBinderProperties);
|
|
|
|
CATCH_BLOCK_HRESULT(hr,L"IDBBinderProperties::SetProperties");
|
|
return hr;
|
|
}
|
|
|
|
|
|
HRESULT CImplIDBBinderProperties::Reset()
|
|
{
|
|
HRESULT hr = S_OK;
|
|
CSetStructuredExceptionHandler seh;
|
|
|
|
TRY_BLOCK;
|
|
|
|
// Serialize the object
|
|
CAutoBlock cab(BINDER->GetCriticalSection());
|
|
|
|
// Clear ErrorInfo
|
|
g_pCError->ClearErrorInfo();
|
|
|
|
hr = m_pObj->m_pUtilProp->ResetProperties();
|
|
|
|
hr = hr == S_OK ? hr :g_pCError->PostHResult(hr,&IID_IDBBinderProperties);
|
|
|
|
CATCH_BLOCK_HRESULT(hr,L"IDBBinderProperties::Reset");
|
|
return hr;
|
|
}
|
|
|
|
|
|
|
|
DWORD CImplIDBBinderProperties::GetBitMask(REFGUID rguid)
|
|
{
|
|
DWORD dwRet = 0;
|
|
|
|
if( rguid == DBPROPSET_COLUMN || rguid == DBPROPSET_WMIOLEDB_COLUMN)
|
|
dwRet = PROPSET_ROWSET;
|
|
else
|
|
if( rguid == DBPROPSET_DATASOURCE)
|
|
dwRet = PROPSET_DSO ;
|
|
else
|
|
if( rguid == DBPROPSET_DATASOURCEINFO)
|
|
dwRet = PROPSET_DSO;
|
|
else
|
|
if( rguid == DBPROPSET_DBINIT || rguid == DBPROPSET_WMIOLEDB_DBINIT)
|
|
dwRet = PROPSET_DSOINIT;
|
|
else
|
|
if( rguid == DBPROPSET_ROWSET || rguid == DBPROPSET_WMIOLEDB_ROWSET)
|
|
dwRet = PROPSET_ROWSET;
|
|
else
|
|
if( rguid == DBPROPSET_SESSION)
|
|
dwRet = PROPSET_SESSION;
|
|
|
|
return dwRet;
|
|
} |