Source code of Windows XP (NT5)
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
/////////////////////////////////////////////////////////////////////////////////////////////////////
//
// Microsoft WMIOLE DB Provider
// (C) Copyright 1999 Microsoft Corporation. All Rights Reserved.
//
// IDBCreateSession interface implementation
//
/////////////////////////////////////////////////////////////////////////////////////////////////////
#include "headers.h"
/////////////////////////////////////////////////////////////////////////////////////////////////////
//
// Creates a new DB Session object from the DSO, and returns the requested interface on the newly
// created object.
//
// HRESULT
// S_OK The method succeeded.
// E_INVALIDARG ppDBSession was NULL
// DB_E_NOAGGREGATION pUnkOuter was not NULL (this object does not support being aggregated)
// E_FAIL Provider-specific error. This provider can only create one DBSession
// E_OUTOFMEMORY Out of memory
// E_NOINTERFACE Could not obtain requested interface on DBSession object
//
/////////////////////////////////////////////////////////////////////////////////////////////////////
STDMETHODIMP CImpIDBCreateSession::CreateSession( IUnknown* pUnkOuter, //IN Controlling IUnknown if being aggregated
REFIID riid, //IN The ID of the interface
IUnknown** ppDBSession //OUT A pointer to memory in which to return the interface pointer
) { CDBSession* pDBSession = NULL; HRESULT hr = S_OK; CSetStructuredExceptionHandler seh;
TRY_BLOCK;
//================================
// Serialize the object
//================================
CAutoBlock cab(DATASOURCE->GetCriticalSection());
//=========================================================================
// check in-params and NULL out-params in case of error
//=========================================================================
if (ppDBSession){ *ppDBSession = NULL; } else{ hr = E_INVALIDARG; } assert( m_pObj );
//=========================================================================
// Check to see if the DSO is Uninitialized
//=========================================================================
if( hr == S_OK ){ if (!m_pObj->m_fDSOInitialized){ hr = E_UNEXPECTED; } else{
//=================================================================
// this Data Source object can only create 1 DBSession...
//=================================================================
if (m_pObj->m_fDBSessionCreated){ hr = DB_E_OBJECTCREATIONLIMITREACHED; } else{
//=============================================================
// We do not allow the riid to be anything other than
// IID_IUnknown for aggregation
//=============================================================
if ( (pUnkOuter) && (riid != IID_IUnknown) ){ hr = DB_E_NOAGGREGATION; } else{
hr = m_pObj->CreateSession(pUnkOuter,riid,ppDBSession); /*
try { //=========================================================
// open a DBSession object
//=========================================================
pDBSession = new CDBSession( pUnkOuter ); } catch(...) { SAFE_DELETE_PTR(pDBSession); throw; }
if (!pDBSession){ hr = E_OUTOFMEMORY; } else{
//=====================================================
// initialize the object
//=====================================================
if (FAILED(hr = pDBSession->FInit( m_pObj ))){ SAFE_DELETE_PTR( pDBSession ); } else{ //=================================================
// get requested interface pointer on DBSession
//=================================================
hr = pDBSession->QueryInterface( riid, (void **) ppDBSession ); if (FAILED( hr )){ SAFE_DELETE_PTR( pDBSession ); } else{ //=============================================
// all went well
//=============================================
m_pObj->m_fDBSessionCreated = TRUE; } } }
*/ } } } }
CATCH_BLOCK_HRESULT(hr,L"IDBCreateSession::CreateSession"); return hr; }
|