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.
789 lines
16 KiB
789 lines
16 KiB
/*++
|
|
|
|
Copyright (C) 1996-2001 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
ProvResv.cpp
|
|
|
|
Abstract:
|
|
|
|
|
|
History:
|
|
|
|
--*/
|
|
|
|
#include "PreComp.h"
|
|
#include <wbemint.h>
|
|
|
|
#include "Globals.h"
|
|
#include "CGlobals.h"
|
|
#include "ProvResv.h"
|
|
#include "ProvFact.h"
|
|
#include "ProvSubS.h"
|
|
#include "guids.h"
|
|
|
|
/******************************************************************************
|
|
*
|
|
* Name:
|
|
*
|
|
*
|
|
* Description:
|
|
*
|
|
*
|
|
*****************************************************************************/
|
|
|
|
CServerObject_DynamicPropertyProviderResolver :: CServerObject_DynamicPropertyProviderResolver (
|
|
|
|
WmiAllocator &a_Allocator ,
|
|
_IWmiProviderFactory *a_Factory ,
|
|
IWbemServices *a_CoreStub
|
|
|
|
) : m_ReferenceCount ( 0 ) ,
|
|
m_Allocator ( a_Allocator ) ,
|
|
m_Factory ( a_Factory ) ,
|
|
m_CoreStub ( a_CoreStub ) ,
|
|
m_User ( NULL ) ,
|
|
m_Locale ( NULL )
|
|
{
|
|
InterlockedIncrement ( & ProviderSubSystem_Globals :: s_CServerObject_DynamicPropertyProviderResolver_ObjectsInProgress ) ;
|
|
|
|
ProviderSubSystem_Globals :: Increment_Global_Object_Count () ;
|
|
|
|
if ( m_Factory )
|
|
{
|
|
m_Factory->AddRef () ;
|
|
}
|
|
|
|
if ( m_CoreStub )
|
|
{
|
|
m_CoreStub->AddRef () ;
|
|
}
|
|
}
|
|
|
|
/******************************************************************************
|
|
*
|
|
* Name:
|
|
*
|
|
*
|
|
* Description:
|
|
*
|
|
*
|
|
*****************************************************************************/
|
|
|
|
CServerObject_DynamicPropertyProviderResolver::~CServerObject_DynamicPropertyProviderResolver ()
|
|
{
|
|
if ( m_User )
|
|
{
|
|
SysFreeString ( m_User ) ;
|
|
}
|
|
|
|
if ( m_Locale )
|
|
{
|
|
SysFreeString ( m_Locale ) ;
|
|
}
|
|
|
|
if ( m_Factory )
|
|
{
|
|
m_Factory->Release () ;
|
|
}
|
|
|
|
if ( m_CoreStub )
|
|
{
|
|
m_CoreStub->Release () ;
|
|
}
|
|
|
|
InterlockedDecrement ( & ProviderSubSystem_Globals :: s_CServerObject_DynamicPropertyProviderResolver_ObjectsInProgress ) ;
|
|
|
|
ProviderSubSystem_Globals :: Decrement_Global_Object_Count () ;
|
|
}
|
|
|
|
/******************************************************************************
|
|
*
|
|
* Name:
|
|
*
|
|
*
|
|
* Description:
|
|
*
|
|
*
|
|
*****************************************************************************/
|
|
|
|
STDMETHODIMP CServerObject_DynamicPropertyProviderResolver::QueryInterface (
|
|
|
|
REFIID iid ,
|
|
LPVOID FAR *iplpv
|
|
)
|
|
{
|
|
*iplpv = NULL ;
|
|
|
|
if ( iid == IID_IUnknown )
|
|
{
|
|
*iplpv = ( LPVOID ) this ;
|
|
}
|
|
else if ( iid == IID__IWmiDynamicPropertyResolver )
|
|
{
|
|
*iplpv = ( LPVOID ) ( _IWmiDynamicPropertyResolver * ) this ;
|
|
}
|
|
else if ( iid == IID_IWbemProviderInit )
|
|
{
|
|
*iplpv = ( LPVOID ) ( IWbemProviderInit * ) this ;
|
|
}
|
|
else if ( iid == IID_IWbemShutdown )
|
|
{
|
|
*iplpv = ( LPVOID ) ( IWbemShutdown * )this ;
|
|
}
|
|
|
|
if ( *iplpv )
|
|
{
|
|
( ( LPUNKNOWN ) *iplpv )->AddRef () ;
|
|
|
|
return ResultFromScode ( S_OK ) ;
|
|
}
|
|
else
|
|
{
|
|
return ResultFromScode ( E_NOINTERFACE ) ;
|
|
}
|
|
}
|
|
|
|
/******************************************************************************
|
|
*
|
|
* Name:
|
|
*
|
|
*
|
|
* Description:
|
|
*
|
|
*
|
|
*****************************************************************************/
|
|
|
|
STDMETHODIMP_( ULONG ) CServerObject_DynamicPropertyProviderResolver :: AddRef ()
|
|
{
|
|
return InterlockedIncrement ( & m_ReferenceCount ) ;
|
|
}
|
|
|
|
/******************************************************************************
|
|
*
|
|
* Name:
|
|
*
|
|
*
|
|
* Description:
|
|
*
|
|
*
|
|
*****************************************************************************/
|
|
|
|
STDMETHODIMP_(ULONG) CServerObject_DynamicPropertyProviderResolver :: Release ()
|
|
{
|
|
ULONG t_ReferenceCount = InterlockedDecrement ( & m_ReferenceCount ) ;
|
|
if ( t_ReferenceCount == 0 )
|
|
{
|
|
delete this ;
|
|
}
|
|
|
|
return t_ReferenceCount ;
|
|
}
|
|
|
|
/******************************************************************************
|
|
*
|
|
* Name:
|
|
*
|
|
*
|
|
* Description:
|
|
*
|
|
*
|
|
*****************************************************************************/
|
|
|
|
HRESULT CServerObject_DynamicPropertyProviderResolver :: GetClassAndInstanceContext (
|
|
|
|
IWbemClassObject *a_Class ,
|
|
IWbemClassObject *a_Instance ,
|
|
BSTR &a_ClassContext ,
|
|
BSTR &a_InstanceContext ,
|
|
BOOL &a_Dynamic
|
|
)
|
|
{
|
|
HRESULT t_Result = S_OK ;
|
|
|
|
a_Dynamic = FALSE ;
|
|
a_ClassContext = NULL ;
|
|
a_InstanceContext = NULL ;
|
|
|
|
IWbemQualifierSet *t_InstanceQualifierObject = NULL ;
|
|
t_Result = a_Instance->GetQualifierSet ( & t_InstanceQualifierObject ) ;
|
|
if ( SUCCEEDED ( t_Result ) )
|
|
{
|
|
VARIANT t_Variant ;
|
|
VariantInit ( & t_Variant ) ;
|
|
|
|
LONG t_Flavour = 0 ;
|
|
t_Result = t_InstanceQualifierObject->Get (
|
|
|
|
ProviderSubSystem_Globals :: s_DynProps ,
|
|
0 ,
|
|
& t_Variant ,
|
|
& t_Flavour
|
|
) ;
|
|
|
|
if ( SUCCEEDED ( t_Result ) )
|
|
{
|
|
if ( t_Variant.vt == VT_BOOL )
|
|
{
|
|
if ( t_Variant.boolVal == VARIANT_TRUE )
|
|
{
|
|
a_Dynamic = TRUE ;
|
|
|
|
VARIANT t_Variant ;
|
|
VariantInit ( & t_Variant ) ;
|
|
|
|
t_Flavour = 0 ;
|
|
HRESULT t_TempResult = t_InstanceQualifierObject->Get (
|
|
|
|
ProviderSubSystem_Globals :: s_InstanceContext ,
|
|
0 ,
|
|
& t_Variant ,
|
|
& t_Flavour
|
|
) ;
|
|
|
|
if ( SUCCEEDED ( t_TempResult ) )
|
|
{
|
|
if ( t_Variant.vt == VT_BSTR )
|
|
{
|
|
a_InstanceContext = SysAllocString ( t_Variant.bstrVal ) ;
|
|
if ( a_InstanceContext == NULL )
|
|
{
|
|
t_Result = WBEM_E_OUT_OF_MEMORY ;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
t_Result = WBEM_E_INVALID_PROVIDER_REGISTRATION ;
|
|
}
|
|
|
|
VariantClear ( & t_Variant ) ;
|
|
}
|
|
else
|
|
{
|
|
if ( t_TempResult != WBEM_E_NOT_FOUND )
|
|
{
|
|
t_Result = t_TempResult ;
|
|
}
|
|
}
|
|
|
|
if ( SUCCEEDED ( t_Result ) )
|
|
{
|
|
VARIANT t_ClassContextVariant ;
|
|
VariantInit ( & t_ClassContextVariant ) ;
|
|
|
|
t_TempResult = t_InstanceQualifierObject->Get (
|
|
|
|
ProviderSubSystem_Globals :: s_ClassContext ,
|
|
0 ,
|
|
& t_ClassContextVariant ,
|
|
& t_Flavour
|
|
) ;
|
|
|
|
if ( SUCCEEDED ( t_TempResult ) )
|
|
{
|
|
if ( t_ClassContextVariant.vt == VT_BSTR )
|
|
{
|
|
a_ClassContext = SysAllocString ( t_ClassContextVariant.bstrVal ) ;
|
|
if ( a_ClassContext == NULL )
|
|
{
|
|
t_Result = WBEM_E_OUT_OF_MEMORY ;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
t_Result = WBEM_E_INVALID_PROVIDER_REGISTRATION ;
|
|
}
|
|
|
|
VariantClear ( & t_ClassContextVariant ) ;
|
|
}
|
|
else
|
|
{
|
|
if ( t_TempResult != WBEM_E_NOT_FOUND )
|
|
{
|
|
t_Result = t_TempResult ;
|
|
}
|
|
}
|
|
|
|
if ( SUCCEEDED ( t_Result ) )
|
|
{
|
|
if ( a_ClassContext == NULL )
|
|
{
|
|
IWbemQualifierSet *t_ClassQualifierObject = NULL ;
|
|
t_Result = a_Class->GetQualifierSet ( & t_ClassQualifierObject ) ;
|
|
if ( SUCCEEDED ( t_Result ) )
|
|
{
|
|
VARIANT t_Variant ;
|
|
VariantInit ( & t_Variant ) ;
|
|
|
|
LONG t_Flavour = 0 ;
|
|
|
|
HRESULT t_TempResult = t_ClassQualifierObject->Get (
|
|
|
|
ProviderSubSystem_Globals :: s_ClassContext ,
|
|
0 ,
|
|
& t_Variant ,
|
|
& t_Flavour
|
|
) ;
|
|
|
|
if ( SUCCEEDED ( t_TempResult ) )
|
|
{
|
|
if ( t_Variant.vt == VT_BSTR )
|
|
{
|
|
a_ClassContext = SysAllocString ( t_Variant.bstrVal ) ;
|
|
}
|
|
else
|
|
{
|
|
t_Result = WBEM_E_INVALID_PROVIDER_REGISTRATION ;
|
|
}
|
|
|
|
VariantClear ( & t_Variant ) ;
|
|
}
|
|
else
|
|
{
|
|
if ( t_TempResult != WBEM_E_NOT_FOUND )
|
|
{
|
|
t_Result = t_TempResult ;
|
|
}
|
|
}
|
|
|
|
t_ClassQualifierObject->Release () ;
|
|
}
|
|
else
|
|
{
|
|
t_Result = WBEM_E_CRITICAL_ERROR ;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
t_Result = WBEM_E_INVALID_PROVIDER_REGISTRATION ;
|
|
}
|
|
|
|
VariantClear ( & t_Variant ) ;
|
|
}
|
|
else
|
|
{
|
|
if ( t_Result != WBEM_E_NOT_FOUND )
|
|
{
|
|
}
|
|
else
|
|
{
|
|
t_Result = S_OK ;
|
|
}
|
|
}
|
|
|
|
t_InstanceQualifierObject->Release () ;
|
|
}
|
|
else
|
|
{
|
|
t_Result = WBEM_E_CRITICAL_ERROR ;
|
|
}
|
|
|
|
return t_Result ;
|
|
}
|
|
|
|
/******************************************************************************
|
|
*
|
|
* Name:
|
|
*
|
|
*
|
|
* Description:
|
|
*
|
|
*
|
|
*****************************************************************************/
|
|
|
|
HRESULT CServerObject_DynamicPropertyProviderResolver :: ReadOrWrite (
|
|
|
|
IWbemContext *a_Context ,
|
|
IWbemClassObject *a_Instance ,
|
|
BSTR a_ClassContext ,
|
|
BSTR a_InstanceContext ,
|
|
BSTR a_PropertyContext ,
|
|
BSTR a_Provider ,
|
|
BSTR a_Property ,
|
|
BOOL a_Read
|
|
)
|
|
{
|
|
IWbemPropertyProvider *t_Provider = NULL ;
|
|
|
|
WmiInternalContext t_InternalContext ;
|
|
ZeroMemory ( & t_InternalContext , sizeof ( t_InternalContext ) ) ;
|
|
|
|
HRESULT t_Result = m_Factory->GetProvider (
|
|
|
|
t_InternalContext ,
|
|
0 ,
|
|
a_Context ,
|
|
NULL ,
|
|
m_User ,
|
|
m_Locale ,
|
|
NULL ,
|
|
a_Provider ,
|
|
IID_IWbemPropertyProvider ,
|
|
( void ** ) & t_Provider
|
|
|
|
) ;
|
|
|
|
if ( SUCCEEDED ( t_Result ) )
|
|
{
|
|
VARIANT t_Variant ;
|
|
VariantInit ( & t_Variant ) ;
|
|
|
|
if ( a_Read )
|
|
{
|
|
t_Result = t_Provider->GetProperty (
|
|
|
|
0 ,
|
|
m_Locale ,
|
|
a_ClassContext ,
|
|
a_InstanceContext ,
|
|
a_PropertyContext ,
|
|
& t_Variant
|
|
) ;
|
|
|
|
if ( SUCCEEDED ( t_Result ) )
|
|
{
|
|
t_Result = a_Instance->Put ( a_Property , 0 , & t_Variant , 0 ) ;
|
|
|
|
VariantClear ( & t_Variant ) ;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
LONG t_VarType = 0 ;
|
|
LONG t_Flavour = 0 ;
|
|
|
|
t_Result = a_Instance->Get ( a_Property , 0 , & t_Variant , & t_VarType , & t_Flavour ) ;
|
|
if ( SUCCEEDED ( t_Result ) )
|
|
{
|
|
t_Result = t_Provider->PutProperty (
|
|
|
|
0 ,
|
|
m_Locale ,
|
|
a_ClassContext ,
|
|
a_InstanceContext ,
|
|
a_PropertyContext ,
|
|
& t_Variant
|
|
) ;
|
|
|
|
if ( SUCCEEDED ( t_Result ) )
|
|
{
|
|
t_Result = a_Instance->Put ( a_Property , 0 , NULL , 0 ) ;
|
|
}
|
|
|
|
VariantClear ( & t_Variant ) ;
|
|
}
|
|
}
|
|
|
|
t_Provider->Release () ;
|
|
}
|
|
|
|
return t_Result ;
|
|
}
|
|
|
|
/******************************************************************************
|
|
*
|
|
* Name:
|
|
*
|
|
*
|
|
* Description:
|
|
*
|
|
*
|
|
*****************************************************************************/
|
|
|
|
HRESULT CServerObject_DynamicPropertyProviderResolver :: ReadOrWrite (
|
|
|
|
IWbemContext *a_Context ,
|
|
IWbemClassObject *a_Class ,
|
|
IWbemClassObject *a_Instance ,
|
|
BOOL a_Read
|
|
)
|
|
{
|
|
HRESULT t_Result = S_OK ;
|
|
|
|
BSTR t_ClassContext = NULL ;
|
|
BSTR t_InstanceContext = NULL ;
|
|
BOOL t_Dynamic = FALSE ;
|
|
|
|
t_Result = GetClassAndInstanceContext (
|
|
|
|
a_Class ,
|
|
a_Instance ,
|
|
t_ClassContext ,
|
|
t_InstanceContext ,
|
|
t_Dynamic
|
|
) ;
|
|
|
|
if ( SUCCEEDED ( t_Result ) )
|
|
{
|
|
if ( t_Dynamic )
|
|
{
|
|
IWbemQualifierSet *t_InstanceQualifierObject = NULL ;
|
|
t_Result = a_Instance->GetQualifierSet ( & t_InstanceQualifierObject ) ;
|
|
if ( SUCCEEDED ( t_Result ) )
|
|
{
|
|
VARIANT t_Variant ;
|
|
VariantInit ( & t_Variant ) ;
|
|
|
|
BSTR t_Property = NULL ;
|
|
CIMTYPE t_Type = CIM_EMPTY ;
|
|
|
|
a_Instance->BeginEnumeration ( WBEM_FLAG_NONSYSTEM_ONLY ) ;
|
|
while ( SUCCEEDED ( t_Result ) && ( a_Instance->Next ( 0 , & t_Property , &t_Variant , &t_Type , NULL ) == WBEM_NO_ERROR ) )
|
|
{
|
|
BSTR t_PropertyContext = NULL ;
|
|
BSTR t_Provider = NULL ;
|
|
|
|
IWbemQualifierSet *t_PropertyQualifierSet = NULL ;
|
|
if ( ( a_Instance->GetPropertyQualifierSet ( t_Property , &t_PropertyQualifierSet ) ) == WBEM_NO_ERROR )
|
|
{
|
|
VARIANT t_DynamicVariant ;
|
|
VariantInit ( & t_DynamicVariant ) ;
|
|
|
|
LONG t_Flag = 0 ;
|
|
|
|
if ( SUCCEEDED ( t_PropertyQualifierSet->Get ( ProviderSubSystem_Globals :: s_Dynamic , 0 , & t_DynamicVariant , &t_Flag ) ) )
|
|
{
|
|
if ( t_DynamicVariant.vt == VT_BOOL )
|
|
{
|
|
if ( t_DynamicVariant.boolVal == VARIANT_TRUE )
|
|
{
|
|
VARIANT t_ProviderVariant ;
|
|
VariantInit ( & t_ProviderVariant ) ;
|
|
|
|
t_Flag = 0 ;
|
|
if ( SUCCEEDED ( t_PropertyQualifierSet->Get ( ProviderSubSystem_Globals :: s_Provider , 0 , & t_ProviderVariant , &t_Flag ) ) )
|
|
{
|
|
if ( t_ProviderVariant.vt == VT_BSTR )
|
|
{
|
|
t_Provider = SysAllocString ( t_ProviderVariant.bstrVal ) ;
|
|
}
|
|
else
|
|
{
|
|
t_Result = WBEM_E_INVALID_PROVIDER_REGISTRATION ;
|
|
}
|
|
|
|
VariantClear ( & t_ProviderVariant ) ;
|
|
}
|
|
else
|
|
{
|
|
t_Result = WBEM_E_INVALID_PROVIDER_REGISTRATION ;
|
|
}
|
|
|
|
VARIANT t_PropertyContextVariant ;
|
|
VariantInit ( & t_PropertyContextVariant ) ;
|
|
|
|
t_Flag = 0 ;
|
|
if ( SUCCEEDED ( t_PropertyQualifierSet->Get ( ProviderSubSystem_Globals :: s_PropertyContext , 0 , & t_PropertyContextVariant , &t_Flag ) ) )
|
|
{
|
|
if ( t_PropertyContextVariant.vt == VT_BSTR )
|
|
{
|
|
t_PropertyContext = SysAllocString ( t_PropertyContextVariant.bstrVal ) ;
|
|
}
|
|
else
|
|
{
|
|
t_Result = WBEM_E_INVALID_PROVIDER_REGISTRATION ;
|
|
}
|
|
|
|
VariantClear ( & t_PropertyContextVariant ) ;
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
t_Result = WBEM_E_INVALID_PROVIDER_REGISTRATION ;
|
|
}
|
|
|
|
VariantClear ( & t_DynamicVariant ) ;
|
|
}
|
|
|
|
t_PropertyQualifierSet->Release();
|
|
|
|
}
|
|
|
|
if ( SUCCEEDED ( t_Result ) && t_Provider )
|
|
{
|
|
//
|
|
// discard the error here, as we did in W2K
|
|
//
|
|
HRESULT t_ResultInner = ReadOrWrite (
|
|
|
|
a_Context ,
|
|
a_Instance ,
|
|
t_ClassContext ,
|
|
t_InstanceContext ,
|
|
t_PropertyContext ,
|
|
t_Provider ,
|
|
t_Property ,
|
|
a_Read
|
|
) ;
|
|
}
|
|
|
|
if ( t_PropertyContext )
|
|
{
|
|
SysFreeString ( t_PropertyContext ) ;
|
|
}
|
|
|
|
if ( t_Provider )
|
|
{
|
|
SysFreeString ( t_Provider ) ;
|
|
}
|
|
|
|
VariantClear ( & t_Variant ) ;
|
|
|
|
SysFreeString ( t_Property ) ;
|
|
}
|
|
|
|
t_InstanceQualifierObject->Release () ;
|
|
}
|
|
else
|
|
{
|
|
t_Result = WBEM_E_CRITICAL_ERROR ;
|
|
}
|
|
}
|
|
|
|
if ( t_ClassContext )
|
|
{
|
|
SysFreeString ( t_ClassContext ) ;
|
|
}
|
|
|
|
if ( t_InstanceContext )
|
|
{
|
|
SysFreeString ( t_InstanceContext ) ;
|
|
}
|
|
}
|
|
|
|
return t_Result ;
|
|
}
|
|
|
|
/******************************************************************************
|
|
*
|
|
* Name:
|
|
*
|
|
*
|
|
* Description:
|
|
*
|
|
*
|
|
*****************************************************************************/
|
|
|
|
HRESULT CServerObject_DynamicPropertyProviderResolver :: Read (
|
|
|
|
IWbemContext *a_Context ,
|
|
IWbemClassObject *a_Class ,
|
|
IWbemClassObject **a_Instance
|
|
)
|
|
{
|
|
IWbemClassObject *t_Object = *a_Instance ;
|
|
|
|
HRESULT t_Result = ReadOrWrite (
|
|
|
|
a_Context ,
|
|
a_Class ,
|
|
t_Object ,
|
|
TRUE
|
|
) ;
|
|
|
|
return t_Result ;
|
|
}
|
|
|
|
/******************************************************************************
|
|
*
|
|
* Name:
|
|
*
|
|
*
|
|
* Description:
|
|
*
|
|
*
|
|
*****************************************************************************/
|
|
|
|
HRESULT CServerObject_DynamicPropertyProviderResolver :: Write (
|
|
|
|
IWbemContext *a_Context ,
|
|
IWbemClassObject *a_Class ,
|
|
IWbemClassObject *a_Instance
|
|
)
|
|
{
|
|
HRESULT t_Result = ReadOrWrite (
|
|
|
|
a_Context ,
|
|
a_Class ,
|
|
a_Instance ,
|
|
FALSE
|
|
) ;
|
|
|
|
return t_Result ;
|
|
}
|
|
|
|
/******************************************************************************
|
|
*
|
|
* Name:
|
|
*
|
|
*
|
|
* Description:
|
|
*
|
|
*
|
|
*****************************************************************************/
|
|
|
|
HRESULT CServerObject_DynamicPropertyProviderResolver :: Initialize (
|
|
|
|
LPWSTR a_User,
|
|
LONG a_Flags,
|
|
LPWSTR a_Namespace,
|
|
LPWSTR a_Locale,
|
|
IWbemServices *a_Core , // For anybody
|
|
IWbemContext *a_Context ,
|
|
IWbemProviderInitSink *a_Sink // For init signals
|
|
)
|
|
{
|
|
HRESULT t_Result = S_OK ;
|
|
|
|
if ( a_User )
|
|
{
|
|
m_User = SysAllocString ( a_User ) ;
|
|
if ( ! m_User )
|
|
{
|
|
t_Result = WBEM_E_OUT_OF_MEMORY ;
|
|
}
|
|
}
|
|
|
|
if ( SUCCEEDED ( t_Result ) )
|
|
{
|
|
if ( a_Locale )
|
|
{
|
|
m_Locale = SysAllocString ( a_Locale ) ;
|
|
if ( ! m_Locale )
|
|
{
|
|
t_Result = WBEM_E_OUT_OF_MEMORY ;
|
|
}
|
|
}
|
|
}
|
|
|
|
a_Sink->SetStatus ( t_Result , 0 ) ;
|
|
|
|
return t_Result ;
|
|
}
|
|
|
|
/******************************************************************************
|
|
*
|
|
* Name:
|
|
*
|
|
*
|
|
* Description:
|
|
*
|
|
*
|
|
*****************************************************************************/
|
|
|
|
HRESULT CServerObject_DynamicPropertyProviderResolver :: Shutdown (
|
|
|
|
LONG a_Flags ,
|
|
ULONG a_MaxMilliSeconds ,
|
|
IWbemContext *a_Context
|
|
)
|
|
{
|
|
return S_OK ;
|
|
}
|
|
|