|
|
/*++
Copyright (C) 1996-2001 Microsoft Corporation
Module Name:
ProvFact.cpp
Abstract:
History:
--*/
#include "PreComp.h"
#include <typeinfo.h>
#include <stdio.h>
#include <sddl.h>
#include <wbemint.h>
#include <genlex.h>
#include <sql_1.h>
#include <HelperFuncs.h>
#include <Logging.h>
#include <HelperFuncs.h>
#include "CGlobals.h"
#include "ProvDnf.h"
#include "ProvRegInfo.h"
#include "DateTime.h"
#include "ssdlhelper.h"
/******************************************************************************
* * Name: * * * Description: * * *****************************************************************************/
GENERIC_MAPPING g_ProviderBindingMapping = {
0 , 0 , STANDARD_RIGHTS_REQUIRED | MASK_PROVIDER_BINDING_BIND , STANDARD_RIGHTS_REQUIRED | MASK_PROVIDER_BINDING_BIND } ;
/******************************************************************************
* * Name: * * * Description: * * *****************************************************************************/
LPCWSTR CServerObject_GlobalRegistration :: s_Strings_Wmi_Class = L"__CLASS" ; LPCWSTR CServerObject_GlobalRegistration :: s_Strings_Wmi___ObjectProviderCacheControl = L"__ObjectProviderCacheControl" ; LPCWSTR CServerObject_GlobalRegistration :: s_Strings_Wmi___EventProviderCacheControl = L"__EventProviderCacheControl" ; LPCWSTR CServerObject_GlobalRegistration :: s_Strings_Wmi_ClearAfter = L"ClearAfter" ; LPCWSTR CServerObject_GlobalRegistration :: s_Strings_Wmi_s_Strings_Query_Object = L"Select * from __ObjectProviderCacheControl" ; LPCWSTR CServerObject_GlobalRegistration :: s_Strings_Wmi_s_Strings_Path_Object = L"__ObjectProviderCacheControl=@" ; LPCWSTR CServerObject_GlobalRegistration :: s_Strings_Wmi_s_Strings_Query_Event = L"Select * from __EventProviderCacheControl" ; LPCWSTR CServerObject_GlobalRegistration :: s_Strings_Wmi_s_Strings_Path_Event = L"__EventProviderCacheControl=@" ;
LPCWSTR CServerObject_HostQuotaRegistration :: s_Strings_Wmi_HostQuotas_Query = L"Select * from __ProviderHostQuotaConfiguration" ; LPCWSTR CServerObject_HostQuotaRegistration :: s_Strings_Wmi_HostQuotas_Path = L"__ProviderHostQuotaConfiguration=@" ; LPCWSTR CServerObject_HostQuotaRegistration :: s_Strings_Wmi_MemoryPerHost = L"MemoryPerHost" ; LPCWSTR CServerObject_HostQuotaRegistration :: s_Strings_Wmi_MemoryAllHosts = L"MemoryAllHosts" ; LPCWSTR CServerObject_HostQuotaRegistration :: s_Strings_Wmi_ThreadsPerHost = L"ThreadsPerHost" ; LPCWSTR CServerObject_HostQuotaRegistration :: s_Strings_Wmi_HandlesPerHost = L"HandlesPerHost" ; LPCWSTR CServerObject_HostQuotaRegistration :: s_Strings_Wmi_ProcessLimitAllHosts = L"ProcessLimitAllHosts" ;
LPCWSTR CServerObject_ComRegistration :: s_Strings_Reg_ClsidKeyStr = L"CLSID\\" ;
LPCWSTR CServerObject_ComRegistration :: s_Strings_Reg_Null = NULL ;
LPCWSTR CServerObject_ComRegistration :: s_Strings_Reg_ThreadingModel = L"ThreadingModel" ; LPCWSTR CServerObject_ComRegistration :: s_Strings_Reg_InProcServer32 = L"InProcServer32" ; LPCWSTR CServerObject_ComRegistration :: s_Strings_Reg_LocalServer32 = L"LocalServer32" ; LPCWSTR CServerObject_ComRegistration :: s_Strings_Reg_Synchronization = L"Synchronization" ; LPCWSTR CServerObject_ComRegistration :: s_Strings_Reg_AppId = L"AppId" ;
LPCWSTR CServerObject_ComRegistration :: s_Strings_Reg_Apartment_Apartment = L"apartment" ; LPCWSTR CServerObject_ComRegistration :: s_Strings_Reg_Apartment_Both = L"both"; LPCWSTR CServerObject_ComRegistration :: s_Strings_Reg_Apartment_Free = L"free"; LPCWSTR CServerObject_ComRegistration :: s_Strings_Reg_Apartment_Neutral = L"neutral";
LPCWSTR CServerObject_ComRegistration :: s_Strings_Reg_Synchronization_Ignored = L"ignored" ; LPCWSTR CServerObject_ComRegistration :: s_Strings_Reg_Synchronization_None = L"none" ; LPCWSTR CServerObject_ComRegistration :: s_Strings_Reg_Synchronization_Supported = L"supported" ; LPCWSTR CServerObject_ComRegistration :: s_Strings_Reg_Synchronization_Required = L"required" ; LPCWSTR CServerObject_ComRegistration :: s_Strings_Reg_Synchronization_RequiresNew = L"requiresnew" ;
LPCWSTR CServerObject_ComProviderRegistrationV1 :: s_Strings_Wmi_Clsid = L"CLSID" ; LPCWSTR CServerObject_ComProviderRegistrationV1 :: s_Strings_Wmi_ClientClsid = L"ClientLoadableCLSID" ; LPCWSTR CServerObject_ComProviderRegistrationV1 :: s_Strings_Wmi_Name = L"Name" ; LPCWSTR CServerObject_ComProviderRegistrationV1 :: s_Strings_Wmi_DefaultMachineName = L"DefaultMachineName" ; LPCWSTR CServerObject_ComProviderRegistrationV1 :: s_Strings_Wmi_UnloadTimeout = L"UnloadTimeout" ; LPCWSTR CServerObject_ComProviderRegistrationV1 :: s_Strings_Wmi_ImpersonationLevel = L"ImpersonationLevel" ; LPCWSTR CServerObject_ComProviderRegistrationV1 :: s_Strings_Wmi_InitializationReentrancy = L"InitializationReentrancy" ; LPCWSTR CServerObject_ComProviderRegistrationV1 :: s_Strings_Wmi_InitializeAsAdminFirst = L"InitializeAsAdminFirst" ; LPCWSTR CServerObject_ComProviderRegistrationV1 :: s_Strings_Wmi_PerUserInitialization = L"PerUserInitialization" ; LPCWSTR CServerObject_ComProviderRegistrationV1 :: s_Strings_Wmi_PerLocaleInitialization = L"PerLocaleInitialization" ; LPCWSTR CServerObject_ComProviderRegistrationV1 :: s_Strings_Wmi_Pure = L"Pure" ; LPCWSTR CServerObject_ComProviderRegistrationV1 :: s_Strings_Wmi_Hosting = L"HostingModel" ; LPCWSTR CServerObject_ComProviderRegistrationV1 :: s_Strings_Wmi_HostingGroup = L"HostingGroup" ; LPCWSTR CServerObject_ComProviderRegistrationV1 :: s_Strings_Wmi_SupportsThrottling = L"SupportsThrottling" ; LPCWSTR CServerObject_ComProviderRegistrationV1 :: s_Strings_Wmi_SupportsShutdown = L"SupportsShutdown" ; LPCWSTR CServerObject_ComProviderRegistrationV1 :: s_Strings_Wmi_ConcurrentIndependantRequests = L"ConcurrentIndependantRequests"; LPCWSTR CServerObject_ComProviderRegistrationV1 :: s_Strings_Wmi_SupportsSendStatus = L"SupportsSendStatus" ; LPCWSTR CServerObject_ComProviderRegistrationV1 :: s_Strings_Wmi_OperationTimeoutInterval = L"OperationTimeoutInterval" ; LPCWSTR CServerObject_ComProviderRegistrationV1 :: s_Strings_Wmi_InitializationTimeoutInterval = L"InitializationTimeoutInterval" ; LPCWSTR CServerObject_ComProviderRegistrationV1 :: s_Strings_Wmi_SupportsQuotas = L"SupportsQuotas" ; LPCWSTR CServerObject_ComProviderRegistrationV1 :: s_Strings_Wmi_Enabled = L"Enabled" ; LPCWSTR CServerObject_ComProviderRegistrationV1 :: s_Strings_Wmi_Version = L"Version" ; LPCWSTR CServerObject_ComProviderRegistrationV1 :: s_Strings_Wmi_SecurityDescriptor = L"SecurityDescriptor" ;
WCHAR CServerObject_ComProviderRegistrationV1 :: s_Strings_Wmi_WmiCore [] = L"WmiCore" ; WCHAR CServerObject_ComProviderRegistrationV1 :: s_Strings_Wmi_WmiCoreOrSelfHost [] = L"WmiCoreOrSelfHost" ; WCHAR CServerObject_ComProviderRegistrationV1 :: s_Strings_Wmi_SelfHost [] = L"SelfHost" ; WCHAR CServerObject_ComProviderRegistrationV1 :: s_Strings_Wmi_Decoupled [] = L"Decoupled:Com" ; WCHAR CServerObject_ComProviderRegistrationV1 :: s_Strings_Wmi_DecoupledColon [] = L"Decoupled:Com:" ; WCHAR CServerObject_ComProviderRegistrationV1 :: s_Strings_Wmi_SharedLocalSystemHost [] = L"LocalSystemHost" ; WCHAR CServerObject_ComProviderRegistrationV1 :: s_Strings_Wmi_SharedLocalSystemHostOrSelfHost [] = L"LocalSystemHostOrSelfHost" ; WCHAR CServerObject_ComProviderRegistrationV1 :: s_Strings_Wmi_SharedNetworkServiceHost [] = L"NetworkServiceHost" ; WCHAR CServerObject_ComProviderRegistrationV1 :: s_Strings_Wmi_SharedLocalServiceHost [] = L"LocalServiceHost" ; WCHAR CServerObject_ComProviderRegistrationV1 :: s_Strings_Wmi_SharedUserHost [] = L"UserHost" ; WCHAR CServerObject_ComProviderRegistrationV1 :: s_Strings_Wmi_NonCom [] = L"Decoupled:NonCom" ;
WCHAR CServerObject_ComProviderRegistrationV1 :: s_Strings_Wmi_DefaultSharedLocalSystemHost [] = L"DefaultLocalSystemHost" ; WCHAR CServerObject_ComProviderRegistrationV1 :: s_Strings_Wmi_DefaultSharedLocalSystemHostOrSelfHost [] = L"DefaultLocalSystemHost" ; WCHAR CServerObject_ComProviderRegistrationV1 :: s_Strings_Wmi_DefaultSharedNetworkServiceHost [] = L"DefaultNetworkServiceHost" ; WCHAR CServerObject_ComProviderRegistrationV1 :: s_Strings_Wmi_DefaultSharedLocalServiceHost [] = L"DefaultLocalServiceHost" ; WCHAR CServerObject_ComProviderRegistrationV1 :: s_Strings_Wmi_DefaultSharedUserHost [] = L"DefaultUserHost" ;
LPCWSTR CServerObject_ComProviderRegistrationV1 :: s_Strings_Wmi_DefaultHostingRegistryKey = L"Software\\Microsoft\\WBEM\\Providers\\Configuration\\" ;
LPCWSTR CServerObject_InstanceProviderRegistrationV1 :: s_Strings_Class = L"__CLASS" ; LPCWSTR CServerObject_InstanceProviderRegistrationV1 :: s_Strings_InstanceProviderRegistration = L"__InstanceProviderRegistration" ; LPCWSTR CServerObject_InstanceProviderRegistrationV1 :: s_Strings_SupportsPut = L"SupportsPut" ; LPCWSTR CServerObject_InstanceProviderRegistrationV1 :: s_Strings_SupportsGet = L"SupportsGet" ; LPCWSTR CServerObject_InstanceProviderRegistrationV1 :: s_Strings_SupportsDelete = L"SupportsDelete" ; LPCWSTR CServerObject_InstanceProviderRegistrationV1 :: s_Strings_SupportsEnumeration = L"SupportsEnumeration" ; LPCWSTR CServerObject_InstanceProviderRegistrationV1 :: s_Strings_QuerySupportLevels = L"QuerySupportLevels" ; LPCWSTR CServerObject_InstanceProviderRegistrationV1 :: s_Strings_InteractionType = L"InteractionType" ; LPCWSTR CServerObject_InstanceProviderRegistrationV1 :: s_Strings_SupportsBatching = L"SupportsBatching" ;; LPCWSTR CServerObject_InstanceProviderRegistrationV1 :: s_Strings_SupportsTransactions = L"SupportsTransactions" ;;
LPCWSTR CServerObject_InstanceProviderRegistrationV1 :: s_Strings_QuerySupportLevels_UnarySelect = L"WQL:UnarySelect" ; LPCWSTR CServerObject_InstanceProviderRegistrationV1 :: s_Strings_QuerySupportLevels_References = L"WQL:References" ; LPCWSTR CServerObject_InstanceProviderRegistrationV1 :: s_Strings_QuerySupportLevels_Associators = L"WQL:Associators" ; LPCWSTR CServerObject_InstanceProviderRegistrationV1 :: s_Strings_QuerySupportLevels_V1ProviderDefined = L"WQL:V1ProviderDefined" ;
LPCWSTR CServerObject_InstanceProviderRegistrationV1 :: s_Strings_InteractionType_Pull = L"Pull" ; LPCWSTR CServerObject_InstanceProviderRegistrationV1 :: s_Strings_InteractionType_Push = L"Push" ; LPCWSTR CServerObject_InstanceProviderRegistrationV1 :: s_Strings_InteractionType_PushVerify = L"PushVerify" ;
LPCWSTR CServerObject_ClassProviderRegistrationV1 :: s_Strings_Class = L"__CLASS" ; LPCWSTR CServerObject_ClassProviderRegistrationV1 :: s_Strings_ClassProviderRegistration = L"__ClassProviderRegistration" ; LPCWSTR CServerObject_ClassProviderRegistrationV1 :: s_Strings_SupportsPut = L"SupportsPut" ; LPCWSTR CServerObject_ClassProviderRegistrationV1 :: s_Strings_SupportsGet = L"SupportsGet" ; LPCWSTR CServerObject_ClassProviderRegistrationV1 :: s_Strings_SupportsDelete = L"SupportsDelete" ; LPCWSTR CServerObject_ClassProviderRegistrationV1 :: s_Strings_SupportsEnumeration = L"SupportsEnumeration" ; LPCWSTR CServerObject_ClassProviderRegistrationV1 :: s_Strings_QuerySupportLevels = L"QuerySupportLevels" ; LPCWSTR CServerObject_ClassProviderRegistrationV1 :: s_Strings_InteractionType = L"InteractionType" ; LPCWSTR CServerObject_ClassProviderRegistrationV1 :: s_Strings_SupportsBatching = L"SupportsBatching" ; LPCWSTR CServerObject_ClassProviderRegistrationV1 :: s_Strings_SupportsTransactions = L"SupportsTransactions" ; LPCWSTR CServerObject_ClassProviderRegistrationV1 :: s_Strings_CacheRefreshInterval = L"CacheRefreshInterval" ; LPCWSTR CServerObject_ClassProviderRegistrationV1 :: s_Strings_PerUserSchema = L"PerUserSchema" ; LPCWSTR CServerObject_ClassProviderRegistrationV1 :: s_Strings_ReSynchroniseOnNamespaceOpen = L"ReSynchroniseOnNamespaceOpen" ; LPCWSTR CServerObject_ClassProviderRegistrationV1 :: s_Strings_Version = L"Version" ;
LPCWSTR CServerObject_ClassProviderRegistrationV1 :: s_Strings_QuerySupportLevels_UnarySelect = L"WQL:UnarySelect" ; LPCWSTR CServerObject_ClassProviderRegistrationV1 :: s_Strings_QuerySupportLevels_References = L"WQL:References" ; LPCWSTR CServerObject_ClassProviderRegistrationV1 :: s_Strings_QuerySupportLevels_Associators = L"WQL:Associators" ; LPCWSTR CServerObject_ClassProviderRegistrationV1 :: s_Strings_QuerySupportLevels_V1ProviderDefined = L"WQL:V1ProviderDefined" ;
LPCWSTR CServerObject_ClassProviderRegistrationV1 :: s_Strings_InteractionType_Pull = L"Pull" ; LPCWSTR CServerObject_ClassProviderRegistrationV1 :: s_Strings_InteractionType_Push = L"Push" ; LPCWSTR CServerObject_ClassProviderRegistrationV1 :: s_Strings_InteractionType_PushVerify = L"PushVerify" ;
LPCWSTR CServerObject_ClassProviderRegistrationV1 :: s_Strings_ResultSetQueries = L"ResultSetQueries" ; LPCWSTR CServerObject_ClassProviderRegistrationV1 :: s_Strings_UnSupportedQueries = L"UnSupportedQueries" ; LPCWSTR CServerObject_ClassProviderRegistrationV1 :: s_Strings_ReferencedSetQueries = L"ReferencedSetQueries" ;
LPCWSTR CServerObject_MethodProviderRegistrationV1 :: s_Strings_Class = L"__CLASS" ; LPCWSTR CServerObject_MethodProviderRegistrationV1 :: s_Strings_MethodProviderRegistration = L"__MethodProviderRegistration" ;
LPCWSTR CServerObject_EventProviderRegistrationV1 :: s_Strings_Class = L"__CLASS" ; LPCWSTR CServerObject_EventProviderRegistrationV1 :: s_Strings_EventProviderRegistration = L"__EventProviderRegistration" ;
LPCWSTR CServerObject_EventConsumerProviderRegistrationV1 :: s_Strings_Class = L"__CLASS" ; LPCWSTR CServerObject_EventConsumerProviderRegistrationV1 :: s_Strings_EventConsumerProviderRegistration = L"__EventConsumerProviderRegistration" ;
LPCWSTR CServerObject_DynamicPropertyProviderRegistrationV1 :: s_Strings_Class = L"__CLASS" ; LPCWSTR CServerObject_DynamicPropertyProviderRegistrationV1 :: s_Strings_PropertyProviderRegistration = L"__PropertyProviderRegistration" ; LPCWSTR CServerObject_DynamicPropertyProviderRegistrationV1 :: s_Strings_SupportsPut = L"SupportsPut" ; LPCWSTR CServerObject_DynamicPropertyProviderRegistrationV1 :: s_Strings_SupportsGet = L"SupportsGet" ;
LPCWSTR CServerObject_ProviderRegistrationV1 :: s_Strings_Class = L"__CLASS" ; LPCWSTR CServerObject_ProviderRegistrationV1 :: s_Strings_ClassProviderRegistration = L"__ClassProviderRegistration" ; LPCWSTR CServerObject_ProviderRegistrationV1 :: s_Strings_InstanceProviderRegistration = L"__InstanceProviderRegistration" ; LPCWSTR CServerObject_ProviderRegistrationV1 :: s_Strings_MethodProviderRegistration = L"__MethodProviderRegistration" ; LPCWSTR CServerObject_ProviderRegistrationV1 :: s_Strings_PropertyProviderRegistration = L"__PropertyProviderRegistration" ; LPCWSTR CServerObject_ProviderRegistrationV1 :: s_Strings_EventProviderRegistration = L"__EventProviderRegistration" ; LPCWSTR CServerObject_ProviderRegistrationV1 :: s_Strings_EventConsumerProviderRegistration = L"__EventConsumerProviderRegistration" ;
/******************************************************************************
* * Name: * * * Description: * * *****************************************************************************/
CServerObject_GlobalRegistration :: CServerObject_GlobalRegistration () :
m_Context ( NULL ) , m_Namespace ( NULL ) , m_Repository ( NULL ) , m_Object_UnloadTimeout ( NULL ) , m_Event_UnloadTimeout ( NULL ) , m_Object_UnloadTimeoutMilliSeconds ( DEFAULT_PROVIDER_TIMEOUT ) , m_Event_UnloadTimeoutMilliSeconds ( DEFAULT_PROVIDER_TIMEOUT ) , m_Result ( S_OK ) { }
/******************************************************************************
* * Name: * * * Description: * * *****************************************************************************/
CServerObject_GlobalRegistration :: ~CServerObject_GlobalRegistration () { if ( m_Context ) { m_Context->Release () ; }
if ( m_Namespace ) { m_Namespace->Release () ; }
if ( m_Repository ) { m_Repository->Release () ; }
if ( m_Object_UnloadTimeout ) { SysFreeString ( m_Object_UnloadTimeout ) ; }
if ( m_Event_UnloadTimeout ) { SysFreeString ( m_Event_UnloadTimeout ) ; }
}
/******************************************************************************
* * Name: * * * Description: * * *****************************************************************************/
ULONG CServerObject_GlobalRegistration :: AddRef () { return InterlockedIncrement ( & m_ReferenceCount ) ; }
/******************************************************************************
* * Name: * * * Description: * * *****************************************************************************/
ULONG CServerObject_GlobalRegistration :: Release () { ULONG t_ReferenceCount = InterlockedDecrement ( & m_ReferenceCount ) ; if ( t_ReferenceCount == 0 ) { delete this ; }
return t_ReferenceCount ; }
/******************************************************************************
* * Name: * * * Description: * * *****************************************************************************/
HRESULT CServerObject_GlobalRegistration :: SetContext (
IWbemContext *a_Context , IWbemPath *a_Namespace , IWbemServices *a_Repository ) { HRESULT t_Result = S_OK ;
m_Context = a_Context ; m_Namespace = a_Namespace ; m_Repository = a_Repository ;
if ( m_Context ) { m_Context->AddRef () ; }
if ( m_Namespace ) { m_Namespace->AddRef () ; }
if ( m_Repository ) { m_Repository->AddRef () ; }
return t_Result ; }
/******************************************************************************
* * Name: * * * Description: * * *****************************************************************************/
HRESULT CServerObject_GlobalRegistration :: QueryProperties (
Enum_PropertyMask a_Mask , IWbemClassObject *a_Object , LPWSTR &a_UnloadTimeout , ULONG &a_UnloadTimeoutMilliSeconds ) { HRESULT t_Result = S_OK ;
if ( a_Mask & e_ClearAfter ) { VARIANT t_Variant ; VariantInit ( & t_Variant ) ; LONG t_VarType = 0 ; LONG t_Flavour = 0 ;
t_Result = a_Object->Get ( s_Strings_Wmi_ClearAfter , 0 , & t_Variant , & t_VarType , & t_Flavour ) ; if ( SUCCEEDED ( t_Result ) ) { if ( t_Variant.vt == VT_BSTR ) { if ( a_UnloadTimeout ) { SysFreeString ( a_UnloadTimeout ) ; }
a_UnloadTimeout = SysAllocString ( t_Variant.bstrVal ) ; if ( a_UnloadTimeout ) { CWbemDateTime t_Interval ; t_Result = t_Interval.PutValue ( a_UnloadTimeout ) ; if ( SUCCEEDED ( t_Result ) ) { VARIANT_BOOL t_Bool = VARIANT_FALSE ; t_Result = t_Interval.GetIsInterval ( & t_Bool ) ; if ( t_Bool == VARIANT_TRUE ) { LONG t_MicroSeconds = 0 ; LONG t_Seconds = 0 ; LONG t_Minutes = 0 ; LONG t_Hours = 0 ; LONG t_Days = 0 ;
t_Interval.GetMicroseconds ( & t_MicroSeconds ) ; t_Interval.GetSeconds ( & t_Seconds ) ; t_Interval.GetMinutes ( & t_Minutes ) ; t_Interval.GetHours ( & t_Hours ) ; t_Interval.GetDay ( & t_Days ) ;
a_UnloadTimeoutMilliSeconds = ( t_Days * 24 * 60 * 60 * 1000 ) + ( t_Hours * 60 * 60 * 1000 ) + ( t_Minutes * 60 * 1000 ) + ( t_Seconds * 1000 ) + ( t_MicroSeconds / 1000 ) ; } else { t_Result = WBEM_E_INVALID_PROVIDER_REGISTRATION ; } } else { t_Result = WBEM_E_INVALID_PROVIDER_REGISTRATION ; } } else { t_Result = WBEM_E_OUT_OF_MEMORY ; } } else if ( t_Variant.vt == VT_NULL ) { if ( a_UnloadTimeout ) { SysFreeString ( a_UnloadTimeout ) ; a_UnloadTimeout = NULL ; } } else { t_Result = WBEM_E_INVALID_PROVIDER_REGISTRATION ; } }
VariantClear ( & t_Variant ) ; }
return t_Result ; }
/******************************************************************************
* * Name: * * * Description: * * *****************************************************************************/
HRESULT CServerObject_GlobalRegistration :: QueryRepository (
Enum_PropertyMask a_Mask ) { HRESULT t_Result = S_OK ;
BSTR t_ObjectPath = SysAllocString ( s_Strings_Wmi_s_Strings_Path_Object ) ; if ( t_ObjectPath ) { IWbemClassObject *t_ClassObject = NULL ;
t_Result = m_Repository->GetObject (
t_ObjectPath , 0 , m_Context , & t_ClassObject , NULL ) ;
if ( SUCCEEDED ( t_Result ) ) { t_Result = QueryProperties (
a_Mask , t_ClassObject , m_Object_UnloadTimeout , m_Object_UnloadTimeoutMilliSeconds ) ;
t_ClassObject->Release () ; }
SysFreeString ( t_ObjectPath ) ; } else { t_Result = WBEM_E_OUT_OF_MEMORY ; }
if ( SUCCEEDED ( t_Result ) ) { BSTR t_ObjectPath = SysAllocString ( s_Strings_Wmi_s_Strings_Path_Event ) ; if ( t_ObjectPath ) { IWbemClassObject *t_ClassObject = NULL ;
t_Result = m_Repository->GetObject (
t_ObjectPath , 0 , m_Context , & t_ClassObject , NULL ) ;
if ( SUCCEEDED ( t_Result ) ) { t_Result = QueryProperties (
a_Mask , t_ClassObject , m_Event_UnloadTimeout , m_Event_UnloadTimeoutMilliSeconds ) ;
t_ClassObject->Release () ; }
SysFreeString ( t_ObjectPath ) ; } else { t_Result = WBEM_E_OUT_OF_MEMORY ; } }
return t_Result ; }
/******************************************************************************
* * Name: * * * Description: * * *****************************************************************************/
HRESULT CServerObject_GlobalRegistration :: Load (
Enum_PropertyMask a_Mask ) { HRESULT t_Result = S_OK ;
t_Result = QueryRepository (
a_Mask ) ;
return t_Result ; }
/******************************************************************************
* * Name: * * * Description: * * *****************************************************************************/
CServerObject_HostQuotaRegistration :: CServerObject_HostQuotaRegistration () :
m_Context ( NULL ) , m_Namespace ( NULL ) , m_Repository ( NULL ) , m_MemoryPerHost ( 0 ) , m_MemoryAllHosts ( 0 ) , m_ThreadsPerHost ( 0 ) , m_HandlesPerHost ( 0 ) , m_ProcessLimitAllHosts ( 0 ) , m_Result ( S_OK ) { }
/******************************************************************************
* * Name: * * * Description: * * *****************************************************************************/
CServerObject_HostQuotaRegistration :: ~CServerObject_HostQuotaRegistration () { if ( m_Context ) { m_Context->Release () ; }
if ( m_Namespace ) { m_Namespace->Release () ; }
if ( m_Repository ) { m_Repository->Release () ; } }
/******************************************************************************
* * Name: * * * Description: * * *****************************************************************************/
ULONG CServerObject_HostQuotaRegistration :: AddRef () { return InterlockedIncrement ( & m_ReferenceCount ) ; }
/******************************************************************************
* * Name: * * * Description: * * *****************************************************************************/
ULONG CServerObject_HostQuotaRegistration :: Release () { ULONG t_ReferenceCount = InterlockedDecrement ( & m_ReferenceCount ) ; if ( t_ReferenceCount == 0 ) { delete this ; }
return t_ReferenceCount ; }
/******************************************************************************
* * Name: * * * Description: * * *****************************************************************************/
HRESULT CServerObject_HostQuotaRegistration :: SetContext (
IWbemContext *a_Context , IWbemPath *a_Namespace , IWbemServices *a_Repository ) { HRESULT t_Result = S_OK ;
m_Context = a_Context ; m_Namespace = a_Namespace ; m_Repository = a_Repository ;
if ( m_Context ) { m_Context->AddRef () ; }
if ( m_Namespace ) { m_Namespace->AddRef () ; }
if ( m_Repository ) { m_Repository->AddRef () ; }
return t_Result ; }
/******************************************************************************
* * Name: * * * Description: * * *****************************************************************************/
HRESULT CServerObject_HostQuotaRegistration :: QueryProperties (
Enum_PropertyMask a_Mask , IWbemClassObject *a_Object ) { HRESULT t_Result = S_OK ;
_IWmiObject *t_FastObject = NULL ;
t_Result = a_Object->QueryInterface ( IID__IWmiObject , ( void ** ) & t_FastObject ) ; if ( SUCCEEDED ( t_Result ) ) { if ( a_Mask & e_MemoryAllHosts ) { UINT64 t_Value = 0 ;
BOOL t_IsNull = FALSE ; CIMTYPE t_VarType = CIM_EMPTY ; LONG t_Flavour = 0 ; ULONG t_Used = 0 ;
t_Result = t_FastObject->ReadProp (
s_Strings_Wmi_MemoryAllHosts , 0 , sizeof ( UINT64 ) , & t_VarType , & t_Flavour , & t_IsNull , & t_Used , & t_Value ) ;
if ( SUCCEEDED ( t_Result ) ) { if ( t_IsNull ) { m_MemoryAllHosts = 0 ; } else { if ( t_VarType == CIM_UINT64 ) { m_MemoryAllHosts = t_Value ; } else { t_Result = WBEM_E_INVALID_PROVIDER_REGISTRATION ; } } } }
if ( SUCCEEDED(t_Result) && (a_Mask & e_MemoryPerHost) ) { UINT64 t_Value = 0 ;
BOOL t_IsNull = FALSE ; CIMTYPE t_VarType = CIM_EMPTY ; LONG t_Flavour = 0 ; ULONG t_Used = 0 ;
t_Result = t_FastObject->ReadProp (
s_Strings_Wmi_MemoryPerHost , 0 , sizeof ( UINT64 ) , & t_VarType , & t_Flavour , & t_IsNull , & t_Used , & t_Value ) ;
if ( SUCCEEDED ( t_Result ) ) { if ( t_IsNull ) { m_MemoryPerHost = 0 ; } else { if ( t_VarType == CIM_UINT64 ) { m_MemoryPerHost = t_Value ; } else { t_Result = WBEM_E_INVALID_PROVIDER_REGISTRATION ; } } } }
t_FastObject->Release () ; }
if ( SUCCEEDED(t_Result) && (a_Mask & e_ThreadsPerHost) ) { VARIANT t_Variant ; VariantInit ( & t_Variant ) ; LONG t_VarType = 0 ; LONG t_Flavour = 0 ;
t_Result = a_Object->Get ( s_Strings_Wmi_ThreadsPerHost , 0 , & t_Variant , & t_VarType , & t_Flavour ) ; if ( SUCCEEDED ( t_Result ) ) { if ( t_Variant.vt == VT_I4 ) { m_ThreadsPerHost = t_Variant.lVal ; } else if ( t_Variant.vt == VT_NULL ) { m_ThreadsPerHost = 0 ; } else { t_Result = WBEM_E_INVALID_PROVIDER_REGISTRATION ; } }
VariantClear ( & t_Variant ) ; }
if ( SUCCEEDED(t_Result) && (a_Mask & e_HandlesPerHost) ) { VARIANT t_Variant ; VariantInit ( & t_Variant ) ; LONG t_VarType = 0 ; LONG t_Flavour = 0 ;
t_Result = a_Object->Get ( s_Strings_Wmi_HandlesPerHost , 0 , & t_Variant , & t_VarType , & t_Flavour ) ; if ( SUCCEEDED ( t_Result ) ) { if ( t_Variant.vt == VT_I4 ) { m_HandlesPerHost = t_Variant.lVal ; } else if ( t_Variant.vt == VT_NULL ) { m_HandlesPerHost = 0 ; } else { t_Result = WBEM_E_INVALID_PROVIDER_REGISTRATION ; } }
VariantClear ( & t_Variant ) ; }
if ( SUCCEEDED(t_Result) && (a_Mask & e_ProcessLimitAllHosts) ) { VARIANT t_Variant ; VariantInit ( & t_Variant ) ; LONG t_VarType = 0 ; LONG t_Flavour = 0 ;
t_Result = a_Object->Get ( s_Strings_Wmi_ProcessLimitAllHosts , 0 , & t_Variant , & t_VarType , & t_Flavour ) ; if ( SUCCEEDED ( t_Result ) ) { if ( t_Variant.vt == VT_I4 ) { m_ProcessLimitAllHosts = t_Variant.lVal ; } else if ( t_Variant.vt == VT_NULL ) { m_ProcessLimitAllHosts = 0 ; } else { t_Result = WBEM_E_INVALID_PROVIDER_REGISTRATION ; } }
VariantClear ( & t_Variant ) ; }
return t_Result ; }
/******************************************************************************
* * Name: * * * Description: * * *****************************************************************************/
HRESULT CServerObject_HostQuotaRegistration :: QueryRepository (
Enum_PropertyMask a_Mask ) { HRESULT t_Result = S_OK ;
BSTR t_ObjectPath = SysAllocString ( s_Strings_Wmi_HostQuotas_Path ) ; if ( t_ObjectPath ) { IWbemClassObject *t_ClassObject = NULL ;
t_Result = m_Repository->GetObject (
t_ObjectPath , 0 , m_Context , & t_ClassObject , NULL ) ;
if ( SUCCEEDED ( t_Result ) ) { t_Result = QueryProperties (
a_Mask , t_ClassObject ) ;
t_ClassObject->Release () ; }
SysFreeString ( t_ObjectPath ) ; } else { t_Result = WBEM_E_OUT_OF_MEMORY ; }
return t_Result ; }
/******************************************************************************
* * Name: * * * Description: * * *****************************************************************************/
HRESULT CServerObject_HostQuotaRegistration :: Load (
Enum_PropertyMask a_Mask ) { HRESULT t_Result = S_OK ;
t_Result = QueryRepository (
a_Mask ) ;
return t_Result ; }
/******************************************************************************
* * Name: * * * Description: * * *****************************************************************************/
CServerObject_ComRegistration :: CServerObject_ComRegistration ()
: m_ThreadingModel ( e_ThreadingModel_Unknown ) , m_Synchronization ( e_Ignored ) , m_InProcServer32 ( e_Boolean_Unknown ) , m_LocalServer32 ( e_Boolean_Unknown ) , m_Service ( e_Boolean_Unknown ) , m_Loaded ( e_False ) , m_Clsid ( NULL ) , m_AppId ( NULL ) , m_ProviderName ( NULL ) , m_Result ( S_OK ) { m_InProcServer32_Path [ 0 ] = 0 ; m_LocalServer32_Path [ 0 ] = 0 ; m_Server_Name [ 0 ] = 0 ; }
/******************************************************************************
* * Name: * * * Description: * * *****************************************************************************/
CServerObject_ComRegistration :: ~CServerObject_ComRegistration () { if ( m_AppId ) { SysFreeString ( m_AppId ) ; }
if ( m_Clsid ) { SysFreeString ( m_Clsid ) ; }
if ( m_ProviderName ) { SysFreeString ( m_ProviderName ) ; } }
/******************************************************************************
* * Name: * * * Description: * * *****************************************************************************/
ULONG CServerObject_ComRegistration :: AddRef () { return InterlockedIncrement ( & m_ReferenceCount ) ; }
/******************************************************************************
* * Name: * * * Description: * * *****************************************************************************/
ULONG CServerObject_ComRegistration :: Release () { ULONG t_ReferenceCount = InterlockedDecrement ( & m_ReferenceCount ) ; if ( t_ReferenceCount == 0 ) { delete this ; }
return t_ReferenceCount ; }
/******************************************************************************
* * Name: * * * Description: * * *****************************************************************************/
HRESULT CServerObject_ComRegistration :: Load_ThreadingModel ( HKEY a_ClsidKey ) { HRESULT t_Result = S_OK ;
DWORD t_ValueType = REG_SZ ; wchar_t t_Data [ MAX_PATH ] ; DWORD t_DataSize = sizeof ( t_Data ) ;
LONG t_RegResult = RegQueryValueEx (
a_ClsidKey , s_Strings_Reg_ThreadingModel , 0 , & t_ValueType , LPBYTE ( & t_Data ) , & t_DataSize );
if ( t_RegResult == ERROR_SUCCESS ) { if ( wbem_wcsicmp ( t_Data , s_Strings_Reg_Apartment_Apartment ) == 0 ) { m_ThreadingModel = e_Apartment ; } else if ( wbem_wcsicmp ( t_Data , s_Strings_Reg_Apartment_Both ) == 0 ) { m_ThreadingModel = e_Both ; } else if ( wbem_wcsicmp ( t_Data , s_Strings_Reg_Apartment_Free ) == 0 ) { m_ThreadingModel = e_Free ; } else if ( wbem_wcsicmp ( t_Data , s_Strings_Reg_Apartment_Neutral ) == 0 ) { m_ThreadingModel = e_Neutral ; } else { m_ThreadingModel = e_ThreadingModel_Unknown ; } } else { t_Result = WBEM_E_INVALID_PROVIDER_REGISTRATION ; } return t_Result ; }
/******************************************************************************
* * Name: * * * Description: * * *****************************************************************************/
HRESULT CServerObject_ComRegistration :: Load_Synchronization ( HKEY a_ClsidKey ) { HRESULT t_Result = S_OK ;
DWORD t_ValueType = REG_SZ ; wchar_t t_Data [ MAX_PATH ] ; DWORD t_DataSize = sizeof ( t_Data ) ;
LONG t_RegResult = RegQueryValueEx (
a_ClsidKey , s_Strings_Reg_Synchronization , 0 , & t_ValueType , LPBYTE ( & t_Data ) , & t_DataSize );
if ( t_RegResult == ERROR_SUCCESS ) { if ( wbem_wcsicmp ( t_Data , s_Strings_Reg_Synchronization_Ignored ) == 0 ) { m_Synchronization = e_Ignored ; } else if ( wbem_wcsicmp ( t_Data , s_Strings_Reg_Synchronization_None ) == 0 ) { m_Synchronization = e_None ; } else if ( wbem_wcsicmp ( t_Data , s_Strings_Reg_Synchronization_Supported ) == 0 ) { m_Synchronization = e_Supported ; } else if ( wbem_wcsicmp ( t_Data , s_Strings_Reg_Synchronization_Required ) == 0 ) { m_Synchronization = e_Required ; } else if ( wbem_wcsicmp ( t_Data , s_Strings_Reg_Synchronization_RequiresNew ) == 0 ) { m_Synchronization = e_RequiresNew ; } else { m_Synchronization = e_Synchronization_Unknown ; } } return t_Result ; }
/******************************************************************************
* * Name: * * * Description: * * *****************************************************************************/
HRESULT CServerObject_ComRegistration :: Load_InProcServer32 ( LPCWSTR a_ClsidStringKey ) { HRESULT t_Result = S_OK ;
LPWSTR t_Clsid_String_Key_InProcServer32 = NULL ; t_Result = WmiHelper :: ConcatenateStrings (
2, & t_Clsid_String_Key_InProcServer32 , a_ClsidStringKey , s_Strings_Reg_InProcServer32 ) ;
if ( SUCCEEDED ( t_Result ) ) { HKEY t_Clsid_Key_InProcServer32 ;
LONG t_RegResult = RegOpenKeyEx (
HKEY_CLASSES_ROOT , t_Clsid_String_Key_InProcServer32 , 0 , KEY_READ , & t_Clsid_Key_InProcServer32 ) ;
if ( t_RegResult == ERROR_SUCCESS ) { m_InProcServer32 = e_True ;
t_Result = Load_ThreadingModel ( t_Clsid_Key_InProcServer32 ) ; if ( SUCCEEDED ( t_Result ) ) { t_Result = Load_Synchronization ( t_Clsid_Key_InProcServer32 ) ; }
DWORD t_ValueType = REG_SZ ; DWORD t_DataSize = sizeof ( m_InProcServer32_Path ) ;
t_RegResult = RegQueryValueEx (
t_Clsid_Key_InProcServer32 , s_Strings_Reg_Null , 0 , & t_ValueType , LPBYTE ( & m_InProcServer32_Path ) , & t_DataSize );
if ( t_RegResult == ERROR_SUCCESS ) { }
RegCloseKey ( t_Clsid_Key_InProcServer32 ) ; }
SysFreeString ( t_Clsid_String_Key_InProcServer32 ) ; }
return t_Result ; }
/******************************************************************************
* * Name: * * * Description: * * *****************************************************************************/
HRESULT CServerObject_ComRegistration :: Load_LocalServer32 ( LPCWSTR a_ClsidStringKey ) { HRESULT t_Result = S_OK ;
LPWSTR t_Clsid_String_Key_LocalServer32 = NULL ; t_Result = WmiHelper :: ConcatenateStrings (
2, & t_Clsid_String_Key_LocalServer32 , a_ClsidStringKey , s_Strings_Reg_LocalServer32 ) ;
if ( SUCCEEDED ( t_Result ) ) { HKEY t_Clsid_Key_LocalServer32 ;
LONG t_RegResult = RegOpenKeyEx (
HKEY_CLASSES_ROOT , t_Clsid_String_Key_LocalServer32 , 0 , KEY_READ , & t_Clsid_Key_LocalServer32 ) ;
if ( t_RegResult == ERROR_SUCCESS ) { m_LocalServer32 = e_True ; m_ThreadingModel = e_Free ; m_Synchronization = e_Ignored ;
DWORD t_ValueType = REG_SZ ; DWORD t_DataSize = sizeof ( m_LocalServer32_Path ) ;
t_RegResult = RegQueryValueEx (
t_Clsid_Key_LocalServer32 , s_Strings_Reg_Null , 0 , & t_ValueType , LPBYTE ( & m_LocalServer32_Path ) , & t_DataSize );
if ( t_RegResult == ERROR_SUCCESS ) { }
RegCloseKey ( t_Clsid_Key_LocalServer32 ) ; }
SysFreeString ( t_Clsid_String_Key_LocalServer32 ) ; }
return t_Result ; }
/******************************************************************************
* * Name: * * * Description: * * *****************************************************************************/
HRESULT CServerObject_ComRegistration :: Load_ServerTypes ( LPCWSTR a_ClsidString ) { HRESULT t_Result = S_OK ;
LPWSTR t_Clsid_String_Key = NULL ; t_Result = WmiHelper :: ConcatenateStrings (
2, & t_Clsid_String_Key , a_ClsidString , L"\\" ) ;
if ( SUCCEEDED ( t_Result ) ) { t_Result = Load_InProcServer32 ( t_Clsid_String_Key ) ; if ( SUCCEEDED ( t_Result ) ) { t_Result = Load_LocalServer32 ( t_Clsid_String_Key ) ; if ( SUCCEEDED ( t_Result ) ) { } }
SysFreeString ( t_Clsid_String_Key ) ; }
return t_Result ; }
/******************************************************************************
* * Name: * * * Description: * * *****************************************************************************/
HRESULT CServerObject_ComRegistration :: Load_AppId ( HKEY a_Clsid_Key ) { HRESULT t_Result = S_OK ;
DWORD t_ValueType = REG_SZ ; wchar_t t_Data [ MAX_PATH ] ; DWORD t_DataSize = sizeof ( t_Data ) ;
LONG t_RegResult = RegQueryValueEx (
a_Clsid_Key , s_Strings_Reg_AppId , 0 , & t_ValueType , LPBYTE ( & t_Data ) , & t_DataSize );
if ( t_RegResult == ERROR_SUCCESS ) { if ( m_AppId ) { SysFreeString ( m_AppId ) ; }
m_AppId = SysAllocString ( t_Data ) ; if ( m_AppId ) { } else { t_Result = WBEM_E_OUT_OF_MEMORY ; } }
return t_Result ; }
/******************************************************************************
* * Name: * * * Description: * * *****************************************************************************/
HRESULT CServerObject_ComRegistration :: Load ( LPCWSTR a_Clsid , LPCWSTR a_ProviderName ) { HRESULT t_Result = S_OK ;
if ( m_Clsid ) { SysFreeString ( m_Clsid ) ; m_Clsid = 0; }
if (0 != a_Clsid) { m_Clsid = SysAllocString ( a_Clsid ) ; if (0 == m_Clsid ) return WBEM_E_OUT_OF_MEMORY; }
if ( m_ProviderName ) { SysFreeString ( m_ProviderName ) ; m_ProviderName = 0; }
if (0!=a_ProviderName ) { m_ProviderName = SysAllocString ( a_ProviderName ) ; if (0 == m_ProviderName) return WBEM_E_OUT_OF_MEMORY; }
LPWSTR t_Clsid_String = NULL ; t_Result = WmiHelper :: ConcatenateStrings (
2, & t_Clsid_String , s_Strings_Reg_ClsidKeyStr , a_Clsid ) ;
if ( SUCCEEDED ( t_Result ) ) { t_Result = Load_ServerTypes ( t_Clsid_String ) ;
HKEY t_Clsid_Key ;
LONG t_RegResult = RegOpenKeyEx (
HKEY_CLASSES_ROOT , t_Clsid_String , 0 , KEY_READ , & t_Clsid_Key ) ;
if ( t_RegResult == ERROR_SUCCESS ) { DWORD t_ValueType = REG_SZ ; DWORD t_DataSize = sizeof ( m_Server_Name ) ;
t_RegResult = RegQueryValueEx (
t_Clsid_Key , s_Strings_Reg_Null , 0 , & t_ValueType , LPBYTE ( & m_Server_Name ) , & t_DataSize );
if ( t_RegResult == ERROR_SUCCESS ) { } else { t_Result = WBEM_E_INVALID_PROVIDER_REGISTRATION ; }
if ( SUCCEEDED ( t_Result ) ) { t_Result = Load_AppId ( t_Clsid_Key ) ; if ( SUCCEEDED ( t_Result ) ) { if ( m_InProcServer32 != e_True && m_LocalServer32 != e_True ) { m_Service = e_True ; m_ThreadingModel = e_Free ; m_Synchronization = e_Ignored ; } } }
RegCloseKey ( t_Clsid_Key ) ; }
SysFreeString ( t_Clsid_String ) ; }
if ( SUCCEEDED ( t_Result ) ) { m_Loaded = e_True ; }
return t_Result ; }
/******************************************************************************
* * Name: * * * Description: * * *****************************************************************************/
CServerObject_ComProviderRegistrationV1 :: CServerObject_ComProviderRegistrationV1 () :
m_Context ( NULL ) , m_Namespace ( NULL ) , m_Repository ( NULL ) , m_Identity ( NULL ) , m_DefaultMachineName ( NULL ) , m_UnloadTimeout ( NULL ) , m_UnloadTimeoutMilliSeconds ( DEFAULT_PROVIDER_TIMEOUT ) , m_OperationTimeout ( NULL ) , m_OperationTimeoutMilliSeconds ( INFINITE ) , m_InitializationTimeout ( NULL ) , m_InitializationTimeoutMilliSeconds ( DEFAULT_PROVIDER_LOAD_TIMEOUT ) , m_Enabled ( TRUE ) , m_SupportsQuotas ( FALSE ) , m_SupportsThrottling ( FALSE ) , m_SupportsSendStatus ( FALSE ) , m_SupportsShutdown ( FALSE ) , m_ConcurrentIndependantRequests ( 0 ) , m_ImpersonationLevel ( e_ImpersonationLevel_Unknown ) , m_InitializationReentrancy ( e_InitializationReentrancy_Namespace ) , m_InitializeAsAdminFirst ( FALSE ) , m_PerUserInitialization ( FALSE ) , m_PerLocaleInitialization ( FALSE ) , m_Pure ( FALSE ) , m_Version ( 1 ) , m_ProviderName ( NULL ) , m_Hosting ( e_Hosting_Undefined ) , // e_Hosting_SharedLocalSystemHost e_Hosting_WmiCore
m_HostingGroup ( NULL ) , m_Result ( S_OK ) , m_SecurityDescriptor ( NULL ) , m_DecoupledImpersonationRestriction ( TRUE ) { ZeroMemory ( & m_CLSID , sizeof ( GUID ) ) ; ZeroMemory ( & m_ClientCLSID , sizeof ( GUID ) ) ; }
/******************************************************************************
* * Name: * * * Description: * * *****************************************************************************/
CServerObject_ComProviderRegistrationV1 :: ~CServerObject_ComProviderRegistrationV1 () { if ( m_SecurityDescriptor ) { LocalFree ( m_SecurityDescriptor ) ; }
if ( m_Context ) { m_Context->Release () ; }
if ( m_Namespace ) { m_Namespace->Release () ; }
if ( m_Repository ) { m_Repository->Release () ; }
if ( m_Identity ) { m_Identity->Release () ; }
if ( m_DefaultMachineName ) { SysFreeString ( m_DefaultMachineName ) ; }
if ( m_UnloadTimeout ) { SysFreeString ( m_UnloadTimeout ) ; }
if ( m_HostingGroup ) { SysFreeString ( m_HostingGroup ) ; }
if ( m_InitializationTimeout ) { SysFreeString ( m_InitializationTimeout ) ; }
if ( m_ProviderName ) { SysFreeString ( m_ProviderName ) ; } }
/******************************************************************************
* * Name: * * * Description: * * *****************************************************************************/
ULONG CServerObject_ComProviderRegistrationV1 :: AddRef () { return InterlockedIncrement ( & m_ReferenceCount ) ; }
/******************************************************************************
* * Name: * * * Description: * * *****************************************************************************/
ULONG CServerObject_ComProviderRegistrationV1 :: Release () { ULONG t_ReferenceCount = InterlockedDecrement ( & m_ReferenceCount ) ; if ( t_ReferenceCount == 0 ) { delete this ; }
return t_ReferenceCount ; }
/******************************************************************************
* * Name: * * * Description: * * *****************************************************************************/
HRESULT CServerObject_ComProviderRegistrationV1 :: SetContext (
IWbemContext *a_Context , IWbemPath *a_Namespace , IWbemServices *a_Repository ) { HRESULT t_Result = S_OK ;
m_Context = a_Context ; m_Namespace = a_Namespace ; m_Repository = a_Repository ;
if ( m_Context ) { m_Context->AddRef () ; }
if ( m_Namespace ) { m_Namespace->AddRef () ; }
if ( m_Repository ) { m_Repository->AddRef () ; }
return t_Result ; }
/******************************************************************************
* * Name: * * * Description: * * *****************************************************************************/
HRESULT CServerObject_ComProviderRegistrationV1 :: GetDefaultHostingGroup (
Enum_Hosting a_HostingValue , BSTR & a_HostingGroup ) { HRESULT t_Result = S_OK ;
switch ( a_HostingValue ) { case e_Hosting_SharedLocalSystemHost: case e_Hosting_SharedLocalSystemHostOrSelfHost: { a_HostingGroup = SysAllocString ( s_Strings_Wmi_DefaultSharedLocalSystemHost ) ;
} break ;
case e_Hosting_SharedNetworkServiceHost: { a_HostingGroup = SysAllocString ( s_Strings_Wmi_DefaultSharedNetworkServiceHost ) ; } break ;
case e_Hosting_SharedLocalServiceHost: { a_HostingGroup = SysAllocString ( s_Strings_Wmi_DefaultSharedLocalServiceHost ) ; } break ;
default: { t_Result = WBEM_E_INVALID_PROVIDER_REGISTRATION ; } break ; } if ( SUCCEEDED(t_Result) && (0 == a_HostingGroup) ) t_Result = WBEM_E_OUT_OF_MEMORY; return t_Result ; }
/******************************************************************************
* * Name: * * * Description: * * *****************************************************************************/
HRESULT CServerObject_ComProviderRegistrationV1 :: GetHostingGroup (
LPCWSTR a_Hosting , size_t a_Prefix , Enum_Hosting a_ExpectedHostingValue , Enum_Hosting & a_HostingValue , BSTR & a_HostingGroup ) { HRESULT t_Result = S_OK ;
size_t t_Length = wcslen ( a_Hosting ) ;
if ( t_Length > a_Prefix ) { if ( a_Hosting [ a_Prefix ] == L':' ) { if ( t_Length > a_Prefix + 1 ) { a_HostingGroup = SysAllocString ( & a_Hosting [ a_Prefix + 1 ] ) ; if ( a_HostingGroup ) { } else { t_Result = WBEM_E_OUT_OF_MEMORY ; }
a_HostingValue = a_ExpectedHostingValue ; } else { t_Result = GetDefaultHostingGroup ( a_ExpectedHostingValue , a_HostingGroup ) ; } } else { t_Result = WBEM_E_INVALID_PROVIDER_REGISTRATION ; } } else { t_Result = GetDefaultHostingGroup ( a_ExpectedHostingValue , a_HostingGroup ) ;
a_HostingValue = a_ExpectedHostingValue ; }
return t_Result ; }
/******************************************************************************
* * Name: * * * Description: * * *****************************************************************************/
#define StateAction_Accept 1 // Add the char to the token
#define StateAction_Consume 2 // Consume the char without adding to token
#define StateAction_Pushback 4 // Place the char back in the source buffer for next token
#define StateAction_Not 8 // A match occurs if the char is NOT the one specified
#define StateAction_Linefeed 16 // Increase the source linecount
#define StateAction_Return 32 // Return the indicated token to caller
#define StateAction_Any 64 // wchar_t(0xFFFF) Any character
#define StateAction_Empty 128 // wchar_t(0xFFFE) When subrange is not specified
/******************************************************************************
* * Name: * * * Description: * * *****************************************************************************/
struct StateTableEntry { wchar_t m_LowerRange ; wchar_t m_UpperRange ;
ULONG m_Token ; ULONG m_GotoState ; ULONG m_Action ; } ;
/******************************************************************************
* * Name: * * * Description: * * *****************************************************************************/
enum LexicalStatus { Success , Syntax_Error , Lexical_Error , Failed , Buffer_Too_Small , ImpossibleState , UnexpectedEof , OutOfMemory } ;
/******************************************************************************
* * Name: * * * Description: * * *****************************************************************************/
#define TOKEN_IDENTITY 1
#define TOKEN_LEFTPARENTHESIS 2
#define TOKEN_RIGHTPARENTHESIS 3
#define TOKEN_TRUE 4
#define TOKEN_FALSE 5
#define TOKEN_EOF 6
#define TOKEN_ERROR 7
/******************************************************************************
* * Name: * * * Description: * * *****************************************************************************/
struct StateTableEntry g_StateTable [] = {
' ', 65534 , 0 , 0 , StateAction_Consume , // 0
'\t', 65534 , 0 , 0 , StateAction_Consume , // 1
'a', 'z', 0 , 8 , StateAction_Accept , // 2
'A', 'Z', 0 , 8 , StateAction_Accept , // 3
'(', 65534 , TOKEN_LEFTPARENTHESIS , 0 , StateAction_Return , // 4
')', 65534 , TOKEN_RIGHTPARENTHESIS , 0 , StateAction_Return , // 5
0, 65534 , TOKEN_EOF , 0 , StateAction_Return , // 6
65535, 65534 , TOKEN_ERROR , 0 , StateAction_Return , // 7
'a', 'z', 0 , 8 , StateAction_Accept , // 8
'A', 'Z', 0 , 8 , StateAction_Accept , // 9
65535, 65534 , TOKEN_IDENTITY , 0 , StateAction_Pushback | StateAction_Return // 10
} ;
/******************************************************************************
* * Name: * * * Description: * * *****************************************************************************/
LexicalStatus LexicalAnalyser_NextToken (
StateTableEntry *a_Dfa , ULONG a_DfaSize , const wchar_t *a_Stream , ULONG a_Position , ULONG &a_Token , ULONG &a_NextPosition , wchar_t *&a_TokenText ) { LexicalStatus t_Status = Success ;
a_Token = 0 ; a_TokenText = NULL ; a_NextPosition = a_Position ;
ULONG t_State = 0 ; BOOL t_Read = TRUE ; BOOL t_EndOfFile = FALSE ; wchar_t t_Current = 0 ; ULONG CurrentLine = 0 ; wchar_t *t_TokenText = NULL ; ULONG t_TokenTextActualSize = 0 ; ULONG t_TokenTextBufferSize = 0 ;
while ( 1 ) { wchar_t t_First = a_Dfa [ t_State ].m_LowerRange ; wchar_t t_Last = a_Dfa [ t_State ].m_UpperRange ; ULONG t_GotoState = a_Dfa [ t_State ].m_GotoState ; ULONG t_ReturnToken = a_Dfa [ t_State ].m_Token ; ULONG t_Action = a_Dfa [ t_State ].m_Action ;
if ( t_Read ) { if ( t_EndOfFile ) { t_Status = UnexpectedEof ;
delete [] t_TokenText ;
return t_Status ; }
if ( a_NextPosition > wcslen ( a_Stream ) ) { t_Current = 0 ;
t_EndOfFile = TRUE ; } else { t_Current = a_Stream [ a_NextPosition ] ; } }
BOOL t_Match = FALSE ;
if ( t_First == 65535 ) { t_Match = TRUE ; } else { if ( t_Last == 65534 ) { if ( t_Current == t_First ) { t_Match = TRUE ; } else { if ( ( t_Action & StateAction_Not ) && ( t_Current != t_First ) ) { t_Match = TRUE ; } } } else { if ( ( t_Action & StateAction_Not ) && ( ! ( ( t_Current >= t_First ) && ( t_Current <= t_Last ) ) ) ) { t_Match = TRUE ; } else { if ( ( t_Current >= t_First ) && ( t_Current <= t_Last ) ) { t_Match = TRUE ; } } } }
t_Read = FALSE ;
if ( t_Match ) { if ( t_Action & StateAction_Accept ) { if ( t_TokenText ) { if ( t_TokenTextActualSize < t_TokenTextBufferSize - 1 ) { } else { t_TokenTextBufferSize = t_TokenTextBufferSize + 32 ; wchar_t *t_TempTokenText = new wchar_t [ t_TokenTextBufferSize ] ; if ( t_TempTokenText ) { CopyMemory ( t_TempTokenText , t_TokenText , ( t_TokenTextActualSize ) * sizeof ( wchar_t ) ) ;
delete [] t_TokenText ; t_TokenText = t_TempTokenText ; } else { delete [] t_TokenText ;
return OutOfMemory ; } }
t_TokenText [ t_TokenTextActualSize ] = t_Current ; t_TokenText [ t_TokenTextActualSize + 1 ] = 0 ;
t_TokenTextActualSize ++ ; } else { t_TokenTextActualSize = 1 ; t_TokenTextBufferSize = 32 ;
t_TokenText = new wchar_t [ t_TokenTextBufferSize ] ; if ( t_TokenText ) { t_TokenText [ 0 ] = t_Current ; t_TokenText [ 1 ] = 0 ; } else { return OutOfMemory ; } }
t_Read = TRUE ; }
if ( t_Action & StateAction_Consume ) { t_Read = TRUE ; }
if ( t_Action & StateAction_Pushback ) { t_Read = TRUE ;
a_NextPosition = a_NextPosition - 1 ; }
if ( t_Action & StateAction_Linefeed ) { CurrentLine = CurrentLine + 1 ; }
a_NextPosition = a_NextPosition + 1 ;
if ( t_Action & StateAction_Return ) { a_Token = t_ReturnToken ; a_TokenText = t_TokenText ;
return t_Status ; }
t_State = t_GotoState ; } else { t_State = t_State + 1 ; } }
delete [] t_TokenText ;
return ImpossibleState ; }
/******************************************************************************
* * Name: * * * Description: * * *****************************************************************************/
HRESULT CServerObject_ComProviderRegistrationV1 :: GetDecoupledImpersonationRestriction (
LPCWSTR a_Hosting , BOOL &a_ImpersonationRestriction ) { HRESULT t_Result = S_OK ;
if ( wbem_wcsicmp ( a_Hosting , s_Strings_Wmi_Decoupled ) != 0 ) { if ( wbem_wcsnicmp ( a_Hosting , s_Strings_Wmi_DecoupledColon , ( sizeof ( s_Strings_Wmi_DecoupledColon ) / sizeof ( WCHAR ) - 1 ) ) == 0 ) { const wchar_t *t_Scan = & a_Hosting [ ( sizeof ( s_Strings_Wmi_DecoupledColon ) / sizeof ( WCHAR ) - 1 ) ] ;
ULONG t_Position = 0 ; ULONG t_Token = 0 ; ULONG t_NextPosition = 0 ; wchar_t *t_FoldText = NULL ;
LexicalStatus t_Status = LexicalAnalyser_NextToken (
g_StateTable , sizeof ( g_StateTable ) / sizeof ( StateTableEntry ) , t_Scan , t_Position , t_Token , t_NextPosition , t_FoldText ) ;
if ( ( t_Status == Success ) && ( t_Token == TOKEN_IDENTITY ) && (t_FoldText!=0) && ( wbem_wcsicmp ( t_FoldText , L"FoldIdentity" ) == 0 ) ) { wchar_t *t_IgnoreText = NULL ;
t_Position = t_NextPosition ;
t_Status = LexicalAnalyser_NextToken (
g_StateTable , sizeof ( g_StateTable ) / sizeof ( StateTableEntry ) , t_Scan , t_Position , t_Token , t_NextPosition , t_IgnoreText ) ;
delete [] t_IgnoreText ;
if ( ( t_Status == Success ) && ( t_Token == TOKEN_LEFTPARENTHESIS ) ) { wchar_t *t_ValueText = NULL ;
t_Position = t_NextPosition ;
t_Status = LexicalAnalyser_NextToken (
g_StateTable , sizeof ( g_StateTable ) / sizeof ( StateTableEntry ) , t_Scan , t_Position , t_Token , t_NextPosition , t_ValueText ) ;
if ( ( t_Status == Success ) && ( t_Token == TOKEN_IDENTITY ) && ( wbem_wcsicmp ( t_ValueText , L"TRUE" ) == 0 ) ) { a_ImpersonationRestriction = TRUE ; } else if ( ( t_Status == Success ) && ( t_Token == TOKEN_IDENTITY ) && ( wbem_wcsicmp ( t_ValueText , L"FALSE" ) == 0 ) ) { a_ImpersonationRestriction = FALSE ; } else { t_Status = Syntax_Error ; }
delete [] t_ValueText ; } else { t_Status = Syntax_Error ; }
if ( t_Status == Success ) { wchar_t *t_IgnoreText = NULL ;
t_Position = t_NextPosition ;
t_Status = LexicalAnalyser_NextToken (
g_StateTable , sizeof ( g_StateTable ) / sizeof ( StateTableEntry ) , t_Scan , t_Position , t_Token , t_NextPosition , t_IgnoreText ) ;
if ( ( t_Status == Success ) && ( t_Token == TOKEN_RIGHTPARENTHESIS ) ) { } else { t_Status = Syntax_Error ; }
delete [] t_IgnoreText ; }
if ( t_Status == Success ) { wchar_t *t_IgnoreText = NULL ;
t_Position = t_NextPosition ;
t_Status = LexicalAnalyser_NextToken (
g_StateTable , sizeof ( g_StateTable ) / sizeof ( StateTableEntry ) , t_Scan , t_Position , t_Token , t_NextPosition , t_IgnoreText ) ;
if ( ( t_Status == Success ) && ( t_Token == TOKEN_EOF ) ) { } else { t_Status = Syntax_Error ; }
delete [] t_IgnoreText ; } } else { t_Status = Syntax_Error ; }
delete [] t_FoldText ;
if ( t_Status != Success ) { t_Result = WBEM_E_INVALID_PROVIDER_REGISTRATION ; } } else { t_Result = WBEM_E_INVALID_PROVIDER_REGISTRATION ; }
}
return t_Result ; }
/******************************************************************************
* * Name: * * * Description: * * *****************************************************************************/
HRESULT CServerObject_ComProviderRegistrationV1 :: GetHosting (
LPCWSTR a_Hosting , Enum_Hosting & a_HostingValue , LPWSTR &a_HostingGroup , BOOL & a_ImpersonationRestriction ) { HRESULT t_Result = S_OK ;
if ( wbem_wcsicmp ( a_Hosting , s_Strings_Wmi_WmiCore ) == 0 ) { a_HostingValue = e_Hosting_WmiCore ; } else if ( wbem_wcsicmp ( a_Hosting , s_Strings_Wmi_WmiCoreOrSelfHost ) == 0 ) { a_HostingValue = e_Hosting_WmiCoreOrSelfHost ; } else if ( wbem_wcsicmp ( a_Hosting , s_Strings_Wmi_SelfHost ) == 0 ) { a_HostingValue = e_Hosting_SelfHost ; } else if ( wbem_wcsnicmp ( a_Hosting , s_Strings_Wmi_Decoupled , ( sizeof ( s_Strings_Wmi_Decoupled ) / sizeof ( WCHAR ) -1 ) ) == 0 ) { a_HostingValue = e_Hosting_Decoupled ;
t_Result = GetDecoupledImpersonationRestriction (
a_Hosting , a_ImpersonationRestriction ) ; } else if ( wbem_wcsicmp ( a_Hosting , s_Strings_Wmi_NonCom ) == 0 ) { a_HostingValue = e_Hosting_NonCom ; } else if ( wbem_wcsnicmp ( a_Hosting , s_Strings_Wmi_SharedLocalSystemHostOrSelfHost , ( sizeof ( s_Strings_Wmi_SharedLocalSystemHostOrSelfHost ) / sizeof ( WCHAR ) - 1 ) ) == 0 ) { t_Result = GetHostingGroup (
a_Hosting , ( sizeof ( s_Strings_Wmi_SharedLocalSystemHostOrSelfHost ) / sizeof ( WCHAR ) - 1 ) , e_Hosting_SharedLocalSystemHostOrSelfHost , a_HostingValue , a_HostingGroup ) ; } else if ( wbem_wcsnicmp ( a_Hosting , s_Strings_Wmi_SharedLocalSystemHost , ( sizeof ( s_Strings_Wmi_SharedLocalSystemHost ) / sizeof ( WCHAR ) - 1 ) ) == 0 ) { t_Result = GetHostingGroup (
a_Hosting , ( sizeof ( s_Strings_Wmi_SharedLocalSystemHost ) / sizeof ( WCHAR ) - 1 ) , e_Hosting_SharedLocalSystemHost , a_HostingValue , a_HostingGroup ) ; } else if ( wbem_wcsnicmp ( a_Hosting , s_Strings_Wmi_SharedNetworkServiceHost , ( sizeof ( s_Strings_Wmi_SharedNetworkServiceHost ) / sizeof ( WCHAR ) - 1 ) ) == 0 ) { t_Result = GetHostingGroup (
a_Hosting , ( sizeof ( s_Strings_Wmi_SharedNetworkServiceHost ) / sizeof ( WCHAR ) - 1 ) , e_Hosting_SharedNetworkServiceHost , a_HostingValue , a_HostingGroup ) ; } else if ( wbem_wcsnicmp ( a_Hosting , s_Strings_Wmi_SharedLocalServiceHost , ( sizeof ( s_Strings_Wmi_SharedLocalServiceHost ) / sizeof ( WCHAR ) - 1 ) ) == 0 ) { t_Result = GetHostingGroup (
a_Hosting , ( sizeof ( s_Strings_Wmi_SharedLocalServiceHost ) / sizeof ( WCHAR ) - 1 ) , e_Hosting_SharedLocalServiceHost , a_HostingValue , a_HostingGroup ) ; } else { t_Result = WBEM_E_INVALID_PROVIDER_REGISTRATION ; }
return t_Result ; }
/******************************************************************************
* * Name: * * * Description: * * *****************************************************************************/
HRESULT CServerObject_ComProviderRegistrationV1 :: QueryProperties (
Enum_PropertyMask a_Mask , IWbemClassObject *a_Object , LPCWSTR a_ProviderName ) { HRESULT t_Result = S_OK ;
if ( a_Mask & e_Version ) { VARIANT t_Variant ; VariantInit ( & t_Variant ) ; LONG t_VarType = 0 ; LONG t_Flavour = 0 ;
HRESULT t_TempResult = a_Object->Get ( s_Strings_Wmi_Version , 0 , & t_Variant , & t_VarType , & t_Flavour ) ; if ( SUCCEEDED ( t_TempResult ) ) { if ( t_Variant.vt == VT_I4 ) { m_Version = t_Variant.lVal ; } else if ( t_Variant.vt == VT_NULL ) { m_Version = 1 ; } else { t_Result = WBEM_E_INVALID_PROVIDER_REGISTRATION ; } } else if (t_TempResult != WBEM_E_NOT_FOUND) { t_Result = t_TempResult; }
VariantClear ( & t_Variant ) ; }
if ( SUCCEEDED ( t_Result ) ) { if ( a_Mask & e_Name ) { VARIANT t_Variant ; VariantInit ( & t_Variant ) ; LONG t_VarType = 0 ; LONG t_Flavour = 0 ;
HRESULT t_TempResult = a_Object->Get ( s_Strings_Wmi_Name , 0 , & t_Variant , & t_VarType , & t_Flavour ) ; if ( SUCCEEDED ( t_TempResult ) ) { if ( t_Variant.vt == VT_BSTR ) { if ( m_ProviderName ) { SysFreeString ( m_ProviderName ) ; }
m_ProviderName = SysAllocString ( t_Variant.bstrVal ) ; if ( m_ProviderName == NULL ) { t_Result = WBEM_E_OUT_OF_MEMORY ; } } else { t_Result = WBEM_E_INVALID_PROVIDER_REGISTRATION ; } } else if (t_TempResult != WBEM_E_NOT_FOUND) { t_Result = t_TempResult; } VariantClear ( & t_Variant ) ; } }
if ( SUCCEEDED ( t_Result ) ) { if ( a_Mask & e_Enabled ) { VARIANT t_Variant ; VariantInit ( & t_Variant ) ; LONG t_VarType = 0 ; LONG t_Flavour = 0 ;
HRESULT t_TempResult = a_Object->Get ( s_Strings_Wmi_Enabled , 0 , & t_Variant , & t_VarType , & t_Flavour ) ; if ( SUCCEEDED ( t_TempResult ) ) { if ( t_Variant.vt == VT_BOOL ) { m_Enabled = ( t_Variant.boolVal == VARIANT_TRUE ) ? TRUE : FALSE ; } else if ( t_Variant.vt == VT_NULL ) { m_Enabled = TRUE ; } else { t_Result = WBEM_E_INVALID_PROVIDER_REGISTRATION ; } } else if (t_TempResult != WBEM_E_NOT_FOUND) { t_Result = t_TempResult; }
VariantClear ( & t_Variant ) ; } }
if ( SUCCEEDED ( t_Result ) ) { if ( a_Mask & e_Clsid ) { VARIANT t_Variant ; VariantInit ( & t_Variant ) ; LONG t_VarType = 0 ; LONG t_Flavour = 0 ;
HRESULT t_TempResult = a_Object->Get ( s_Strings_Wmi_Clsid , 0 , & t_Variant , & t_VarType , & t_Flavour ) ; if ( SUCCEEDED ( t_TempResult ) ) { if ( t_Variant.vt == VT_BSTR ) { t_Result = CLSIDFromString ( t_Variant.bstrVal , & m_CLSID ) ; if ( SUCCEEDED ( t_Result ) ) { t_Result = m_ClsidServer.Load ( (LPCWSTR) t_Variant.bstrVal , a_ProviderName ) ; } else { t_Result = WBEM_E_INVALID_PROVIDER_REGISTRATION ; } } else if ( t_Variant.vt == VT_NULL ) { m_CLSID = CLSID_NULL ; } else { t_Result = WBEM_E_INVALID_PROVIDER_REGISTRATION ; } } else if (t_TempResult != WBEM_E_NOT_FOUND) { t_Result = t_TempResult; }
VariantClear ( & t_Variant ) ; } }
if ( SUCCEEDED ( t_Result ) ) { if ( a_Mask & e_ClientClsid ) { VARIANT t_Variant ; VariantInit ( & t_Variant ) ; LONG t_VarType = 0 ; LONG t_Flavour = 0 ;
HRESULT t_TempResult = a_Object->Get ( s_Strings_Wmi_ClientClsid , 0 , & t_Variant , & t_VarType , & t_Flavour ) ; if ( SUCCEEDED ( t_TempResult ) ) { if ( t_Variant.vt == VT_BSTR ) { t_Result = CLSIDFromString ( t_Variant.bstrVal , & m_ClientCLSID ) ; if ( SUCCEEDED ( t_Result ) ) { } else { t_Result = WBEM_E_INVALID_PROVIDER_REGISTRATION ; } } else if ( t_Variant.vt == VT_NULL ) { m_ClientCLSID = CLSID_NULL ; } else { t_Result = WBEM_E_INVALID_PROVIDER_REGISTRATION ; } } else if (t_TempResult != WBEM_E_NOT_FOUND) { t_Result = t_TempResult; }
VariantClear ( & t_Variant ) ; } }
if ( SUCCEEDED ( t_Result ) ) { if ( a_Mask & e_DefaultMachineName ) { VARIANT t_Variant ; VariantInit ( & t_Variant ) ; LONG t_VarType = 0 ; LONG t_Flavour = 0 ;
HRESULT t_TempResult = a_Object->Get ( s_Strings_Wmi_DefaultMachineName , 0 , & t_Variant , & t_VarType , & t_Flavour ) ; if ( SUCCEEDED ( t_TempResult ) ) { if ( t_Variant.vt == VT_BSTR ) { if ( m_DefaultMachineName ) { SysFreeString ( m_DefaultMachineName ) ; }
m_DefaultMachineName = SysAllocString ( t_Variant.bstrVal ) ; if ( m_DefaultMachineName == NULL ) { t_Result = WBEM_E_OUT_OF_MEMORY ; } } else if ( t_Variant.vt == VT_NULL ) { if ( m_DefaultMachineName ) { SysFreeString ( m_DefaultMachineName ) ; m_DefaultMachineName = NULL ; } } else { t_Result = WBEM_E_INVALID_PROVIDER_REGISTRATION ; } } else if (t_TempResult != WBEM_E_NOT_FOUND) { t_Result = t_TempResult; }
VariantClear ( & t_Variant ) ; } }
if ( SUCCEEDED ( t_Result ) ) { if ( a_Mask & e_UnloadTimeout ) { VARIANT t_Variant ; VariantInit ( & t_Variant ) ; LONG t_VarType = 0 ; LONG t_Flavour = 0 ;
HRESULT t_TempResult = a_Object->Get ( s_Strings_Wmi_UnloadTimeout , 0 , & t_Variant , & t_VarType , & t_Flavour ) ; if ( SUCCEEDED ( t_TempResult ) ) { if ( t_Variant.vt == VT_BSTR ) { if ( m_UnloadTimeout ) { SysFreeString ( m_UnloadTimeout ) ; }
m_UnloadTimeout = SysAllocString ( t_Variant.bstrVal ) ; if ( m_UnloadTimeout ) { CWbemDateTime t_Interval ; t_Result = t_Interval.PutValue ( m_UnloadTimeout ) ; if ( SUCCEEDED ( t_Result ) ) { VARIANT_BOOL t_Bool = VARIANT_FALSE ; t_Result = t_Interval.GetIsInterval ( & t_Bool ) ; if ( t_Bool == VARIANT_TRUE ) { LONG t_MicroSeconds = 0 ; LONG t_Seconds = 0 ; LONG t_Minutes = 0 ; LONG t_Hours = 0 ; LONG t_Days = 0 ;
t_Interval.GetMicroseconds ( & t_MicroSeconds ) ; t_Interval.GetSeconds ( & t_Seconds ) ; t_Interval.GetMinutes ( & t_Minutes ) ; t_Interval.GetHours ( & t_Hours ) ; t_Interval.GetDay ( & t_Days ) ;
m_UnloadTimeoutMilliSeconds = ( t_Days * 24 * 60 * 60 * 1000 ) + ( t_Hours * 60 * 60 * 1000 ) + ( t_Minutes * 60 * 1000 ) + ( t_Seconds * 1000 ) + ( t_MicroSeconds / 1000 ) ; } else { t_Result = WBEM_E_INVALID_PROVIDER_REGISTRATION ; } } else { t_Result = WBEM_E_INVALID_PROVIDER_REGISTRATION ; } } else { t_Result = WBEM_E_OUT_OF_MEMORY ; } } else if ( t_Variant.vt == VT_NULL ) { if ( m_UnloadTimeout ) { SysFreeString ( m_UnloadTimeout ) ; m_UnloadTimeout = NULL ; } } else { t_Result = WBEM_E_INVALID_PROVIDER_REGISTRATION ; } } else if (t_TempResult != WBEM_E_NOT_FOUND) { t_Result = t_TempResult; }
VariantClear ( & t_Variant ) ; } }
if ( SUCCEEDED ( t_Result ) ) { if ( a_Mask & e_ImpersonationLevel ) { VARIANT t_Variant ; VariantInit ( & t_Variant ) ; LONG t_VarType = 0 ; LONG t_Flavour = 0 ;
HRESULT t_TempResult = a_Object->Get ( s_Strings_Wmi_ImpersonationLevel , 0 , & t_Variant , & t_VarType , & t_Flavour ) ; if ( SUCCEEDED ( t_TempResult ) ) { if ( t_Variant.vt == VT_I4 ) { switch ( t_Variant.lVal ) { case 0: { m_ImpersonationLevel = e_Impersonate_None ; } break ;
case 1: { m_ImpersonationLevel = e_Impersonate ; } break ;
default: { if ( m_Version > 1 ) { t_Result = WBEM_E_INVALID_PROVIDER_REGISTRATION ; } else { m_ImpersonationLevel = e_Impersonate_None ; } } break ; } } else if ( t_Variant.vt == VT_NULL ) { m_ImpersonationLevel = e_Impersonate_None ; } else { t_Result = WBEM_E_INVALID_PROVIDER_REGISTRATION ; } } else if (t_TempResult != WBEM_E_NOT_FOUND) { t_Result = t_TempResult; }
VariantClear ( & t_Variant ) ; } }
if ( SUCCEEDED ( t_Result ) ) { if ( a_Mask & e_SupportsSendStatus ) { VARIANT t_Variant ; VariantInit ( & t_Variant ) ; LONG t_VarType = 0 ; LONG t_Flavour = 0 ;
HRESULT t_TempResult = a_Object->Get ( s_Strings_Wmi_SupportsSendStatus , 0 , & t_Variant , & t_VarType , & t_Flavour ) ; if ( SUCCEEDED ( t_TempResult ) ) { if ( t_Variant.vt == VT_BOOL ) { m_SupportsSendStatus = ( t_Variant.boolVal == VARIANT_TRUE ) ? TRUE : FALSE ; } else if ( t_Variant.vt == VT_NULL ) { m_SupportsSendStatus = TRUE ; } else { t_Result = WBEM_E_INVALID_PROVIDER_REGISTRATION ; } } else if (t_TempResult != WBEM_E_NOT_FOUND) { t_Result = t_TempResult; }
VariantClear ( & t_Variant ) ; } }
if ( SUCCEEDED ( t_Result ) ) { if ( a_Mask & e_SupportsShutdown ) { VARIANT t_Variant ; VariantInit ( & t_Variant ) ; LONG t_VarType = 0 ; LONG t_Flavour = 0 ;
HRESULT t_TempResult = a_Object->Get ( s_Strings_Wmi_SupportsShutdown , 0 , & t_Variant , & t_VarType , & t_Flavour ) ; if ( SUCCEEDED ( t_TempResult ) ) { if ( t_Variant.vt == VT_BOOL ) { m_SupportsShutdown = ( t_Variant.boolVal == VARIANT_TRUE ) ? TRUE : FALSE ; } else if ( t_Variant.vt == VT_NULL ) { m_SupportsShutdown = FALSE ; } else { t_Result = WBEM_E_INVALID_PROVIDER_REGISTRATION ; } } else if (t_TempResult != WBEM_E_NOT_FOUND) { t_Result = t_TempResult; }
VariantClear ( & t_Variant ) ; } }
if ( SUCCEEDED ( t_Result ) ) { if ( a_Mask & e_SupportsQuotas ) { VARIANT t_Variant ; VariantInit ( & t_Variant ) ; LONG t_VarType = 0 ; LONG t_Flavour = 0 ;
HRESULT t_TempResult = a_Object->Get ( s_Strings_Wmi_SupportsQuotas , 0 , & t_Variant , & t_VarType , & t_Flavour ) ; if ( SUCCEEDED ( t_TempResult ) ) { if ( t_Variant.vt == VT_BOOL ) { m_SupportsQuotas = ( t_Variant.boolVal == VARIANT_TRUE ) ? TRUE : FALSE ; } else if ( t_Variant.vt == VT_NULL ) { m_SupportsQuotas = FALSE ; } else { t_Result = WBEM_E_INVALID_PROVIDER_REGISTRATION ; } } else if (t_TempResult != WBEM_E_NOT_FOUND) { t_Result = t_TempResult; }
VariantClear ( & t_Variant ) ; } }
if ( SUCCEEDED ( t_Result ) ) { if ( a_Mask & e_OperationTimeoutInterval ) { VARIANT t_Variant ; VariantInit ( & t_Variant ) ; LONG t_VarType = 0 ; LONG t_Flavour = 0 ;
HRESULT t_TempResult = a_Object->Get ( s_Strings_Wmi_OperationTimeoutInterval , 0 , & t_Variant , & t_VarType , & t_Flavour ) ; if ( SUCCEEDED ( t_TempResult ) ) { if ( t_Variant.vt == VT_BSTR ) { if ( m_OperationTimeout ) { SysFreeString ( m_OperationTimeout ) ; }
m_OperationTimeout = SysAllocString ( t_Variant.bstrVal ) ; if ( m_OperationTimeout ) { CWbemDateTime t_Interval ; t_Result = t_Interval.PutValue ( m_OperationTimeout ) ; if ( SUCCEEDED ( t_Result ) ) { VARIANT_BOOL t_Bool = VARIANT_FALSE ; t_Result = t_Interval.GetIsInterval ( & t_Bool ) ; if ( t_Bool == VARIANT_TRUE ) { LONG t_MicroSeconds = 0 ; LONG t_Seconds = 0 ; LONG t_Minutes = 0 ; LONG t_Hours = 0 ; LONG t_Days = 0 ;
t_Interval.GetMicroseconds ( & t_MicroSeconds ) ; t_Interval.GetSeconds ( & t_Seconds ) ; t_Interval.GetMinutes ( & t_Minutes ) ; t_Interval.GetHours ( & t_Hours ) ; t_Interval.GetDay ( & t_Days ) ;
m_OperationTimeoutMilliSeconds = ( t_Days * 24 * 60 * 60 * 1000 ) + ( t_Hours * 60 * 60 * 1000 ) + ( t_Minutes * 60 * 1000 ) + ( t_Seconds * 1000 ) + ( t_MicroSeconds / 1000 ) ; } else { t_Result = WBEM_E_INVALID_PROVIDER_REGISTRATION ; } } else { t_Result = WBEM_E_INVALID_PROVIDER_REGISTRATION ; } } else { t_Result = WBEM_E_OUT_OF_MEMORY ; } } else if ( t_Variant.vt == VT_NULL ) { if ( m_OperationTimeout ) { SysFreeString ( m_OperationTimeout ) ; m_UnloadTimeout = NULL ; } } else { t_Result = WBEM_E_INVALID_PROVIDER_REGISTRATION ; } } else if (t_TempResult != WBEM_E_NOT_FOUND) { t_Result = t_TempResult; }
VariantClear ( & t_Variant ) ; } }
if ( SUCCEEDED ( t_Result ) ) { if ( a_Mask & e_InitializationTimeoutInterval ) { VARIANT t_Variant ; VariantInit ( & t_Variant ) ; LONG t_VarType = 0 ; LONG t_Flavour = 0 ;
HRESULT t_TempResult = a_Object->Get ( s_Strings_Wmi_InitializationTimeoutInterval , 0 , & t_Variant , & t_VarType , & t_Flavour ) ; if ( SUCCEEDED ( t_TempResult ) ) { if ( t_Variant.vt == VT_BSTR ) { if ( m_InitializationTimeout ) { SysFreeString ( m_InitializationTimeout ) ; }
m_InitializationTimeout = SysAllocString ( t_Variant.bstrVal ) ; if ( m_InitializationTimeout ) { CWbemDateTime t_Interval ; t_Result = t_Interval.PutValue ( m_InitializationTimeout ) ; if ( SUCCEEDED ( t_Result ) ) { VARIANT_BOOL t_Bool = VARIANT_FALSE ; t_Result = t_Interval.GetIsInterval ( & t_Bool ) ; if ( t_Bool == VARIANT_TRUE ) { LONG t_MicroSeconds = 0 ; LONG t_Seconds = 0 ; LONG t_Minutes = 0 ; LONG t_Hours = 0 ; LONG t_Days = 0 ;
t_Interval.GetMicroseconds ( & t_MicroSeconds ) ; t_Interval.GetSeconds ( & t_Seconds ) ; t_Interval.GetMinutes ( & t_Minutes ) ; t_Interval.GetHours ( & t_Hours ) ; t_Interval.GetDay ( & t_Days ) ;
m_InitializationTimeoutMilliSeconds = ( t_Days * 24 * 60 * 60 * 1000 ) + ( t_Hours * 60 * 60 * 1000 ) + ( t_Minutes * 60 * 1000 ) + ( t_Seconds * 1000 ) + ( t_MicroSeconds / 1000 ) ; } else { t_Result = WBEM_E_INVALID_PROVIDER_REGISTRATION ; } } else { t_Result = WBEM_E_INVALID_PROVIDER_REGISTRATION ; } } else { t_Result = WBEM_E_OUT_OF_MEMORY ; } } else if ( t_Variant.vt == VT_NULL ) { if ( m_InitializationTimeout ) { SysFreeString ( m_InitializationTimeout ) ; m_UnloadTimeout = NULL ; } } else { t_Result = WBEM_E_INVALID_PROVIDER_REGISTRATION ; } } else if (t_TempResult != WBEM_E_NOT_FOUND) { t_Result = t_TempResult; }
VariantClear ( & t_Variant ) ; } }
if ( SUCCEEDED ( t_Result ) ) { if ( a_Mask & e_SupportsThrottling ) { VARIANT t_Variant ; VariantInit ( & t_Variant ) ; LONG t_VarType = 0 ; LONG t_Flavour = 0 ;
HRESULT t_TempResult = a_Object->Get ( s_Strings_Wmi_SupportsThrottling , 0 , & t_Variant , & t_VarType , & t_Flavour ) ; if ( SUCCEEDED ( t_TempResult ) ) { if ( t_Variant.vt == VT_BOOL ) { m_SupportsThrottling = ( t_Variant.boolVal == VARIANT_TRUE ) ? TRUE : FALSE ; } else if ( t_Variant.vt == VT_NULL ) { m_SupportsThrottling = FALSE ; } else { t_Result = WBEM_E_INVALID_PROVIDER_REGISTRATION ; } } else if (t_TempResult != WBEM_E_NOT_FOUND) { t_Result = t_TempResult; }
VariantClear ( & t_Variant ) ; } }
if ( SUCCEEDED ( t_Result ) ) { if ( a_Mask & e_ConcurrentIndependantRequests ) { VARIANT t_Variant ; VariantInit ( & t_Variant ) ; LONG t_VarType = 0 ; LONG t_Flavour = 0 ;
HRESULT t_TempResult = a_Object->Get ( s_Strings_Wmi_ConcurrentIndependantRequests , 0 , & t_Variant , & t_VarType , & t_Flavour ) ; if ( SUCCEEDED ( t_TempResult ) ) { if ( t_Variant.vt == VT_I4 ) { m_ConcurrentIndependantRequests = t_Variant.lVal ; } else if ( t_Variant.vt == VT_NULL ) { m_ConcurrentIndependantRequests = 0 ; } else { t_Result = WBEM_E_INVALID_PROVIDER_REGISTRATION ; } } else if (t_TempResult != WBEM_E_NOT_FOUND) { t_Result = t_TempResult; }
VariantClear ( & t_Variant ) ; } }
if ( SUCCEEDED ( t_Result ) ) { if ( a_Mask & e_InitializationReentrancy ) { VARIANT t_Variant ; VariantInit ( & t_Variant ) ; LONG t_VarType = 0 ; LONG t_Flavour = 0 ;
HRESULT t_TempResult = a_Object->Get ( s_Strings_Wmi_InitializationReentrancy , 0 , & t_Variant , & t_VarType , & t_Flavour ) ; if ( SUCCEEDED ( t_TempResult ) ) { if ( t_Variant.vt == VT_I4 ) { switch ( t_Variant.lVal ) { case 0: { m_InitializationReentrancy = e_InitializationReentrancy_Clsid ; } break ;
case 1: { m_InitializationReentrancy = e_InitializationReentrancy_Namespace ; } break ;
case 2: { m_InitializationReentrancy = e_InitializationReentrancy_None ; } break ;
default: { t_Result = WBEM_E_INVALID_PROVIDER_REGISTRATION ; } break ; } } else if ( t_Variant.vt == VT_NULL ) { m_InitializationReentrancy = e_InitializationReentrancy_Namespace; } else { t_Result = WBEM_E_INVALID_PROVIDER_REGISTRATION ; } } else if (t_TempResult != WBEM_E_NOT_FOUND) { t_Result = t_TempResult; }
VariantClear ( & t_Variant ) ; } }
if ( SUCCEEDED ( t_Result ) ) { if ( a_Mask & e_InitializeAsAdminFirst ) { VARIANT t_Variant ; VariantInit ( & t_Variant ) ; LONG t_VarType = 0 ; LONG t_Flavour = 0 ;
HRESULT t_TempResult = a_Object->Get ( s_Strings_Wmi_InitializeAsAdminFirst , 0 , & t_Variant , & t_VarType , & t_Flavour ) ; if ( SUCCEEDED ( t_TempResult ) ) { if ( t_Variant.vt == VT_BOOL ) { m_InitializeAsAdminFirst = ( t_Variant.boolVal == VARIANT_TRUE ) ? TRUE : FALSE ; } else if ( t_Variant.vt == VT_NULL ) { m_InitializeAsAdminFirst = FALSE ; } else { t_Result = WBEM_E_INVALID_PROVIDER_REGISTRATION ; } } else if (t_TempResult != WBEM_E_NOT_FOUND) { t_Result = t_TempResult; }
VariantClear ( & t_Variant ) ; } }
if ( SUCCEEDED ( t_Result ) ) { if ( a_Mask & e_PerUserInitialization ) { VARIANT t_Variant ; VariantInit ( & t_Variant ) ; LONG t_VarType = 0 ; LONG t_Flavour = 0 ;
HRESULT t_TempResult = a_Object->Get ( s_Strings_Wmi_PerUserInitialization , 0 , & t_Variant , & t_VarType , & t_Flavour ) ; if ( SUCCEEDED ( t_TempResult ) ) { if ( t_Variant.vt == VT_BOOL ) { m_PerUserInitialization = ( t_Variant.boolVal == VARIANT_TRUE ) ? TRUE : FALSE ; } else if ( t_Variant.vt == VT_NULL ) { m_PerUserInitialization = FALSE ; } else { t_Result = WBEM_E_INVALID_PROVIDER_REGISTRATION ; } } else if (t_TempResult != WBEM_E_NOT_FOUND) { t_Result = t_TempResult; }
VariantClear ( & t_Variant ) ; } }
if ( SUCCEEDED ( t_Result ) ) { if ( a_Mask & e_PerLocaleInitialization ) { VARIANT t_Variant ; VariantInit ( & t_Variant ) ; LONG t_VarType = 0 ; LONG t_Flavour = 0 ;
HRESULT t_TempResult = a_Object->Get ( s_Strings_Wmi_PerLocaleInitialization , 0 , & t_Variant , & t_VarType , & t_Flavour ) ; if ( SUCCEEDED ( t_TempResult ) ) { if ( t_Variant.vt == VT_BOOL ) { m_PerLocaleInitialization = ( t_Variant.boolVal == VARIANT_TRUE ) ? TRUE : FALSE ; } else if ( t_Variant.vt == VT_NULL ) { m_PerLocaleInitialization = FALSE ; } else { t_Result = WBEM_E_INVALID_PROVIDER_REGISTRATION ; } } else if (t_TempResult != WBEM_E_NOT_FOUND) { t_Result = t_TempResult; }
VariantClear ( & t_Variant ) ; } }
if ( SUCCEEDED ( t_Result ) ) { if ( a_Mask & e_Pure ) { VARIANT t_Variant ; VariantInit ( & t_Variant ) ; LONG t_VarType = 0 ; LONG t_Flavour = 0 ;
HRESULT t_TempResult = a_Object->Get ( s_Strings_Wmi_Pure , 0 , & t_Variant , & t_VarType , & t_Flavour ) ; if ( SUCCEEDED ( t_TempResult ) ) { if ( t_Variant.vt == VT_BOOL ) { m_Pure = ( t_Variant.boolVal == VARIANT_TRUE ) ? TRUE : FALSE ; } else if ( t_Variant.vt == VT_NULL ) { m_Pure = TRUE ; } else { t_Result = WBEM_E_INVALID_PROVIDER_REGISTRATION ; } } else if (t_TempResult != WBEM_E_NOT_FOUND) { t_Result = t_TempResult; }
VariantClear ( & t_Variant ) ; } }
if ( SUCCEEDED ( t_Result ) ) { if ( a_Mask & e_Hosting ) { VARIANT t_Variant ; VariantInit ( & t_Variant ) ; LONG t_VarType = 0 ; LONG t_Flavour = 0 ;
HRESULT t_TempResult = a_Object->Get ( s_Strings_Wmi_Hosting , 0 , & t_Variant , & t_VarType , & t_Flavour ) ; if ( SUCCEEDED ( t_TempResult ) ) { if ( t_Variant.vt == VT_BSTR ) { t_Result = GetHosting ( t_Variant.bstrVal , m_Hosting , m_HostingGroup , m_DecoupledImpersonationRestriction ) ; if ( SUCCEEDED ( t_Result ) ) { #ifdef UNIQUE_HOST
if ( m_HostingGroup ) { SysFreeString ( m_HostingGroup ) ; }
m_HostingGroup = SysAllocString ( GetProviderName () ) ; if ( m_HostingGroup == NULL ) { t_Result = WBEM_E_OUT_OF_MEMORY ; } #else
#endif
} else { t_Result = WBEM_E_INVALID_PROVIDER_REGISTRATION ; } } else if ( t_Variant.vt == VT_NULL ) { m_Hosting = e_Hosting_SharedLocalSystemHostOrSelfHost ;
#ifdef UNIQUE_HOST
m_HostingGroup = SysAllocString ( GetProviderName () ) ; #else
m_HostingGroup = SysAllocString ( s_Strings_Wmi_DefaultSharedLocalSystemHostOrSelfHost ) ; #endif
if ( m_HostingGroup == NULL ) { t_Result = WBEM_E_OUT_OF_MEMORY ; } } else { t_Result = WBEM_E_INVALID_PROVIDER_REGISTRATION ; } } else if (t_TempResult != WBEM_E_NOT_FOUND) { t_Result = t_TempResult; }
VariantClear ( & t_Variant ) ; } }
if ( SUCCEEDED ( t_Result ) ) { switch ( GetHosting () ) { case e_Hosting_NonCom: case e_Hosting_Decoupled: { } break ;
default: { if ( GetClsidServer ().GetProviderClsid () == NULL ) { t_Result = WBEM_E_INVALID_PROVIDER_REGISTRATION ; } } break ; } }
if ( SUCCEEDED ( t_Result ) ) { if ( a_Mask & e_SecurityDescriptor ) { VARIANT t_Variant ; VariantInit ( & t_Variant ) ; LONG t_VarType = 0 ; LONG t_Flavour = 0 ;
HRESULT t_TempResult = a_Object->Get ( s_Strings_Wmi_SecurityDescriptor , 0 , & t_Variant , & t_VarType , & t_Flavour ) ; if ( SUCCEEDED ( t_TempResult ) ) { if ( t_Variant.vt == VT_BSTR ) { BOOL t_Status = SDDL::ConvertStringSecurityDescriptorToSecurityDescriptor (
t_Variant.bstrVal , SDDL_REVISION_1 , ( PSECURITY_DESCRIPTOR * ) & m_SecurityDescriptor, NULL ) ;
if ( t_Status ) { } else { t_Result = WBEM_E_INVALID_PROVIDER_REGISTRATION ; } } else if ( t_Variant.vt == VT_NULL ) { m_SecurityDescriptor = NULL ; } else { t_Result = WBEM_E_INVALID_PROVIDER_REGISTRATION ; } } else if (t_TempResult != WBEM_E_NOT_FOUND) { t_Result = t_TempResult; }
VariantClear ( & t_Variant ) ; } }
return t_Result ; }
/******************************************************************************
* * Name: * * * Description: * * *****************************************************************************/
HRESULT CServerObject_ComProviderRegistrationV1 :: QueryRepository (
Enum_PropertyMask a_Mask , IWbemPath *a_Scope, LPCWSTR a_ProviderName ) { BSTR t_ObjectPath = NULL ;
HRESULT t_Result = WmiHelper :: ConcatenateStrings (
3 , & t_ObjectPath , L"__Win32Provider.Name=\"" , a_ProviderName , L"\"" ) ;
if ( SUCCEEDED ( t_Result ) ) { if ( m_Identity ) { m_Identity->Release () ; }
t_Result = m_Repository->GetObject (
t_ObjectPath , 0 , m_Context , & m_Identity , NULL ) ; if ( SUCCEEDED ( t_Result ) ) { t_Result = QueryProperties (
a_Mask , m_Identity , a_ProviderName ) ; }
SysFreeString ( t_ObjectPath ) ; }
return t_Result ; }
/******************************************************************************
* * Name: * * * Description: * * *****************************************************************************/
HRESULT CServerObject_ComProviderRegistrationV1 :: QueryRepository (
Enum_PropertyMask a_Mask , IWbemPath *a_Scope, IWbemPath *a_Provider ) { BSTR t_ObjectPath = NULL ; ULONG t_ObjectPathLength = 0 ;
HRESULT t_Result = a_Provider->GetText (
WBEMPATH_GET_RELATIVE_ONLY , & t_ObjectPathLength , NULL ) ;
if ( SUCCEEDED ( t_Result ) ) { t_ObjectPath = SysAllocStringLen ( NULL , t_ObjectPathLength ) ; if ( t_ObjectPath ) { t_Result = a_Provider->GetText (
WBEMPATH_GET_RELATIVE_ONLY , & t_ObjectPathLength , t_ObjectPath ) ;
if ( SUCCEEDED ( t_Result ) ) { if ( m_Identity ) { m_Identity->Release () ; }
t_Result = m_Repository->GetObject (
t_ObjectPath , 0 , m_Context , & m_Identity , NULL ) ; if ( SUCCEEDED ( t_Result ) ) { VARIANT t_Variant ; VariantInit ( & t_Variant ) ; LONG t_VarType = 0 ; LONG t_Flavour = 0 ;
t_Result = m_Identity->Get ( L"Name" , 0 , & t_Variant , & t_VarType , & t_Flavour ) ; if ( SUCCEEDED ( t_Result ) ) { if ( t_Variant.vt == VT_BSTR ) { t_Result = QueryProperties (
a_Mask , m_Identity , t_Variant.bstrVal ) ; }
VariantClear ( & t_Variant ) ; } }
}
SysFreeString ( t_ObjectPath ) ; } else { t_Result = WBEM_E_OUT_OF_MEMORY ; } }
return t_Result ; }
/******************************************************************************
* * Name: * * * Description: * * *****************************************************************************/
HRESULT CServerObject_ComProviderRegistrationV1 :: Load (
Enum_PropertyMask a_Mask , IWbemPath *a_Scope, IWbemClassObject *a_Class ) { HRESULT t_Result = S_OK ;
IWbemQualifierSet *t_QualifierObject = NULL ; t_Result = a_Class->GetQualifierSet ( & t_QualifierObject ) ; if ( SUCCEEDED ( t_Result ) ) { VARIANT t_Variant ; VariantInit ( & t_Variant ) ;
LONG t_Flavour = 0 ;
t_Result = t_QualifierObject->Get ( ProviderSubSystem_Common_Globals :: s_Provider , 0 , & t_Variant , & t_Flavour ) ;
if ( SUCCEEDED ( t_Result ) ) { if ( t_Variant.vt == VT_BSTR ) { t_Result = QueryRepository (
a_Mask , a_Scope , t_Variant.bstrVal ) ;
if ( SUCCEEDED ( t_Result ) ) { } } }
VariantClear ( & t_Variant ) ;
t_QualifierObject->Release () ; }
return t_Result ; }
/******************************************************************************
* * Name: * * * Description: * * *****************************************************************************/
HRESULT CServerObject_ComProviderRegistrationV1 :: Load (
Enum_PropertyMask a_Mask , IWbemPath *a_Scope, LPCWSTR a_Provider ) { HRESULT t_Result = S_OK ;
t_Result = QueryRepository (
a_Mask , a_Scope , a_Provider ) ;
return t_Result ; }
/******************************************************************************
* * Name: * * * Description: * * *****************************************************************************/
HRESULT CServerObject_ComProviderRegistrationV1 :: Load (
Enum_PropertyMask a_Mask , IWbemPath *a_Scope, IWbemPath *a_Provider ) { HRESULT t_Result = S_OK ;
t_Result = QueryRepository (
a_Mask , a_Scope , a_Provider ) ;
return t_Result ; }
/******************************************************************************
* * Name: * * * Description: * * *****************************************************************************/
CServerObject_InstanceProviderRegistrationV1 :: CServerObject_InstanceProviderRegistrationV1 () :
m_Context ( NULL ) , m_Namespace ( NULL ) , m_Repository ( NULL ) , m_SupportsPut ( FALSE ) , m_SupportsGet ( FALSE ) , m_SupportsDelete ( FALSE ) , m_SupportsEnumeration ( FALSE ) , m_SupportsBatching ( FALSE ) , m_SupportsTransactions ( FALSE ) , m_Supported ( FALSE ) , m_QuerySupportLevels ( e_QuerySupportLevels_Unknown ) , m_InteractionType ( e_InteractionType_Unknown ) , m_Result ( S_OK ) { }
/******************************************************************************
* * Name: * * * Description: * * *****************************************************************************/
CServerObject_InstanceProviderRegistrationV1::~CServerObject_InstanceProviderRegistrationV1 () { if ( m_Context ) { m_Context->Release () ; }
if ( m_Namespace ) { m_Namespace->Release () ; }
if ( m_Repository ) { m_Repository->Release () ; } }
/******************************************************************************
* * Name: * * * Description: * * *****************************************************************************/
ULONG CServerObject_InstanceProviderRegistrationV1 :: AddRef () { return InterlockedIncrement ( & m_ReferenceCount ) ; }
/******************************************************************************
* * Name: * * * Description: * * *****************************************************************************/
ULONG CServerObject_InstanceProviderRegistrationV1 :: Release () { ULONG t_ReferenceCount = InterlockedDecrement ( & m_ReferenceCount ) ; if ( t_ReferenceCount == 0 ) { delete this ; }
return t_ReferenceCount ; }
/******************************************************************************
* * Name: * * * Description: * * *****************************************************************************/
HRESULT CServerObject_InstanceProviderRegistrationV1 :: SetContext (
IWbemContext *a_Context , IWbemPath *a_Namespace , IWbemServices *a_Repository ) { HRESULT t_Result = S_OK ;
m_Context = a_Context ; m_Namespace = a_Namespace ; m_Repository = a_Repository ;
if ( m_Context ) { m_Context->AddRef () ; }
if ( m_Namespace ) { m_Namespace->AddRef () ; }
if ( m_Repository ) { m_Repository->AddRef () ; }
return t_Result ; }
/******************************************************************************
* * Name: * * * Description: * * *****************************************************************************/
HRESULT CServerObject_InstanceProviderRegistrationV1 :: QueryProperties (
Enum_PropertyMask a_Mask , IWbemClassObject *a_Object ) { HRESULT t_Result = S_OK ;
m_Supported = TRUE ;
if ( a_Mask & e_SupportsPut ) { VARIANT t_Variant ; VariantInit ( & t_Variant ) ; LONG t_VarType = 0 ; LONG t_Flavour = 0 ;
HRESULT t_TempResult = a_Object->Get ( s_Strings_SupportsPut , 0 , & t_Variant , & t_VarType , & t_Flavour ) ; if ( SUCCEEDED ( t_TempResult ) ) { if ( t_Variant.vt == VT_BOOL ) { m_SupportsPut = ( t_Variant.boolVal == VARIANT_TRUE ) ? TRUE : FALSE ; } else if ( t_Variant.vt == VT_NULL ) { m_SupportsPut = FALSE ; } else { t_Result = WBEM_E_INVALID_PROVIDER_REGISTRATION ; } } else if (t_TempResult != WBEM_E_NOT_FOUND) { t_Result = t_TempResult; }
VariantClear ( & t_Variant ) ; }
if ( SUCCEEDED(t_Result) && (a_Mask & e_SupportsGet) ) { VARIANT t_Variant ; VariantInit ( & t_Variant ) ; LONG t_VarType = 0 ; LONG t_Flavour = 0 ;
HRESULT t_TempResult = a_Object->Get ( s_Strings_SupportsGet , 0 , & t_Variant , & t_VarType , & t_Flavour ) ; if ( SUCCEEDED ( t_TempResult ) ) { if ( t_Variant.vt == VT_BOOL ) { m_SupportsGet = ( t_Variant.boolVal == VARIANT_TRUE ) ? TRUE : FALSE ; } else if ( t_Variant.vt == VT_NULL ) { m_SupportsGet = FALSE ; } else { t_Result = WBEM_E_INVALID_PROVIDER_REGISTRATION ; } } else if (t_TempResult != WBEM_E_NOT_FOUND) { t_Result = t_TempResult; }
VariantClear ( & t_Variant ) ; }
if ( SUCCEEDED(t_Result) && (a_Mask & e_SupportsDelete) ) { VARIANT t_Variant ; VariantInit ( & t_Variant ) ; LONG t_VarType = 0 ; LONG t_Flavour = 0 ;
HRESULT t_TempResult = a_Object->Get ( s_Strings_SupportsDelete , 0 , & t_Variant , & t_VarType , & t_Flavour ) ; if ( SUCCEEDED ( t_TempResult ) ) { if ( t_Variant.vt == VT_BOOL ) { m_SupportsDelete = ( t_Variant.boolVal == VARIANT_TRUE ) ? TRUE : FALSE ; } else if ( t_Variant.vt == VT_NULL ) { m_SupportsDelete = FALSE ; } else { t_Result = WBEM_E_INVALID_PROVIDER_REGISTRATION ; } } else if (t_TempResult != WBEM_E_NOT_FOUND) { t_Result = t_TempResult; }
VariantClear ( & t_Variant ) ; }
if ( SUCCEEDED(t_Result) && (a_Mask & e_SupportsEnumeration) ) { VARIANT t_Variant ; VariantInit ( & t_Variant ) ; LONG t_VarType = 0 ; LONG t_Flavour = 0 ;
HRESULT t_TempResult = a_Object->Get ( s_Strings_SupportsEnumeration , 0 , & t_Variant , & t_VarType , & t_Flavour ) ; if ( SUCCEEDED ( t_TempResult ) ) { if ( t_Variant.vt == VT_BOOL ) { m_SupportsEnumeration = ( t_Variant.boolVal == VARIANT_TRUE ) ? TRUE : FALSE ; } else if ( t_Variant.vt == VT_NULL ) { m_SupportsEnumeration = FALSE ; } else { t_Result = WBEM_E_INVALID_PROVIDER_REGISTRATION ; } } else if (t_TempResult != WBEM_E_NOT_FOUND) { t_Result = t_TempResult; }
VariantClear ( & t_Variant ) ; }
if ( SUCCEEDED(t_Result) && (a_Mask & e_SupportsBatching) ) { VARIANT t_Variant ; VariantInit ( & t_Variant ) ; LONG t_VarType = 0 ; LONG t_Flavour = 0 ;
HRESULT t_TempResult = a_Object->Get ( s_Strings_SupportsBatching , 0 , & t_Variant , & t_VarType , & t_Flavour ) ; if ( SUCCEEDED ( t_TempResult ) ) { if ( t_Variant.vt == VT_BOOL ) { m_SupportsBatching = ( t_Variant.boolVal == VARIANT_TRUE ) ? TRUE : FALSE ; } else if ( t_Variant.vt == VT_NULL ) { m_SupportsBatching = FALSE ; } else { t_Result = WBEM_E_INVALID_PROVIDER_REGISTRATION ; } } else if (t_TempResult != WBEM_E_NOT_FOUND) { t_Result = t_TempResult; }
VariantClear ( & t_Variant ) ; }
if ( SUCCEEDED(t_Result) && (a_Mask & e_SupportsTransactions) ) { VARIANT t_Variant ; VariantInit ( & t_Variant ) ; LONG t_VarType = 0 ; LONG t_Flavour = 0 ;
HRESULT t_TempResult = a_Object->Get ( s_Strings_SupportsTransactions , 0 , & t_Variant , & t_VarType , & t_Flavour ) ; if ( SUCCEEDED ( t_TempResult ) ) { if ( t_Variant.vt == VT_BOOL ) { m_SupportsTransactions = ( t_Variant.boolVal == VARIANT_TRUE ) ? TRUE : FALSE ; } else if ( t_Variant.vt == VT_NULL ) { m_SupportsTransactions = FALSE ; } else { t_Result = WBEM_E_INVALID_PROVIDER_REGISTRATION ; } } else if (t_TempResult != WBEM_E_NOT_FOUND) { t_Result = t_TempResult; }
VariantClear ( & t_Variant ) ; }
if (SUCCEEDED(t_Result) && ( a_Mask & e_QuerySupportLevels ) ) { VARIANT t_Variant ; VariantInit ( & t_Variant ) ; LONG t_VarType = 0 ; LONG t_Flavour = 0 ;
HRESULT t_TempResult = a_Object->Get ( s_Strings_QuerySupportLevels , 0 , & t_Variant , & t_VarType , & t_Flavour ) ; if ( SUCCEEDED ( t_TempResult ) ) { if ( t_Variant.vt == ( VT_BSTR | VT_ARRAY ) ) { if ( SafeArrayGetDim ( t_Variant.parray ) == 1 ) { LONG t_Dimension = 1 ;
LONG t_Lower ; SafeArrayGetLBound ( t_Variant.parray , t_Dimension , & t_Lower ) ;
LONG t_Upper ; SafeArrayGetUBound ( t_Variant.parray , t_Dimension , & t_Upper ) ;
LONG t_Count = ( t_Upper - t_Lower ) + 1 ;
if ( t_Count ) { for ( LONG t_ElementIndex = t_Lower ; t_ElementIndex <= t_Upper ; t_ElementIndex ++ ) { BSTR t_Element ; if ( SUCCEEDED ( SafeArrayGetElement ( t_Variant.parray , &t_ElementIndex , & t_Element ) ) ) { if ( wbem_wcsicmp ( s_Strings_QuerySupportLevels_UnarySelect , t_Element ) == 0 ) { m_QuerySupportLevels = m_QuerySupportLevels | e_QuerySupportLevels_UnarySelect ; } else if ( wbem_wcsicmp ( s_Strings_QuerySupportLevels_References , t_Element ) == 0 ) { m_QuerySupportLevels = m_QuerySupportLevels | e_QuerySupportLevels_References ; } else if ( wbem_wcsicmp ( s_Strings_QuerySupportLevels_Associators , t_Element ) == 0 ) { m_QuerySupportLevels = m_QuerySupportLevels | e_QuerySupportLevels_Associators ; } else if ( wbem_wcsicmp ( s_Strings_QuerySupportLevels_V1ProviderDefined , t_Element ) == 0 ) { m_QuerySupportLevels = m_QuerySupportLevels | e_QuerySupportLevels_V1ProviderDefined ; } else { t_Result = WBEM_E_INVALID_PROVIDER_REGISTRATION ; }
SysFreeString ( t_Element ) ; } } } else { t_Result = WBEM_E_INVALID_PROVIDER_REGISTRATION ; } } } else if ( t_Variant.vt == VT_NULL ) { m_QuerySupportLevels = e_QuerySupportLevels_None ; } else { t_Result = WBEM_E_INVALID_PROVIDER_REGISTRATION ; } } else if (t_TempResult != WBEM_E_NOT_FOUND) { t_Result = t_TempResult; }
VariantClear ( & t_Variant ) ; }
if (SUCCEEDED(t_Result) && ( a_Mask & e_InteractionType) ) { VARIANT t_Variant ; VariantInit ( & t_Variant ) ; LONG t_VarType = 0 ; LONG t_Flavour = 0 ;
HRESULT t_TempResult = a_Object->Get ( s_Strings_InteractionType , 0 , & t_Variant , & t_VarType , & t_Flavour ) ; if ( SUCCEEDED ( t_TempResult ) ) { if ( t_Variant.vt == VT_I4 ) { switch ( t_Variant.lVal ) { case 0: { m_InteractionType = e_InteractionType_Pull ; } break ;
case 1: { m_InteractionType = e_InteractionType_Push ; } break ;
case 2: { m_InteractionType = e_InteractionType_PushVerify ; } break ;
default: { t_Result = WBEM_E_INVALID_PROVIDER_REGISTRATION ; } break ; } } else if ( t_Variant.vt == VT_NULL ) { m_InteractionType = e_InteractionType_Pull ; } else { t_Result = WBEM_E_INVALID_PROVIDER_REGISTRATION ; } } else if (t_TempResult != WBEM_E_NOT_FOUND) { t_Result = t_TempResult; }
VariantClear ( & t_Variant ) ; }
return t_Result ; }
/******************************************************************************
* * Name: * * * Description: * * *****************************************************************************/
HRESULT CServerObject_InstanceProviderRegistrationV1 :: QueryRepositoryUsingQuery (
Enum_PropertyMask a_Mask , IWbemPath *a_Scope, BSTR a_Query ) { HRESULT t_Result = S_OK ;
IEnumWbemClassObject *t_ClassObjectEnum = NULL ;
BSTR t_Language = SysAllocString ( ProviderSubSystem_Common_Globals :: s_Wql ) ; if ( t_Language ) { t_Result = m_Repository->ExecQuery ( t_Language , a_Query , WBEM_FLAG_FORWARD_ONLY , m_Context , & t_ClassObjectEnum ) ;
if ( SUCCEEDED ( t_Result ) ) { IWbemClassObject *t_ClassObject = NULL ; ULONG t_ObjectCount = 0 ;
t_ClassObjectEnum->Reset () ; while ( SUCCEEDED ( t_Result ) && ( t_ClassObjectEnum->Next ( WBEM_INFINITE , 1 , & t_ClassObject , &t_ObjectCount ) == WBEM_NO_ERROR ) ) { VARIANT t_Variant ; VariantInit ( & t_Variant ) ; LONG t_VarType = 0 ; LONG t_Flavour = 0 ;
t_Result = t_ClassObject->Get ( s_Strings_Class , 0 , & t_Variant , & t_VarType , & t_Flavour ) ; if ( SUCCEEDED ( t_Result ) ) { if ( t_Variant.vt == VT_BSTR ) { if ( wbem_wcsicmp ( s_Strings_InstanceProviderRegistration , t_Variant.bstrVal ) == 0 ) { t_Result = QueryProperties (
a_Mask , t_ClassObject ) ; } } }
VariantClear ( & t_Variant ) ;
t_ClassObject->Release () ; }
t_ClassObjectEnum->Release () ; } else { t_Result = WBEM_E_INVALID_PROVIDER_REGISTRATION ; }
SysFreeString ( t_Language ) ; } else { t_Result = WBEM_E_OUT_OF_MEMORY ; }
return t_Result ; }
/******************************************************************************
* * Name: * * * Description: * * *****************************************************************************/
HRESULT CServerObject_InstanceProviderRegistrationV1 :: QueryRepository (
Enum_PropertyMask a_Mask , IWbemPath *a_Scope, LPCWSTR a_ProviderName ) { BSTR t_Query = NULL ;
HRESULT t_Result = WmiHelper :: ConcatenateStrings (
3 , & t_Query , L"references of {__Win32Provider.Name=\"" , a_ProviderName , L"\"}" ) ;
if ( SUCCEEDED ( t_Result ) ) { t_Result = QueryRepositoryUsingQuery (
a_Mask , a_Scope, t_Query ) ;
SysFreeString ( t_Query ) ; }
return t_Result ; }
/******************************************************************************
* * Name: * * * Description: * * *****************************************************************************/
HRESULT CServerObject_InstanceProviderRegistrationV1 :: QueryRepository (
Enum_PropertyMask a_Mask , IWbemPath *a_Scope, IWbemPath *a_Provider ) { BSTR t_ObjectPath = NULL ; ULONG t_ObjectPathLength = 0 ;
HRESULT t_Result = a_Provider->GetText (
WBEMPATH_GET_RELATIVE_ONLY , & t_ObjectPathLength , NULL ) ;
if ( SUCCEEDED ( t_Result ) ) { t_ObjectPath = SysAllocStringLen ( NULL , t_ObjectPathLength ) ; if ( t_ObjectPath ) { t_Result = a_Provider->GetText (
WBEMPATH_GET_RELATIVE_ONLY , & t_ObjectPathLength , t_ObjectPath ) ;
if ( SUCCEEDED ( t_Result ) ) { BSTR t_Query = NULL ;
t_Result = WmiHelper :: ConcatenateStrings (
3 , & t_Query , L"references of {" , t_ObjectPath , L"}" ) ;
if ( SUCCEEDED ( t_Result ) ) { t_Result = QueryRepositoryUsingQuery (
a_Mask , a_Scope, t_Query ) ;
SysFreeString ( t_Query ) ; } }
SysFreeString ( t_ObjectPath ) ; } else { t_Result = WBEM_E_OUT_OF_MEMORY; }
}
return t_Result ; }
/******************************************************************************
* * Name: * * * Description: * * *****************************************************************************/
HRESULT CServerObject_InstanceProviderRegistrationV1 :: Load (
Enum_PropertyMask a_Mask , IWbemPath *a_Scope, IWbemClassObject *a_Class ) { HRESULT t_Result = S_OK ;
IWbemQualifierSet *t_QualifierObject = NULL ; t_Result = a_Class->GetQualifierSet ( & t_QualifierObject ) ; if ( SUCCEEDED ( t_Result ) ) { VARIANT t_Variant ; VariantInit ( & t_Variant ) ;
LONG t_Flavour = 0 ;
t_Result = t_QualifierObject->Get ( ProviderSubSystem_Common_Globals :: s_Provider , 0 , & t_Variant , & t_Flavour ) ;
if ( SUCCEEDED ( t_Result ) ) { if ( t_Variant.vt == VT_BSTR ) { t_Result = QueryRepository (
a_Mask , a_Scope , t_Variant.bstrVal ) ;
VariantClear ( & t_Variant ) ; } }
t_QualifierObject->Release () ; }
return t_Result ; }
/******************************************************************************
* * Name: * * * Description: * * *****************************************************************************/
HRESULT CServerObject_InstanceProviderRegistrationV1 :: Load (
Enum_PropertyMask a_Mask , IWbemPath *a_Scope, LPCWSTR a_Provider ) { HRESULT t_Result = S_OK ;
t_Result = QueryRepository (
a_Mask , a_Scope , a_Provider ) ;
return t_Result ; }
/******************************************************************************
* * Name: * * * Description: * * *****************************************************************************/
HRESULT CServerObject_InstanceProviderRegistrationV1 :: Load (
Enum_PropertyMask a_Mask , IWbemPath *a_Scope, IWbemPath *a_Provider ) { HRESULT t_Result = S_OK ;
t_Result = QueryRepository (
a_Mask , a_Scope , a_Provider ) ;
return t_Result ; }
/******************************************************************************
* * Name: * * * Description: * * *****************************************************************************/
CServerObject_ClassProviderRegistrationV1 :: CServerObject_ClassProviderRegistrationV1 () :
m_Context ( NULL ) , m_Namespace ( NULL ) , m_Repository ( NULL ) , m_SupportsPut ( FALSE ) , m_SupportsGet ( FALSE ) , m_SupportsDelete ( FALSE ) , m_SupportsEnumeration ( FALSE ) , m_SupportsBatching ( FALSE ) , m_SupportsTransactions ( FALSE ) , m_Supported ( FALSE ) , m_ReSynchroniseOnNamespaceOpen ( FALSE ) , m_PerUserSchema ( FALSE ) , m_HasReferencedSet( FALSE ), m_CacheRefreshInterval ( NULL ) , m_CacheRefreshIntervalMilliSeconds ( 0 ) , m_QuerySupportLevels ( e_QuerySupportLevels_Unknown ) , m_InteractionType ( e_InteractionType_Unknown ) , m_ResultSetQueryTreeCount ( 0 ) , m_UnSupportedQueryTreeCount ( 0 ) , m_ReferencedSetQueryTreeCount ( 0 ) , m_ResultSetQueryTree ( NULL ) , m_UnSupportedQueryTree ( NULL ) , m_ReferencedSetQueryTree ( NULL ) , m_ProviderName ( NULL ) , m_Version ( 1 ) , m_Result ( S_OK ) { }
/******************************************************************************
* * Name: * * * Description: * * *****************************************************************************/
CServerObject_ClassProviderRegistrationV1::~CServerObject_ClassProviderRegistrationV1 () { if ( m_ResultSetQueryTree ) { for ( ULONG t_Index = 0 ; t_Index < m_ResultSetQueryTreeCount ; t_Index ++ ) { if ( m_ResultSetQueryTree [ t_Index ] ) { delete m_ResultSetQueryTree [ t_Index ] ; } }
delete [] m_ResultSetQueryTree ; }
if ( m_UnSupportedQueryTree ) { for ( ULONG t_Index = 0 ; t_Index < m_UnSupportedQueryTreeCount ; t_Index ++ ) { if ( m_UnSupportedQueryTree [ t_Index ] ) { delete m_UnSupportedQueryTree [ t_Index ] ; } }
delete [] m_UnSupportedQueryTree ; }
if ( m_ReferencedSetQueryTree ) { for ( ULONG t_Index = 0 ; t_Index < m_ReferencedSetQueryTreeCount ; t_Index ++ ) { if ( m_ReferencedSetQueryTree [ t_Index ] ) { delete m_ReferencedSetQueryTree [ t_Index ] ; } }
delete [] m_ReferencedSetQueryTree ; }
if ( m_Context ) { m_Context->Release () ; }
if ( m_Namespace ) { m_Namespace->Release () ; }
if ( m_Repository ) { m_Repository->Release () ; }
if ( m_ProviderName ) { delete [] m_ProviderName ; }
if ( m_CacheRefreshInterval ) { SysFreeString ( m_CacheRefreshInterval ) ; } }
/******************************************************************************
* * Name: * * * Description: * * *****************************************************************************/
ULONG CServerObject_ClassProviderRegistrationV1 :: AddRef () { return InterlockedIncrement ( & m_ReferenceCount ) ; }
/******************************************************************************
* * Name: * * * Description: * * *****************************************************************************/
ULONG CServerObject_ClassProviderRegistrationV1 :: Release () { ULONG t_ReferenceCount = InterlockedDecrement ( & m_ReferenceCount ) ; if ( t_ReferenceCount == 0 ) { delete this ; }
return t_ReferenceCount ; }
/******************************************************************************
* * Name: * * * Description: * * *****************************************************************************/
HRESULT CServerObject_ClassProviderRegistrationV1 :: SetContext (
IWbemContext *a_Context , IWbemPath *a_Namespace , IWbemServices *a_Repository ) { HRESULT t_Result = S_OK ;
m_Context = a_Context ; m_Namespace = a_Namespace ; m_Repository = a_Repository ;
if ( m_Context ) { m_Context->AddRef () ; }
if ( m_Namespace ) { m_Namespace->AddRef () ; }
if ( m_Repository ) { m_Repository->AddRef () ; }
return t_Result ; }
/******************************************************************************
* * Name: * * * Description: * * *****************************************************************************/
HRESULT CServerObject_ClassProviderRegistrationV1 :: ParseQuery (
ULONG &a_Count , WmiTreeNode **&a_Root , SAFEARRAY *a_Array )
{ HRESULT t_Result = S_OK ;
if ( SafeArrayGetDim ( a_Array ) == 1 ) { LONG t_Dimension = 1 ;
LONG t_Lower ; SafeArrayGetLBound ( a_Array , t_Dimension , & t_Lower ) ;
LONG t_Upper ; SafeArrayGetUBound ( a_Array , t_Dimension , & t_Upper ) ;
LONG t_Count = ( t_Upper - t_Lower ) + 1 ;
a_Root = NULL ; a_Count = t_Count ;
if ( t_Count ) { a_Root = new WmiTreeNode * [ t_Count ] ; if ( a_Root ) { ZeroMemory ( a_Root , sizeof ( WmiTreeNode * ) * t_Count ) ;
for ( LONG t_ElementIndex = t_Lower ; SUCCEEDED ( t_Result ) && ( t_ElementIndex <= t_Upper ) ; t_ElementIndex ++ ) { BSTR t_Element ; if ( SUCCEEDED ( t_Result = SafeArrayGetElement ( a_Array , &t_ElementIndex , & t_Element ) ) ) { QueryPreprocessor t_PreProcessor ;
IWbemQuery *t_QueryAnalyser = NULL ; t_Result = CoCreateInstance (
CLSID_WbemQuery , NULL , CLSCTX_INPROC_SERVER , IID_IWbemQuery , ( void ** ) & t_QueryAnalyser ) ;
if ( SUCCEEDED ( t_Result ) ) { switch ( t_PreProcessor.Query ( t_Element , t_QueryAnalyser ) ) { case QueryPreprocessor :: State_True: { WmiTreeNode *t_Root = NULL ;
switch ( t_PreProcessor.PreProcess ( m_Context , t_QueryAnalyser , t_Root ) ) { case QueryPreprocessor :: State_True: { a_Root [ t_ElementIndex - t_Lower ] = t_Root ; } break ;
case QueryPreprocessor :: State_Error: { t_Result = WBEM_E_INVALID_PROVIDER_REGISTRATION ; } break;
default: { t_Result = WBEM_E_INVALID_PROVIDER_REGISTRATION ; } break ; } } break ;
case QueryPreprocessor :: State_Error: { t_Result = WBEM_E_INVALID_PROVIDER_REGISTRATION ; } break;
default: { t_Result = WBEM_E_INVALID_PROVIDER_REGISTRATION ; } break ;
}
t_QueryAnalyser->Release () ; }
SysFreeString ( t_Element ) ; } }
if ( FAILED ( t_Result ) ) { for ( LONG t_ElementIndex = t_Lower ; t_ElementIndex <= t_Upper ; t_ElementIndex ++ ) { delete a_Root [ t_ElementIndex - t_Lower] ; }
delete [] a_Root ; a_Root = NULL ; a_Count = 0 ;
if ( m_Version == 1 ) { t_Result = S_OK ; } } } else { t_Result = WBEM_E_OUT_OF_MEMORY ; } } } else { t_Result = WBEM_E_INVALID_PROVIDER_REGISTRATION ; }
return t_Result ; }
/******************************************************************************
* * Name: * * * Description: * * *****************************************************************************/
HRESULT CServerObject_ClassProviderRegistrationV1 :: QueryProperties (
Enum_PropertyMask a_Mask , IWbemClassObject *a_Object ) { HRESULT t_Result = S_OK ;
m_Supported = TRUE ;
if ( a_Mask & e_Version ) { VARIANT t_Variant ; VariantInit ( & t_Variant ) ; LONG t_VarType = 0 ; LONG t_Flavour = 0 ;
HRESULT t_TempResult = a_Object->Get ( s_Strings_Version , 0 , & t_Variant , & t_VarType , & t_Flavour ) ; if ( SUCCEEDED ( t_TempResult ) ) { if ( t_Variant.vt == VT_I4 ) { m_Version = t_Variant.lVal ; } else if ( t_Variant.vt == VT_NULL ) { m_Version = 1 ; } else { t_Result = WBEM_E_INVALID_PROVIDER_REGISTRATION ; } } else if (t_TempResult != WBEM_E_NOT_FOUND) { t_Result = t_TempResult; }
VariantClear ( & t_Variant ) ; }
if ( SUCCEEDED ( t_Result ) ) { if ( a_Mask & e_SupportsPut ) { VARIANT t_Variant ; VariantInit ( & t_Variant ) ; LONG t_VarType = 0 ; LONG t_Flavour = 0 ;
HRESULT t_TempResult = a_Object->Get ( s_Strings_SupportsPut , 0 , & t_Variant , & t_VarType , & t_Flavour ) ; if ( SUCCEEDED ( t_TempResult ) ) { if ( t_Variant.vt == VT_BOOL ) { m_SupportsPut = ( t_Variant.boolVal == VARIANT_TRUE ) ? TRUE : FALSE ; } else if ( t_Variant.vt == VT_NULL ) { m_SupportsPut = FALSE ; } else { t_Result = WBEM_E_INVALID_PROVIDER_REGISTRATION ; } } else if (t_TempResult != WBEM_E_NOT_FOUND) { t_Result = t_TempResult; }
VariantClear ( & t_Variant ) ; } }
if ( SUCCEEDED ( t_Result ) ) { if ( a_Mask & e_SupportsGet ) { VARIANT t_Variant ; VariantInit ( & t_Variant ) ; LONG t_VarType = 0 ; LONG t_Flavour = 0 ;
HRESULT t_TempResult = a_Object->Get ( s_Strings_SupportsGet , 0 , & t_Variant , & t_VarType , & t_Flavour ) ; if ( SUCCEEDED ( t_TempResult ) ) { if ( t_Variant.vt == VT_BOOL ) { m_SupportsGet = ( t_Variant.boolVal == VARIANT_TRUE ) ? TRUE : FALSE ; } else if ( t_Variant.vt == VT_NULL ) { m_SupportsGet = FALSE ; } else { t_Result = WBEM_E_INVALID_PROVIDER_REGISTRATION ; } } else if (t_TempResult != WBEM_E_NOT_FOUND) { t_Result = t_TempResult; }
VariantClear ( & t_Variant ) ; } }
if ( SUCCEEDED ( t_Result ) ) { if ( a_Mask & e_SupportsDelete ) { VARIANT t_Variant ; VariantInit ( & t_Variant ) ; LONG t_VarType = 0 ; LONG t_Flavour = 0 ;
HRESULT t_TempResult = a_Object->Get ( s_Strings_SupportsDelete , 0 , & t_Variant , & t_VarType , & t_Flavour ) ; if ( SUCCEEDED ( t_TempResult ) ) { if ( t_Variant.vt == VT_BOOL ) { m_SupportsDelete = ( t_Variant.boolVal == VARIANT_TRUE ) ? TRUE : FALSE ; } else if ( t_Variant.vt == VT_NULL ) { m_SupportsDelete = FALSE ; } else { t_Result = WBEM_E_INVALID_PROVIDER_REGISTRATION ; } } else if (t_TempResult != WBEM_E_NOT_FOUND) { t_Result = t_TempResult; }
VariantClear ( & t_Variant ) ; } }
if ( SUCCEEDED ( t_Result ) ) { if ( a_Mask & e_SupportsEnumeration ) { VARIANT t_Variant ; VariantInit ( & t_Variant ) ; LONG t_VarType = 0 ; LONG t_Flavour = 0 ;
HRESULT t_TempResult = a_Object->Get ( s_Strings_SupportsEnumeration , 0 , & t_Variant , & t_VarType , & t_Flavour ) ; if ( SUCCEEDED ( t_TempResult ) ) { if ( t_Variant.vt == VT_BOOL ) { m_SupportsEnumeration = ( t_Variant.boolVal == VARIANT_TRUE ) ? TRUE : FALSE ; } else if ( t_Variant.vt == VT_NULL ) { m_SupportsEnumeration = FALSE ; } else { t_Result = WBEM_E_INVALID_PROVIDER_REGISTRATION ; } } else if (t_TempResult != WBEM_E_NOT_FOUND) { t_Result = t_TempResult; }
VariantClear ( & t_Variant ) ; } }
if ( SUCCEEDED ( t_Result ) ) { if ( a_Mask & e_SupportsBatching ) { VARIANT t_Variant ; VariantInit ( & t_Variant ) ; LONG t_VarType = 0 ; LONG t_Flavour = 0 ;
HRESULT t_TempResult = a_Object->Get ( s_Strings_SupportsBatching , 0 , & t_Variant , & t_VarType , & t_Flavour ) ; if ( SUCCEEDED ( t_TempResult ) ) { if ( t_Variant.vt == VT_BOOL ) { m_SupportsBatching = ( t_Variant.boolVal == VARIANT_TRUE ) ? TRUE : FALSE ; } else if ( t_Variant.vt == VT_NULL ) { m_SupportsBatching = FALSE ; } else { t_Result = WBEM_E_INVALID_PROVIDER_REGISTRATION ; } } else if (t_TempResult != WBEM_E_NOT_FOUND) { t_Result = t_TempResult; }
VariantClear ( & t_Variant ) ; } }
if ( SUCCEEDED ( t_Result ) ) { if ( a_Mask & e_SupportsTransactions ) { VARIANT t_Variant ; VariantInit ( & t_Variant ) ; LONG t_VarType = 0 ; LONG t_Flavour = 0 ;
HRESULT t_TempResult = a_Object->Get ( s_Strings_SupportsTransactions , 0 , & t_Variant , & t_VarType , & t_Flavour ) ; if ( SUCCEEDED ( t_TempResult ) ) { if ( t_Variant.vt == VT_BOOL ) { m_SupportsTransactions = ( t_Variant.boolVal == VARIANT_TRUE ) ? TRUE : FALSE ; } else if ( t_Variant.vt == VT_NULL ) { m_SupportsTransactions = FALSE ; } else { t_Result = WBEM_E_INVALID_PROVIDER_REGISTRATION ; } } else if (t_TempResult != WBEM_E_NOT_FOUND) { t_Result = t_TempResult; }
VariantClear ( & t_Variant ) ; } }
if ( SUCCEEDED ( t_Result ) ) { if ( a_Mask & e_PerUserSchema ) { VARIANT t_Variant ; VariantInit ( & t_Variant ) ; LONG t_VarType = 0 ; LONG t_Flavour = 0 ;
HRESULT t_TempResult = a_Object->Get ( s_Strings_PerUserSchema , 0 , & t_Variant , & t_VarType , & t_Flavour ) ; if ( SUCCEEDED ( t_TempResult ) ) { if ( t_Variant.vt == VT_BOOL ) { m_PerUserSchema = ( t_Variant.boolVal == VARIANT_TRUE ) ? TRUE : FALSE ; } else if ( t_Variant.vt == VT_NULL ) { m_PerUserSchema = FALSE ; } else { t_Result = WBEM_E_INVALID_PROVIDER_REGISTRATION ; } } else if (t_TempResult != WBEM_E_NOT_FOUND) { t_Result = t_TempResult; }
VariantClear ( & t_Variant ) ; } }
if ( SUCCEEDED ( t_Result ) ) { if ( a_Mask & e_ReSynchroniseOnNamespaceOpen ) { VARIANT t_Variant ; VariantInit ( & t_Variant ) ; LONG t_VarType = 0 ; LONG t_Flavour = 0 ;
HRESULT t_TempResult = a_Object->Get ( s_Strings_ReSynchroniseOnNamespaceOpen , 0 , & t_Variant , & t_VarType , & t_Flavour ) ; if ( SUCCEEDED ( t_TempResult ) ) { if ( t_Variant.vt == VT_BOOL ) { m_ReSynchroniseOnNamespaceOpen = ( t_Variant.boolVal == VARIANT_TRUE ) ? TRUE : FALSE ; } else if ( t_Variant.vt == VT_NULL ) { m_ReSynchroniseOnNamespaceOpen = FALSE ; } else { t_Result = WBEM_E_INVALID_PROVIDER_REGISTRATION ; } } else if (t_TempResult != WBEM_E_NOT_FOUND) { t_Result = t_TempResult; }
VariantClear ( & t_Variant ) ; } }
if ( SUCCEEDED ( t_Result ) ) { if ( a_Mask & e_QuerySupportLevels ) { VARIANT t_Variant ; VariantInit ( & t_Variant ) ; LONG t_VarType = 0 ; LONG t_Flavour = 0 ;
HRESULT t_TempResult = a_Object->Get ( s_Strings_QuerySupportLevels , 0 , & t_Variant , & t_VarType , & t_Flavour ) ; if ( SUCCEEDED ( t_TempResult ) ) { if ( t_Variant.vt == ( VT_BSTR | VT_ARRAY ) ) { if ( SafeArrayGetDim ( t_Variant.parray ) == 1 ) { LONG t_Dimension = 1 ;
LONG t_Lower ; SafeArrayGetLBound ( t_Variant.parray , t_Dimension , & t_Lower ) ;
LONG t_Upper ; SafeArrayGetUBound ( t_Variant.parray , t_Dimension , & t_Upper ) ;
LONG t_Count = ( t_Upper - t_Lower ) + 1 ;
if ( t_Count ) { for ( LONG t_ElementIndex = t_Lower ; t_ElementIndex <= t_Upper ; t_ElementIndex ++ ) { BSTR t_Element ; if ( SUCCEEDED ( SafeArrayGetElement ( t_Variant.parray , &t_ElementIndex , & t_Element ) ) ) { if ( wbem_wcsicmp ( s_Strings_QuerySupportLevels_UnarySelect , t_Element ) == 0 ) { m_QuerySupportLevels = m_QuerySupportLevels | e_QuerySupportLevels_UnarySelect ; } else if ( wbem_wcsicmp ( s_Strings_QuerySupportLevels_References , t_Element ) == 0 ) { m_QuerySupportLevels = m_QuerySupportLevels | e_QuerySupportLevels_References ; } else if ( wbem_wcsicmp ( s_Strings_QuerySupportLevels_Associators , t_Element ) == 0 ) { m_QuerySupportLevels = m_QuerySupportLevels | e_QuerySupportLevels_Associators ; } else if ( wbem_wcsicmp ( s_Strings_QuerySupportLevels_V1ProviderDefined , t_Element ) == 0 ) { m_QuerySupportLevels = m_QuerySupportLevels | e_QuerySupportLevels_V1ProviderDefined ; } else { t_Result = WBEM_E_INVALID_PROVIDER_REGISTRATION ; }
SysFreeString ( t_Element ) ; } } } else { t_Result = WBEM_E_INVALID_PROVIDER_REGISTRATION ; } } else { t_Result = WBEM_E_INVALID_PROVIDER_REGISTRATION ; } } else if ( t_Variant.vt == VT_NULL ) { m_QuerySupportLevels = e_QuerySupportLevels_None ; } else { t_Result = WBEM_E_INVALID_PROVIDER_REGISTRATION ; } } else if (t_TempResult != WBEM_E_NOT_FOUND) { t_Result = t_TempResult; }
VariantClear ( & t_Variant ) ; } }
if ( SUCCEEDED ( t_Result ) ) { if ( a_Mask & e_InteractionType ) { VARIANT t_Variant ; VariantInit ( & t_Variant ) ; LONG t_VarType = 0 ; LONG t_Flavour = 0 ;
HRESULT t_TempResult = a_Object->Get ( s_Strings_InteractionType , 0 , & t_Variant , & t_VarType , & t_Flavour ) ; if ( SUCCEEDED ( t_TempResult ) ) { if ( t_Variant.vt == VT_I4 ) { switch ( t_Variant.lVal ) { case 0: { m_InteractionType = e_InteractionType_Pull ; } break ;
case 1: { m_InteractionType = e_InteractionType_Push ; } break ;
case 2: { m_InteractionType = e_InteractionType_PushVerify ; } break ;
default: { t_Result = WBEM_E_INVALID_PROVIDER_REGISTRATION ; } break ; } } else if ( t_Variant.vt == VT_NULL ) { m_InteractionType = e_InteractionType_Pull ; } else { t_Result = WBEM_E_INVALID_PROVIDER_REGISTRATION ; } }
VariantClear ( & t_Variant ) ; } }
if ( SUCCEEDED ( t_Result ) ) { if ( a_Mask & e_ResultSetQueries ) { VARIANT t_Variant ; VariantInit ( & t_Variant ) ; LONG t_VarType = 0 ; LONG t_Flavour = 0 ;
HRESULT t_TempResult = a_Object->Get ( s_Strings_ResultSetQueries , 0 , & t_Variant , & t_VarType , & t_Flavour ) ; if ( SUCCEEDED ( t_TempResult ) ) { if ( t_Variant.vt == ( VT_ARRAY | VT_BSTR ) ) { t_Result = ParseQuery ( m_ResultSetQueryTreeCount , m_ResultSetQueryTree , t_Variant.parray ) ; } else if ( t_Variant.vt == VT_NULL ) { } else { } } else if (t_TempResult != WBEM_E_NOT_FOUND) { t_Result = t_TempResult; }
VariantClear ( & t_Variant ) ; } }
if ( SUCCEEDED ( t_Result ) ) { if ( a_Mask & e_UnSupportedQueries ) { VARIANT t_Variant ; VariantInit ( & t_Variant ) ; LONG t_VarType = 0 ; LONG t_Flavour = 0 ;
HRESULT t_TempResult = a_Object->Get ( s_Strings_UnSupportedQueries , 0 , & t_Variant , & t_VarType , & t_Flavour ) ; if ( SUCCEEDED ( t_TempResult ) ) { if ( t_Variant.vt == ( VT_ARRAY | VT_BSTR ) ) { t_Result = ParseQuery ( m_UnSupportedQueryTreeCount , m_UnSupportedQueryTree , t_Variant.parray ) ; } else if ( t_Variant.vt == VT_NULL ) { } else { } } else if (t_TempResult != WBEM_E_NOT_FOUND) { t_Result = t_TempResult; }
VariantClear ( & t_Variant ) ; } }
if ( SUCCEEDED ( t_Result ) ) { if ( a_Mask & e_ReferencedSetQueries ) { VARIANT t_Variant ; VariantInit ( & t_Variant ) ; LONG t_VarType = 0 ; LONG t_Flavour = 0 ;
HRESULT t_TempResult = a_Object->Get ( s_Strings_ReferencedSetQueries , 0 , & t_Variant , & t_VarType , & t_Flavour ) ; if ( SUCCEEDED ( t_TempResult ) ) { if ( t_Variant.vt == ( VT_ARRAY | VT_BSTR ) ) { t_Result = ParseQuery ( m_ReferencedSetQueryTreeCount , m_ReferencedSetQueryTree , t_Variant.parray ) ;
// Backwards compatibility.
// W2K code, Query is not really parsed, as long as there is a
// value, m_HasReferencedSet is TRUE.
LONG t_Lower ; SafeArrayGetLBound ( t_Variant.parray , 1 , & t_Lower ) ;
LONG t_Upper ; SafeArrayGetUBound ( t_Variant.parray , 1 , & t_Upper ) ;
LONG t_Count = ( t_Upper - t_Lower ) + 1 ;
m_HasReferencedSet = ( ( t_Upper - t_Lower ) + 1 ) > 0; } else if ( t_Variant.vt == VT_NULL ) { } else { } } else if (t_TempResult != WBEM_E_NOT_FOUND) { t_Result = t_TempResult; }
VariantClear ( & t_Variant ) ; } }
if ( SUCCEEDED ( t_Result ) ) { if ( a_Mask & e_CacheRefreshInterval ) { VARIANT t_Variant ; VariantInit ( & t_Variant ) ; LONG t_VarType = 0 ; LONG t_Flavour = 0 ;
HRESULT t_TempResult = a_Object->Get ( s_Strings_CacheRefreshInterval , 0 , & t_Variant , & t_VarType , & t_Flavour ) ; if ( SUCCEEDED ( t_TempResult ) ) { if ( t_Variant.vt == VT_BSTR ) { if ( m_CacheRefreshInterval ) { SysFreeString ( m_CacheRefreshInterval ) ; }
m_CacheRefreshInterval = SysAllocString ( t_Variant.bstrVal ) ; if ( m_CacheRefreshInterval ) { CWbemDateTime t_Interval ; t_Result = t_Interval.PutValue ( m_CacheRefreshInterval ) ; if ( SUCCEEDED ( t_Result ) ) { VARIANT_BOOL t_Bool = VARIANT_FALSE ; t_Result = t_Interval.GetIsInterval ( & t_Bool ) ; if ( t_Bool == VARIANT_TRUE ) { LONG t_MicroSeconds = 0 ; LONG t_Seconds = 0 ; LONG t_Minutes = 0 ; LONG t_Hours = 0 ; LONG t_Days = 0 ;
t_Interval.GetMicroseconds ( & t_MicroSeconds ) ; t_Interval.GetSeconds ( & t_Seconds ) ; t_Interval.GetMinutes ( & t_Minutes ) ; t_Interval.GetHours ( & t_Hours ) ; t_Interval.GetDay ( & t_Days ) ;
m_CacheRefreshIntervalMilliSeconds = ( t_Days * 24 * 60 * 60 * 1000 ) + ( t_Hours * 60 * 60 * 1000 ) + ( t_Minutes * 60 * 1000 ) + ( t_Seconds * 1000 ) + ( t_MicroSeconds / 1000 ) ; } else { t_Result = WBEM_E_INVALID_PROVIDER_REGISTRATION ; } } else { t_Result = WBEM_E_INVALID_PROVIDER_REGISTRATION ; } } else { t_Result = WBEM_E_OUT_OF_MEMORY ; } } else if ( t_Variant.vt == VT_NULL ) { if ( m_CacheRefreshInterval ) { SysFreeString ( m_CacheRefreshInterval ) ; m_CacheRefreshInterval = NULL ; } } else { t_Result = WBEM_E_INVALID_PROVIDER_REGISTRATION ; } } else if (t_TempResult != WBEM_E_NOT_FOUND) { t_Result = t_TempResult; }
VariantClear ( & t_Variant ) ; } }
if ( SUCCEEDED ( t_Result ) ) { if ( ( m_InteractionType == e_InteractionType_Pull ) && ( ( m_SupportsEnumeration == FALSE ) || ( m_SupportsGet == FALSE ) ) ) { t_Result = WBEM_E_INVALID_PROVIDER_REGISTRATION ; } }
return t_Result ; }
/******************************************************************************
* * Name: * * * Description: * * *****************************************************************************/
HRESULT CServerObject_ClassProviderRegistrationV1 :: QueryRepositoryUsingQuery (
Enum_PropertyMask a_Mask , IWbemPath *a_Scope, BSTR a_Query ) { HRESULT t_Result = S_OK ;
IEnumWbemClassObject *t_ClassObjectEnum = NULL ;
BSTR t_Language = SysAllocString ( ProviderSubSystem_Common_Globals :: s_Wql ) ; if ( t_Language ) { t_Result = m_Repository->ExecQuery ( t_Language , a_Query , WBEM_FLAG_FORWARD_ONLY , m_Context , & t_ClassObjectEnum ) ;
if ( SUCCEEDED ( t_Result ) ) { IWbemClassObject *t_ClassObject = NULL ; ULONG t_ObjectCount = 0 ;
t_ClassObjectEnum->Reset () ; while ( SUCCEEDED ( t_Result ) && ( t_ClassObjectEnum->Next ( WBEM_INFINITE , 1 , & t_ClassObject , &t_ObjectCount ) == WBEM_NO_ERROR ) ) { VARIANT t_Variant ; VariantInit ( & t_Variant ) ; LONG t_VarType = 0 ; LONG t_Flavour = 0 ;
t_Result = t_ClassObject->Get ( s_Strings_Class , 0 , & t_Variant , & t_VarType , & t_Flavour ) ; if ( SUCCEEDED ( t_Result ) ) { if ( t_Variant.vt == VT_BSTR ) { if ( wbem_wcsicmp ( s_Strings_ClassProviderRegistration , t_Variant.bstrVal ) == 0 ) { t_Result = QueryProperties (
a_Mask , t_ClassObject ) ; } } }
VariantClear ( & t_Variant ) ;
t_ClassObject->Release () ; }
t_ClassObjectEnum->Release () ; } else { t_Result = WBEM_E_INVALID_PROVIDER_REGISTRATION ; }
SysFreeString ( t_Language ) ; } else { t_Result = WBEM_E_OUT_OF_MEMORY ; }
return t_Result ; }
/******************************************************************************
* * Name: * * * Description: * * *****************************************************************************/
HRESULT CServerObject_ClassProviderRegistrationV1 :: QueryRepository (
Enum_PropertyMask a_Mask , IWbemPath *a_Scope, LPCWSTR a_ProviderName ) { BSTR t_Query = NULL ;
HRESULT t_Result = WmiHelper :: ConcatenateStrings (
3 , & t_Query , L"references of {__Win32Provider.Name=\"" , a_ProviderName , L"\"}" ) ;
if ( SUCCEEDED ( t_Result ) ) { t_Result = QueryRepositoryUsingQuery (
a_Mask , a_Scope, t_Query ) ;
if ( SUCCEEDED ( t_Result ) ) { m_ProviderName = new wchar_t [ wcslen ( a_ProviderName ) + 1 ] ; if ( m_ProviderName ) { StringCchCopy ( m_ProviderName , wcslen ( a_ProviderName ) + 1, a_ProviderName ) ; } else { t_Result = WBEM_E_OUT_OF_MEMORY ; } }
SysFreeString ( t_Query ) ; }
return t_Result ; }
/******************************************************************************
* * Name: * * * Description: * * *****************************************************************************/
HRESULT CServerObject_ClassProviderRegistrationV1 :: QueryRepository (
Enum_PropertyMask a_Mask , IWbemPath *a_Scope, IWbemPath *a_Provider ) { BSTR t_ObjectPath = NULL ; ULONG t_ObjectPathLength = 0 ;
HRESULT t_Result = a_Provider->GetText (
WBEMPATH_GET_RELATIVE_ONLY , & t_ObjectPathLength , NULL ) ;
if ( SUCCEEDED ( t_Result ) ) { t_ObjectPath = SysAllocStringLen ( NULL , t_ObjectPathLength ) ; if ( t_ObjectPath ) { t_Result = a_Provider->GetText (
WBEMPATH_GET_RELATIVE_ONLY , & t_ObjectPathLength , t_ObjectPath ) ;
if ( SUCCEEDED ( t_Result ) ) { BSTR t_Query = NULL ;
t_Result = WmiHelper :: ConcatenateStrings (
3 , & t_Query , L"references of {" , t_ObjectPath , L"}" ) ;
if ( SUCCEEDED ( t_Result ) ) { t_Result = QueryRepositoryUsingQuery (
a_Mask , a_Scope, t_Query ) ;
if ( SUCCEEDED ( t_Result ) ) { IWbemPathKeyList *t_Keys = NULL ;
t_Result = a_Provider->GetKeyList (
& t_Keys ) ;
if ( SUCCEEDED ( t_Result ) ) { ULONG t_ProviderNameLength = 0 ; ULONG t_Type = 0 ;
t_Result = t_Keys->GetKey (
0 , 0 , NULL , NULL , & t_ProviderNameLength , m_ProviderName , & t_Type ) ;
if ( SUCCEEDED ( t_Result ) ) { m_ProviderName = new wchar_t [ ( t_ProviderNameLength / sizeof ( wchar_t ) ) + 1 ] ; if ( m_ProviderName ) { t_Result = t_Keys->GetKey (
0 , 0 , NULL , NULL , & t_ProviderNameLength , m_ProviderName , & t_Type ) ; } else { t_Result = WBEM_E_OUT_OF_MEMORY; } }
t_Keys->Release () ; } } SysFreeString ( t_Query ) ; } }
SysFreeString ( t_ObjectPath ) ; } }
return t_Result ; }
/******************************************************************************
* * Name: * * * Description: * * *****************************************************************************/
HRESULT CServerObject_ClassProviderRegistrationV1 :: Load (
Enum_PropertyMask a_Mask , IWbemPath *a_Scope, IWbemClassObject *a_Class ) { HRESULT t_Result = S_OK ;
IWbemQualifierSet *t_QualifierObject = NULL ; t_Result = a_Class->GetQualifierSet ( & t_QualifierObject ) ; if ( SUCCEEDED ( t_Result ) ) { VARIANT t_Variant ; VariantInit ( & t_Variant ) ;
LONG t_Flavour = 0 ;
t_Result = t_QualifierObject->Get ( ProviderSubSystem_Common_Globals :: s_Provider , 0 , & t_Variant , & t_Flavour ) ;
if ( SUCCEEDED ( t_Result ) ) { if ( t_Variant.vt == VT_BSTR ) { t_Result = QueryRepository (
a_Mask , a_Scope , t_Variant.bstrVal ) ;
VariantClear ( & t_Variant ) ; } }
t_QualifierObject->Release () ; }
return t_Result ; }
/******************************************************************************
* * Name: * * * Description: * * *****************************************************************************/
HRESULT CServerObject_ClassProviderRegistrationV1 :: Load (
Enum_PropertyMask a_Mask , IWbemPath *a_Scope, LPCWSTR a_Provider ) { HRESULT t_Result = S_OK ;
t_Result = QueryRepository (
a_Mask , a_Scope , a_Provider ) ;
return t_Result ; }
/******************************************************************************
* * Name: * * * Description: * * *****************************************************************************/
HRESULT CServerObject_ClassProviderRegistrationV1 :: Load (
Enum_PropertyMask a_Mask , IWbemPath *a_Scope, IWbemPath * a_Provider ) { HRESULT t_Result = S_OK ;
t_Result = QueryRepository (
a_Mask , a_Scope , a_Provider ) ;
if ( FAILED ( t_Result ) ) { m_Result = t_Result ; t_Result = S_OK ; }
return t_Result ; }
/******************************************************************************
* * Name: * * * Description: * * *****************************************************************************/
CServerObject_MethodProviderRegistrationV1 :: CServerObject_MethodProviderRegistrationV1 () :
m_Context ( NULL ) , m_Namespace ( NULL ) , m_Repository ( NULL ) , m_SupportsMethods ( FALSE ) , m_Supported ( FALSE ) , m_Result ( S_OK ) { }
/******************************************************************************
* * Name: * * * Description: * * *****************************************************************************/
CServerObject_MethodProviderRegistrationV1::~CServerObject_MethodProviderRegistrationV1 () { if ( m_Context ) { m_Context->Release () ; }
if ( m_Namespace ) { m_Namespace->Release () ; }
if ( m_Repository ) { m_Repository->Release () ; } }
/******************************************************************************
* * Name: * * * Description: * * *****************************************************************************/
ULONG CServerObject_MethodProviderRegistrationV1 :: AddRef () { return InterlockedIncrement ( & m_ReferenceCount ) ; }
/******************************************************************************
* * Name: * * * Description: * * *****************************************************************************/
ULONG CServerObject_MethodProviderRegistrationV1 :: Release () { ULONG t_ReferenceCount = InterlockedDecrement ( & m_ReferenceCount ) ; if ( t_ReferenceCount == 0 ) { delete this ; }
return t_ReferenceCount ; }
/******************************************************************************
* * Name: * * * Description: * * *****************************************************************************/
HRESULT CServerObject_MethodProviderRegistrationV1 :: SetContext (
IWbemContext *a_Context , IWbemPath *a_Namespace , IWbemServices *a_Repository ) { HRESULT t_Result = S_OK ;
m_Context = a_Context ; m_Namespace = a_Namespace ; m_Repository = a_Repository ;
if ( m_Context ) { m_Context->AddRef () ; }
if ( m_Namespace ) { m_Namespace->AddRef () ; }
if ( m_Repository ) { m_Repository->AddRef () ; }
return t_Result ; }
/******************************************************************************
* * Name: * * * Description: * * *****************************************************************************/
HRESULT CServerObject_MethodProviderRegistrationV1 :: QueryProperties (
Enum_PropertyMask a_Mask , IWbemClassObject *a_Object ) { HRESULT t_Result = S_OK ;
m_SupportsMethods = TRUE ;
m_Supported = TRUE ;
return t_Result ; }
/******************************************************************************
* * Name: * * * Description: * * *****************************************************************************/
HRESULT CServerObject_MethodProviderRegistrationV1 :: QueryRepositoryUsingQuery (
Enum_PropertyMask a_Mask , IWbemPath *a_Scope, BSTR a_Query ) { HRESULT t_Result = S_OK ;
IEnumWbemClassObject *t_ClassObjectEnum = NULL ;
BSTR t_Language = SysAllocString ( ProviderSubSystem_Common_Globals :: s_Wql ) ; if ( t_Language ) { t_Result = m_Repository->ExecQuery ( t_Language , a_Query , WBEM_FLAG_FORWARD_ONLY , m_Context , & t_ClassObjectEnum ) ;
if ( SUCCEEDED ( t_Result ) ) { IWbemClassObject *t_ClassObject = NULL ; ULONG t_ObjectCount = 0 ;
t_ClassObjectEnum->Reset () ; while ( SUCCEEDED ( t_Result ) && ( t_ClassObjectEnum->Next ( WBEM_INFINITE , 1 , & t_ClassObject , &t_ObjectCount ) == WBEM_NO_ERROR ) ) { VARIANT t_Variant ; VariantInit ( & t_Variant ) ; LONG t_VarType = 0 ; LONG t_Flavour = 0 ;
t_Result = t_ClassObject->Get ( s_Strings_Class , 0 , & t_Variant , & t_VarType , & t_Flavour ) ; if ( SUCCEEDED ( t_Result ) ) { if ( t_Variant.vt == VT_BSTR ) { if ( wbem_wcsicmp ( s_Strings_MethodProviderRegistration , t_Variant.bstrVal ) == 0 ) { t_Result = QueryProperties (
a_Mask , t_ClassObject ) ; } } }
VariantClear ( & t_Variant ) ;
t_ClassObject->Release () ; }
t_ClassObjectEnum->Release () ; } else { t_Result = WBEM_E_INVALID_PROVIDER_REGISTRATION ; }
SysFreeString ( t_Language ) ; }
return t_Result ; }
/******************************************************************************
* * Name: * * * Description: * * *****************************************************************************/
HRESULT CServerObject_MethodProviderRegistrationV1 :: QueryRepository (
Enum_PropertyMask a_Mask , IWbemPath *a_Scope, LPCWSTR a_ProviderName ) { BSTR t_Query = NULL ;
HRESULT t_Result = WmiHelper :: ConcatenateStrings (
3 , & t_Query , L"references of {__Win32Provider.Name=\"" , a_ProviderName , L"\"}" ) ;
if ( SUCCEEDED ( t_Result ) ) { t_Result = QueryRepositoryUsingQuery (
a_Mask , a_Scope, t_Query ) ;
SysFreeString ( t_Query ) ; }
return t_Result ; }
/******************************************************************************
* * Name: * * * Description: * * *****************************************************************************/
HRESULT CServerObject_MethodProviderRegistrationV1 :: QueryRepository (
Enum_PropertyMask a_Mask , IWbemPath *a_Scope, IWbemPath *a_Provider ) { BSTR t_ObjectPath = NULL ; ULONG t_ObjectPathLength = 0 ;
HRESULT t_Result = a_Provider->GetText (
WBEMPATH_GET_RELATIVE_ONLY , & t_ObjectPathLength , NULL ) ;
if ( SUCCEEDED ( t_Result ) ) { t_ObjectPath = SysAllocStringLen ( NULL , t_ObjectPathLength ) ; if ( t_ObjectPath ) { t_Result = a_Provider->GetText (
WBEMPATH_GET_RELATIVE_ONLY , & t_ObjectPathLength , t_ObjectPath ) ;
if ( SUCCEEDED ( t_Result ) ) { BSTR t_Query = NULL ;
t_Result = WmiHelper :: ConcatenateStrings (
3 , & t_Query , L"references of {" , t_ObjectPath , L"}" ) ;
if ( SUCCEEDED ( t_Result ) ) { t_Result = QueryRepositoryUsingQuery (
a_Mask , a_Scope, t_Query ) ;
SysFreeString ( t_Query ) ; } }
SysFreeString ( t_ObjectPath ) ; } }
return t_Result ; }
/******************************************************************************
* * Name: * * * Description: * * *****************************************************************************/
HRESULT CServerObject_MethodProviderRegistrationV1 :: Load (
Enum_PropertyMask a_Mask , IWbemPath *a_Scope, IWbemClassObject *a_Class ) { HRESULT t_Result = S_OK ;
IWbemQualifierSet *t_QualifierObject = NULL ; t_Result = a_Class->GetQualifierSet ( & t_QualifierObject ) ; if ( SUCCEEDED ( t_Result ) ) { VARIANT t_Variant ; VariantInit ( & t_Variant ) ;
LONG t_Flavour = 0 ;
t_Result = t_QualifierObject->Get ( ProviderSubSystem_Common_Globals :: s_Provider , 0 , & t_Variant , & t_Flavour ) ;
if ( SUCCEEDED ( t_Result ) ) { if ( t_Variant.vt == VT_BSTR ) { t_Result = QueryRepository (
a_Mask , a_Scope , t_Variant.bstrVal ) ;
VariantClear ( & t_Variant ) ; } }
t_QualifierObject->Release () ; }
return t_Result ; }
/******************************************************************************
* * Name: * * * Description: * * *****************************************************************************/
HRESULT CServerObject_MethodProviderRegistrationV1 :: Load (
Enum_PropertyMask a_Mask , IWbemPath *a_Scope, LPCWSTR a_Provider ) { HRESULT t_Result = S_OK ;
t_Result = QueryRepository (
a_Mask , a_Scope , a_Provider ) ;
return t_Result ; }
/******************************************************************************
* * Name: * * * Description: * * *****************************************************************************/
HRESULT CServerObject_MethodProviderRegistrationV1 :: Load (
Enum_PropertyMask a_Mask , IWbemPath *a_Scope, IWbemPath *a_Provider ) { HRESULT t_Result = S_OK ;
t_Result = QueryRepository (
a_Mask , a_Scope , a_Provider ) ;
return t_Result ; }
/******************************************************************************
* * Name: * * * Description: * * *****************************************************************************/
CServerObject_DynamicPropertyProviderRegistrationV1 :: CServerObject_DynamicPropertyProviderRegistrationV1 () :
m_Context ( NULL ) , m_Namespace ( NULL ) , m_Repository ( NULL ) , m_SupportsPut ( FALSE ) , m_SupportsGet ( FALSE ) , m_Supported ( FALSE ) , m_Result ( S_OK ) { }
/******************************************************************************
* * Name: * * * Description: * * *****************************************************************************/
CServerObject_DynamicPropertyProviderRegistrationV1::~CServerObject_DynamicPropertyProviderRegistrationV1 () { if ( m_Context ) { m_Context->Release () ; }
if ( m_Namespace ) { m_Namespace->Release () ; }
if ( m_Repository ) { m_Repository->Release () ; } }
/******************************************************************************
* * Name: * * * Description: * * *****************************************************************************/
ULONG CServerObject_DynamicPropertyProviderRegistrationV1 :: AddRef () { return InterlockedIncrement ( & m_ReferenceCount ) ; }
/******************************************************************************
* * Name: * * * Description: * * *****************************************************************************/
ULONG CServerObject_DynamicPropertyProviderRegistrationV1 :: Release () { ULONG t_ReferenceCount = InterlockedDecrement ( & m_ReferenceCount ) ; if ( t_ReferenceCount == 0 ) { delete this ; }
return t_ReferenceCount ; }
/******************************************************************************
* * Name: * * * Description: * * *****************************************************************************/
HRESULT CServerObject_DynamicPropertyProviderRegistrationV1 :: SetContext (
IWbemContext *a_Context , IWbemPath *a_Namespace , IWbemServices *a_Repository ) { HRESULT t_Result = S_OK ;
m_Context = a_Context ; m_Namespace = a_Namespace ; m_Repository = a_Repository ;
if ( m_Context ) { m_Context->AddRef () ; }
if ( m_Namespace ) { m_Namespace->AddRef () ; }
if ( m_Repository ) { m_Repository->AddRef () ; }
return t_Result ; }
/******************************************************************************
* * Name: * * * Description: * * *****************************************************************************/
HRESULT CServerObject_DynamicPropertyProviderRegistrationV1 :: QueryProperties (
Enum_PropertyMask a_Mask , IWbemClassObject *a_Object ) { HRESULT t_Result = S_OK ;
m_Supported = TRUE ;
if ( a_Mask & e_SupportsPut ) { VARIANT t_Variant ; VariantInit ( & t_Variant ) ; LONG t_VarType = 0 ; LONG t_Flavour = 0 ;
HRESULT t_TempResult = a_Object->Get ( s_Strings_SupportsPut , 0 , & t_Variant , & t_VarType , & t_Flavour ) ; if ( SUCCEEDED ( t_TempResult ) ) { if ( t_Variant.vt == VT_BOOL ) { m_SupportsPut = ( t_Variant.boolVal == VARIANT_TRUE ) ? TRUE : FALSE ; } else if ( t_Variant.vt == VT_NULL ) { m_SupportsPut = FALSE ; } else { t_Result = WBEM_E_INVALID_PROVIDER_REGISTRATION ; } } else if (t_TempResult != WBEM_E_NOT_FOUND) { t_Result = t_TempResult; }
VariantClear ( & t_Variant ) ; }
if ( SUCCEEDED(t_Result) && (a_Mask & e_SupportsGet) ) { VARIANT t_Variant ; VariantInit ( & t_Variant ) ; LONG t_VarType = 0 ; LONG t_Flavour = 0 ;
HRESULT t_TempResult = a_Object->Get ( s_Strings_SupportsGet , 0 , & t_Variant , & t_VarType , & t_Flavour ) ; if ( SUCCEEDED ( t_TempResult ) ) { if ( t_Variant.vt == VT_BOOL ) { m_SupportsGet = ( t_Variant.boolVal == VARIANT_TRUE ) ? TRUE : FALSE ; } else if ( t_Variant.vt == VT_NULL ) { m_SupportsGet = FALSE ; } else { t_Result = WBEM_E_INVALID_PROVIDER_REGISTRATION ; } } else if (t_TempResult != WBEM_E_NOT_FOUND) { t_Result = t_TempResult; }
VariantClear ( & t_Variant ) ; }
return t_Result ; }
/******************************************************************************
* * Name: * * * Description: * * *****************************************************************************/
HRESULT CServerObject_DynamicPropertyProviderRegistrationV1 :: QueryRepositoryUsingQuery (
Enum_PropertyMask a_Mask , IWbemPath *a_Scope, BSTR a_Query ) { HRESULT t_Result = S_OK ;
IEnumWbemClassObject *t_ClassObjectEnum = NULL ;
BSTR t_Language = SysAllocString ( ProviderSubSystem_Common_Globals :: s_Wql ) ; if ( t_Language ) { t_Result = m_Repository->ExecQuery ( t_Language , a_Query , WBEM_FLAG_FORWARD_ONLY , m_Context , & t_ClassObjectEnum ) ;
if ( SUCCEEDED ( t_Result ) ) { IWbemClassObject *t_ClassObject = NULL ; ULONG t_ObjectCount = 0 ;
t_ClassObjectEnum->Reset () ; while ( SUCCEEDED ( t_Result ) && ( t_ClassObjectEnum->Next ( WBEM_INFINITE , 1 , & t_ClassObject , &t_ObjectCount ) == WBEM_NO_ERROR ) ) { VARIANT t_Variant ; VariantInit ( & t_Variant ) ; LONG t_VarType = 0 ; LONG t_Flavour = 0 ;
t_Result = t_ClassObject->Get ( s_Strings_Class , 0 , & t_Variant , & t_VarType , & t_Flavour ) ; if ( SUCCEEDED ( t_Result ) ) { if ( t_Variant.vt == VT_BSTR ) { if ( wbem_wcsicmp ( s_Strings_PropertyProviderRegistration , t_Variant.bstrVal ) == 0 ) { t_Result = QueryProperties (
a_Mask , t_ClassObject ) ; } } }
VariantClear ( & t_Variant ) ;
t_ClassObject->Release () ; }
t_ClassObjectEnum->Release () ; } else { t_Result = WBEM_E_INVALID_PROVIDER_REGISTRATION ; }
SysFreeString ( t_Language ) ; }
return t_Result ; }
/******************************************************************************
* * Name: * * * Description: * * *****************************************************************************/
HRESULT CServerObject_DynamicPropertyProviderRegistrationV1 :: QueryRepository (
Enum_PropertyMask a_Mask , IWbemPath *a_Scope, LPCWSTR a_ProviderName ) { BSTR t_Query = NULL ;
HRESULT t_Result = WmiHelper :: ConcatenateStrings (
3 , & t_Query , L"references of {__Win32Provider.Name=\"" , a_ProviderName , L"\"}" ) ;
if ( SUCCEEDED ( t_Result ) ) { t_Result = QueryRepositoryUsingQuery (
a_Mask , a_Scope, t_Query ) ;
SysFreeString ( t_Query ) ; }
return t_Result ; }
/******************************************************************************
* * Name: * * * Description: * * *****************************************************************************/
HRESULT CServerObject_DynamicPropertyProviderRegistrationV1 :: QueryRepository (
Enum_PropertyMask a_Mask , IWbemPath *a_Scope, IWbemPath *a_Provider ) { BSTR t_ObjectPath = NULL ; ULONG t_ObjectPathLength = 0 ;
HRESULT t_Result = a_Provider->GetText (
WBEMPATH_GET_RELATIVE_ONLY , & t_ObjectPathLength , NULL ) ;
if ( SUCCEEDED ( t_Result ) ) { t_ObjectPath = SysAllocStringLen ( NULL , t_ObjectPathLength ) ; if ( t_ObjectPath ) { t_Result = a_Provider->GetText (
WBEMPATH_GET_RELATIVE_ONLY , & t_ObjectPathLength , t_ObjectPath ) ;
if ( SUCCEEDED ( t_Result ) ) { BSTR t_Query = NULL ;
t_Result = WmiHelper :: ConcatenateStrings (
3 , & t_Query , L"references of {" , t_ObjectPath , L"}" ) ;
if ( SUCCEEDED ( t_Result ) ) { t_Result = QueryRepositoryUsingQuery (
a_Mask , a_Scope, t_Query ) ;
SysFreeString ( t_Query ) ; } }
SysFreeString ( t_ObjectPath ) ; } }
return t_Result ; }
/******************************************************************************
* * Name: * * * Description: * * *****************************************************************************/
HRESULT CServerObject_DynamicPropertyProviderRegistrationV1 :: Load (
Enum_PropertyMask a_Mask , IWbemPath *a_Scope, IWbemClassObject *a_Class ) { HRESULT t_Result = S_OK ;
IWbemQualifierSet *t_QualifierObject = NULL ; t_Result = a_Class->GetQualifierSet ( & t_QualifierObject ) ; if ( SUCCEEDED ( t_Result ) ) { VARIANT t_Variant ; VariantInit ( & t_Variant ) ;
LONG t_Flavour = 0 ;
t_Result = t_QualifierObject->Get ( ProviderSubSystem_Common_Globals :: s_Provider , 0 , & t_Variant , & t_Flavour ) ;
if ( SUCCEEDED ( t_Result ) ) { if ( t_Variant.vt == VT_BSTR ) { t_Result = QueryRepository (
a_Mask , a_Scope , t_Variant.bstrVal ) ;
VariantClear ( & t_Variant ) ; } }
t_QualifierObject->Release () ; }
return t_Result ; }
/******************************************************************************
* * Name: * * * Description: * * *****************************************************************************/
HRESULT CServerObject_DynamicPropertyProviderRegistrationV1 :: Load (
Enum_PropertyMask a_Mask , IWbemPath *a_Scope, LPCWSTR a_Provider ) { HRESULT t_Result = S_OK ;
t_Result = QueryRepository (
a_Mask , a_Scope , a_Provider ) ;
return t_Result ; }
/******************************************************************************
* * Name: * * * Description: * * *****************************************************************************/
HRESULT CServerObject_DynamicPropertyProviderRegistrationV1 :: Load (
Enum_PropertyMask a_Mask , IWbemPath *a_Scope, IWbemPath *a_Provider ) { HRESULT t_Result = S_OK ;
t_Result = QueryRepository (
a_Mask , a_Scope , a_Provider ) ;
return t_Result ; }
/******************************************************************************
* * Name: * * * Description: * * *****************************************************************************/
CServerObject_EventProviderRegistrationV1 :: CServerObject_EventProviderRegistrationV1 () :
m_Context ( NULL ) , m_Namespace ( NULL ) , m_Repository ( NULL ) , m_Supported ( FALSE ) , m_Result ( S_OK ) { }
/******************************************************************************
* * Name: * * * Description: * * *****************************************************************************/
CServerObject_EventProviderRegistrationV1::~CServerObject_EventProviderRegistrationV1 () { if ( m_Context ) { m_Context->Release () ; }
if ( m_Namespace ) { m_Namespace->Release () ; }
if ( m_Repository ) { m_Repository->Release () ; } }
/******************************************************************************
* * Name: * * * Description: * * *****************************************************************************/
ULONG CServerObject_EventProviderRegistrationV1 :: AddRef () { return InterlockedIncrement ( & m_ReferenceCount ) ; }
/******************************************************************************
* * Name: * * * Description: * * *****************************************************************************/
ULONG CServerObject_EventProviderRegistrationV1 :: Release () { ULONG t_ReferenceCount = InterlockedDecrement ( & m_ReferenceCount ) ; if ( t_ReferenceCount == 0 ) { delete this ; }
return t_ReferenceCount ; }
/******************************************************************************
* * Name: * * * Description: * * *****************************************************************************/
HRESULT CServerObject_EventProviderRegistrationV1 :: SetContext (
IWbemContext *a_Context , IWbemPath *a_Namespace , IWbemServices *a_Repository ) { HRESULT t_Result = S_OK ;
m_Context = a_Context ; m_Namespace = a_Namespace ; m_Repository = a_Repository ;
if ( m_Context ) { m_Context->AddRef () ; }
if ( m_Namespace ) { m_Namespace->AddRef () ; }
if ( m_Repository ) { m_Repository->AddRef () ; }
return t_Result ; }
/******************************************************************************
* * Name: * * * Description: * * *****************************************************************************/
HRESULT CServerObject_EventProviderRegistrationV1 :: QueryProperties (
Enum_PropertyMask a_Mask , IWbemClassObject *a_Object ) { HRESULT t_Result = S_OK ;
m_Supported = TRUE ;
return t_Result ; }
/******************************************************************************
* * Name: * * * Description: * * *****************************************************************************/
HRESULT CServerObject_EventProviderRegistrationV1 :: QueryRepositoryUsingQuery (
Enum_PropertyMask a_Mask , IWbemPath *a_Scope, BSTR a_Query ) { HRESULT t_Result = S_OK ;
IEnumWbemClassObject *t_ClassObjectEnum = NULL ;
BSTR t_Language = SysAllocString ( ProviderSubSystem_Common_Globals :: s_Wql ) ; if ( t_Language ) { t_Result = m_Repository->ExecQuery ( t_Language , a_Query , WBEM_FLAG_FORWARD_ONLY , m_Context , & t_ClassObjectEnum ) ;
if ( SUCCEEDED ( t_Result ) ) { IWbemClassObject *t_ClassObject = NULL ; ULONG t_ObjectCount = 0 ;
t_ClassObjectEnum->Reset () ; while ( SUCCEEDED ( t_Result ) && ( t_ClassObjectEnum->Next ( WBEM_INFINITE , 1 , & t_ClassObject , &t_ObjectCount ) == WBEM_NO_ERROR ) ) { VARIANT t_Variant ; VariantInit ( & t_Variant ) ; LONG t_VarType = 0 ; LONG t_Flavour = 0 ;
t_Result = t_ClassObject->Get ( s_Strings_Class , 0 , & t_Variant , & t_VarType , & t_Flavour ) ; if ( SUCCEEDED ( t_Result ) ) { if ( t_Variant.vt == VT_BSTR ) { if ( wbem_wcsicmp ( s_Strings_EventProviderRegistration , t_Variant.bstrVal ) == 0 ) { t_Result = QueryProperties (
a_Mask , t_ClassObject ) ; } } }
VariantClear ( & t_Variant ) ;
t_ClassObject->Release () ; }
t_ClassObjectEnum->Release () ; } else { t_Result = WBEM_E_INVALID_PROVIDER_REGISTRATION ; }
SysFreeString ( t_Language ) ; }
return t_Result ; }
/******************************************************************************
* * Name: * * * Description: * * *****************************************************************************/
HRESULT CServerObject_EventProviderRegistrationV1 :: QueryRepository (
Enum_PropertyMask a_Mask , IWbemPath *a_Scope, LPCWSTR a_ProviderName ) { BSTR t_Query = NULL ;
HRESULT t_Result = WmiHelper :: ConcatenateStrings (
3 , & t_Query , L"references of {__Win32Provider.Name=\"" , a_ProviderName , L"\"}" ) ;
if ( SUCCEEDED ( t_Result ) ) { t_Result = QueryRepositoryUsingQuery (
a_Mask , a_Scope, t_Query ) ;
SysFreeString ( t_Query ) ; }
return t_Result ; }
/******************************************************************************
* * Name: * * * Description: * * *****************************************************************************/
HRESULT CServerObject_EventProviderRegistrationV1 :: QueryRepository (
Enum_PropertyMask a_Mask , IWbemPath *a_Scope, IWbemPath *a_Provider ) { BSTR t_ObjectPath = NULL ; ULONG t_ObjectPathLength = 0 ;
HRESULT t_Result = a_Provider->GetText (
WBEMPATH_GET_RELATIVE_ONLY , & t_ObjectPathLength , NULL ) ;
if ( SUCCEEDED ( t_Result ) ) { t_ObjectPath = SysAllocStringLen ( NULL , t_ObjectPathLength ) ; if ( t_ObjectPath ) { t_Result = a_Provider->GetText (
WBEMPATH_GET_RELATIVE_ONLY , & t_ObjectPathLength , t_ObjectPath ) ;
if ( SUCCEEDED ( t_Result ) ) { BSTR t_Query = NULL ;
t_Result = WmiHelper :: ConcatenateStrings (
3 , & t_Query , L"references of {" , t_ObjectPath , L"}" ) ;
if ( SUCCEEDED ( t_Result ) ) { t_Result = QueryRepositoryUsingQuery (
a_Mask , a_Scope, t_Query ) ;
SysFreeString ( t_Query ) ; } }
SysFreeString ( t_ObjectPath ) ; } }
return t_Result ; }
/******************************************************************************
* * Name: * * * Description: * * *****************************************************************************/
HRESULT CServerObject_EventProviderRegistrationV1 :: Load (
Enum_PropertyMask a_Mask , IWbemPath *a_Scope, IWbemClassObject *a_Class ) { HRESULT t_Result = S_OK ;
IWbemQualifierSet *t_QualifierObject = NULL ; t_Result = a_Class->GetQualifierSet ( & t_QualifierObject ) ; if ( SUCCEEDED ( t_Result ) ) { VARIANT t_Variant ; VariantInit ( & t_Variant ) ;
LONG t_Flavour = 0 ;
t_Result = t_QualifierObject->Get ( ProviderSubSystem_Common_Globals :: s_Provider , 0 , & t_Variant , & t_Flavour ) ;
if ( SUCCEEDED ( t_Result ) ) { if ( t_Variant.vt == VT_BSTR ) { t_Result = QueryRepository (
a_Mask , a_Scope , t_Variant.bstrVal ) ;
VariantClear ( & t_Variant ) ; } }
t_QualifierObject->Release () ; }
return t_Result ; }
/******************************************************************************
* * Name: * * * Description: * * *****************************************************************************/
HRESULT CServerObject_EventProviderRegistrationV1 :: Load (
Enum_PropertyMask a_Mask , IWbemPath *a_Scope, LPCWSTR a_Provider ) { HRESULT t_Result = S_OK ;
t_Result = QueryRepository (
a_Mask , a_Scope , a_Provider ) ;
return t_Result ; }
/******************************************************************************
* * Name: * * * Description: * * *****************************************************************************/
HRESULT CServerObject_EventProviderRegistrationV1 :: Load (
Enum_PropertyMask a_Mask , IWbemPath *a_Scope, IWbemPath *a_Provider ) { HRESULT t_Result = S_OK ;
t_Result = QueryRepository (
a_Mask , a_Scope , a_Provider ) ;
return t_Result ; }
/******************************************************************************
* * Name: * * * Description: * * *****************************************************************************/
CServerObject_EventConsumerProviderRegistrationV1 :: CServerObject_EventConsumerProviderRegistrationV1 () :
m_Context ( NULL ) , m_Namespace ( NULL ) , m_Repository ( NULL ) , m_Supported ( FALSE ) , m_Result ( S_OK ) { }
/******************************************************************************
* * Name: * * * Description: * * *****************************************************************************/
CServerObject_EventConsumerProviderRegistrationV1::~CServerObject_EventConsumerProviderRegistrationV1 () { if ( m_Context ) { m_Context->Release () ; }
if ( m_Namespace ) { m_Namespace->Release () ; }
if ( m_Repository ) { m_Repository->Release () ; } }
/******************************************************************************
* * Name: * * * Description: * * *****************************************************************************/
ULONG CServerObject_EventConsumerProviderRegistrationV1 :: AddRef () { return InterlockedIncrement ( & m_ReferenceCount ) ; }
/******************************************************************************
* * Name: * * * Description: * * *****************************************************************************/
ULONG CServerObject_EventConsumerProviderRegistrationV1 :: Release () { ULONG t_ReferenceCount = InterlockedDecrement ( & m_ReferenceCount ) ; if ( t_ReferenceCount == 0 ) { delete this ; }
return t_ReferenceCount ; }
/******************************************************************************
* * Name: * * * Description: * * *****************************************************************************/
HRESULT CServerObject_EventConsumerProviderRegistrationV1 :: SetContext (
IWbemContext *a_Context , IWbemPath *a_Namespace , IWbemServices *a_Repository ) { HRESULT t_Result = S_OK ;
m_Context = a_Context ; m_Namespace = a_Namespace ; m_Repository = a_Repository ;
if ( m_Context ) { m_Context->AddRef () ; }
if ( m_Namespace ) { m_Namespace->AddRef () ; }
if ( m_Repository ) { m_Repository->AddRef () ; }
return t_Result ; }
/******************************************************************************
* * Name: * * * Description: * * *****************************************************************************/
HRESULT CServerObject_EventConsumerProviderRegistrationV1 :: QueryProperties (
Enum_PropertyMask a_Mask , IWbemClassObject *a_Object ) { HRESULT t_Result = S_OK ;
m_Supported = TRUE ;
return t_Result ; }
/******************************************************************************
* * Name: * * * Description: * * *****************************************************************************/
HRESULT CServerObject_EventConsumerProviderRegistrationV1 :: QueryRepositoryUsingQuery (
Enum_PropertyMask a_Mask , IWbemPath *a_Scope, BSTR a_Query ) { HRESULT t_Result = S_OK ;
IEnumWbemClassObject *t_ClassObjectEnum = NULL ;
BSTR t_Language = SysAllocString ( ProviderSubSystem_Common_Globals :: s_Wql ) ; if ( t_Language ) { t_Result = m_Repository->ExecQuery ( t_Language , a_Query , WBEM_FLAG_FORWARD_ONLY , m_Context , & t_ClassObjectEnum ) ;
if ( SUCCEEDED ( t_Result ) ) { IWbemClassObject *t_ClassObject = NULL ; ULONG t_ObjectCount = 0 ;
t_ClassObjectEnum->Reset () ; while ( SUCCEEDED ( t_Result ) && ( t_ClassObjectEnum->Next ( WBEM_INFINITE , 1 , & t_ClassObject , &t_ObjectCount ) == WBEM_NO_ERROR ) ) { VARIANT t_Variant ; VariantInit ( & t_Variant ) ; LONG t_VarType = 0 ; LONG t_Flavour = 0 ;
t_Result = t_ClassObject->Get ( s_Strings_Class , 0 , & t_Variant , & t_VarType , & t_Flavour ) ; if ( SUCCEEDED ( t_Result ) ) { if ( t_Variant.vt == VT_BSTR ) { if ( wbem_wcsicmp ( s_Strings_EventConsumerProviderRegistration , t_Variant.bstrVal ) == 0 ) { t_Result = QueryProperties (
a_Mask , t_ClassObject ) ; } } }
VariantClear ( & t_Variant ) ;
t_ClassObject->Release () ; }
t_ClassObjectEnum->Release () ; } else { t_Result = WBEM_E_INVALID_PROVIDER_REGISTRATION ; }
SysFreeString ( t_Language ) ; }
return t_Result ; }
/******************************************************************************
* * Name: * * * Description: * * *****************************************************************************/
HRESULT CServerObject_EventConsumerProviderRegistrationV1 :: QueryRepository (
Enum_PropertyMask a_Mask , IWbemPath *a_Scope, LPCWSTR a_ProviderName ) { BSTR t_Query = NULL ;
HRESULT t_Result = WmiHelper :: ConcatenateStrings (
3 , & t_Query , L"references of {__Win32Provider.Name=\"" , a_ProviderName , L"\"}" ) ;
if ( SUCCEEDED ( t_Result ) ) { t_Result = QueryRepositoryUsingQuery (
a_Mask , a_Scope, t_Query ) ;
SysFreeString ( t_Query ) ; }
return t_Result ; }
/******************************************************************************
* * Name: * * * Description: * * *****************************************************************************/
HRESULT CServerObject_EventConsumerProviderRegistrationV1 :: QueryRepository (
Enum_PropertyMask a_Mask , IWbemPath *a_Scope, IWbemPath *a_Provider ) { BSTR t_ObjectPath = NULL ; ULONG t_ObjectPathLength = 0 ;
HRESULT t_Result = a_Provider->GetText (
WBEMPATH_GET_RELATIVE_ONLY , & t_ObjectPathLength , NULL ) ;
if ( SUCCEEDED ( t_Result ) ) { t_ObjectPath = SysAllocStringLen ( NULL , t_ObjectPathLength ) ; if ( t_ObjectPath ) { t_Result = a_Provider->GetText (
WBEMPATH_GET_RELATIVE_ONLY , & t_ObjectPathLength , t_ObjectPath ) ;
if ( SUCCEEDED ( t_Result ) ) { BSTR t_Query = NULL ;
t_Result = WmiHelper :: ConcatenateStrings (
3 , & t_Query , L"references of {" , t_ObjectPath , L"}" ) ;
if ( SUCCEEDED ( t_Result ) ) { t_Result = QueryRepositoryUsingQuery (
a_Mask , a_Scope, t_Query ) ;
SysFreeString ( t_Query ) ; } }
SysFreeString ( t_ObjectPath ) ; } }
return t_Result ; }
/******************************************************************************
* * Name: * * * Description: * * *****************************************************************************/
HRESULT CServerObject_EventConsumerProviderRegistrationV1 :: Load (
Enum_PropertyMask a_Mask , IWbemPath *a_Scope, IWbemClassObject *a_Class ) { HRESULT t_Result = S_OK ;
IWbemQualifierSet *t_QualifierObject = NULL ; t_Result = a_Class->GetQualifierSet ( & t_QualifierObject ) ; if ( SUCCEEDED ( t_Result ) ) { VARIANT t_Variant ; VariantInit ( & t_Variant ) ;
LONG t_Flavour = 0 ;
t_Result = t_QualifierObject->Get ( ProviderSubSystem_Common_Globals :: s_Provider , 0 , & t_Variant , & t_Flavour ) ;
if ( SUCCEEDED ( t_Result ) ) { if ( t_Variant.vt == VT_BSTR ) { t_Result = QueryRepository (
a_Mask , a_Scope , t_Variant.bstrVal ) ;
VariantClear ( & t_Variant ) ; } }
t_QualifierObject->Release () ; }
return t_Result ; }
/******************************************************************************
* * Name: * * * Description: * * *****************************************************************************/
HRESULT CServerObject_EventConsumerProviderRegistrationV1 :: Load (
Enum_PropertyMask a_Mask , IWbemPath *a_Scope, LPCWSTR a_Provider ) { HRESULT t_Result = S_OK ;
t_Result = QueryRepository (
a_Mask , a_Scope , a_Provider ) ;
return t_Result ; }
/******************************************************************************
* * Name: * * * Description: * * *****************************************************************************/
HRESULT CServerObject_EventConsumerProviderRegistrationV1 :: Load (
Enum_PropertyMask a_Mask , IWbemPath *a_Scope, IWbemPath *a_Provider ) { HRESULT t_Result = S_OK ;
t_Result = QueryRepository (
a_Mask , a_Scope , a_Provider ) ;
return t_Result ; }
/******************************************************************************
* * Name: * * * Description: * * *****************************************************************************/
CServerObject_ProviderRegistrationV1 :: CServerObject_ProviderRegistrationV1 () :
m_Context ( NULL ) , m_Namespace ( NULL ) , m_Repository ( NULL ) , m_Result ( S_OK ) , m_ReferenceCount ( 0 ) { }
/******************************************************************************
* * Name: * * * Description: * * *****************************************************************************/
CServerObject_ProviderRegistrationV1::~CServerObject_ProviderRegistrationV1 () { if ( m_Context ) { m_Context->Release () ; }
if ( m_Namespace ) { m_Namespace->Release () ; }
if ( m_Repository ) { m_Repository->Release () ; } }
/******************************************************************************
* * Name: * * * Description: * * *****************************************************************************/
ULONG CServerObject_ProviderRegistrationV1 :: AddRef () { return InterlockedIncrement ( & m_ReferenceCount ) ; }
/******************************************************************************
* * Name: * * * Description: * * *****************************************************************************/
ULONG CServerObject_ProviderRegistrationV1 :: Release () { ULONG t_ReferenceCount = InterlockedDecrement ( & m_ReferenceCount ) ; if ( t_ReferenceCount == 0 ) { delete this ; }
return t_ReferenceCount ; }
/******************************************************************************
* * Name: * * * Description: * * *****************************************************************************/
HRESULT CServerObject_ProviderRegistrationV1 :: SetContext (
IWbemContext *a_Context , IWbemPath *a_Namespace , IWbemServices *a_Repository ) { HRESULT t_Result = S_OK ;
m_Context = a_Context ; m_Namespace = a_Namespace ; m_Repository = a_Repository ;
if ( m_Context ) { m_Context->AddRef () ; }
if ( m_Namespace ) { m_Namespace->AddRef () ; }
if ( m_Repository ) { m_Repository->AddRef () ; }
t_Result = m_ComRegistration.SetContext (
a_Context , a_Namespace , a_Repository ) ;
return t_Result ; }
/******************************************************************************
* * Name: * * * Description: * * *****************************************************************************/
HRESULT CServerObject_ProviderRegistrationV1 :: QueryRepositoryUsingQuery (
Enum_PropertyMask a_Mask , IWbemPath *a_Scope, BSTR a_Query ) { HRESULT t_Result = S_OK ;
IEnumWbemClassObject *t_ClassObjectEnum = NULL ;
BSTR t_Language = SysAllocString ( ProviderSubSystem_Common_Globals :: s_Wql ) ; if ( t_Language ) { t_Result = m_Repository->ExecQuery ( t_Language , a_Query , WBEM_FLAG_FORWARD_ONLY , m_Context , & t_ClassObjectEnum ) ;
if ( SUCCEEDED ( t_Result ) ) { IWbemClassObject *t_ClassObject = NULL ; ULONG t_ObjectCount = 0 ;
t_ClassObjectEnum->Reset () ; while ( SUCCEEDED ( t_Result ) && ( t_ClassObjectEnum->Next ( WBEM_INFINITE , 1 , & t_ClassObject , &t_ObjectCount ) == WBEM_NO_ERROR ) ) { VARIANT t_Variant ; VariantInit ( & t_Variant ) ; LONG t_VarType = 0 ; LONG t_Flavour = 0 ;
t_Result = t_ClassObject->Get ( s_Strings_Class , 0 , & t_Variant , & t_VarType , & t_Flavour ) ; if ( SUCCEEDED ( t_Result ) ) { if ( t_Variant.vt == VT_BSTR ) { if ( wbem_wcsicmp ( s_Strings_InstanceProviderRegistration , t_Variant.bstrVal ) == 0 ) { t_Result = m_InstanceProviderRegistration.QueryProperties (
a_Mask , t_ClassObject ) ; } else if ( wbem_wcsicmp ( s_Strings_ClassProviderRegistration , t_Variant.bstrVal ) == 0 ) { t_Result = m_ClassProviderRegistration.QueryProperties (
a_Mask , t_ClassObject ) ; } else if ( wbem_wcsicmp ( s_Strings_MethodProviderRegistration , t_Variant.bstrVal ) == 0 ) { t_Result = m_MethodProviderRegistration.QueryProperties (
a_Mask , t_ClassObject ) ; } else if ( wbem_wcsicmp ( s_Strings_PropertyProviderRegistration , t_Variant.bstrVal ) == 0 ) { t_Result = m_PropertyProviderRegistration.QueryProperties (
a_Mask , t_ClassObject ) ; } else if ( wbem_wcsicmp ( s_Strings_EventProviderRegistration , t_Variant.bstrVal ) == 0 ) { t_Result = m_EventProviderRegistration.QueryProperties (
a_Mask , t_ClassObject ) ; } else if ( wbem_wcsicmp ( s_Strings_EventConsumerProviderRegistration , t_Variant.bstrVal ) == 0 ) { t_Result = m_EventConsumerProviderRegistration.QueryProperties (
a_Mask , t_ClassObject ) ; } } }
VariantClear ( & t_Variant ) ;
t_ClassObject->Release () ; }
t_ClassObjectEnum->Release () ; } else { t_Result = WBEM_E_INVALID_PROVIDER_REGISTRATION ; }
SysFreeString ( t_Language ) ; } else { t_Result = WBEM_E_OUT_OF_MEMORY ; }
return t_Result ; }
/******************************************************************************
* * Name: * * * Description: * * *****************************************************************************/
HRESULT CServerObject_ProviderRegistrationV1 :: QueryRepository (
Enum_PropertyMask a_Mask , IWbemPath *a_Scope, LPCWSTR a_ProviderName ) { BSTR t_Query = NULL ;
HRESULT t_Result = WmiHelper :: ConcatenateStrings (
3 , & t_Query , L"references of {__Win32Provider.Name=\"" , a_ProviderName , L"\"}" ) ;
if ( SUCCEEDED ( t_Result ) ) { t_Result = QueryRepositoryUsingQuery (
a_Mask , a_Scope, t_Query ) ;
SysFreeString ( t_Query ) ; }
return t_Result ; }
/******************************************************************************
* * Name: * * * Description: * * *****************************************************************************/
HRESULT CServerObject_ProviderRegistrationV1 :: QueryRepository (
Enum_PropertyMask a_Mask , IWbemPath *a_Scope, IWbemPath *a_Provider ) { BSTR t_ObjectPath = NULL ; ULONG t_ObjectPathLength = 0 ;
HRESULT t_Result = a_Provider->GetText (
WBEMPATH_GET_RELATIVE_ONLY , & t_ObjectPathLength , NULL ) ;
if ( SUCCEEDED ( t_Result ) ) { t_ObjectPath = SysAllocStringLen ( NULL , t_ObjectPathLength ) ; if ( t_ObjectPath ) { t_Result = a_Provider->GetText (
WBEMPATH_GET_RELATIVE_ONLY , & t_ObjectPathLength , t_ObjectPath ) ;
if ( SUCCEEDED ( t_Result ) ) { BSTR t_Query = NULL ;
t_Result = WmiHelper :: ConcatenateStrings (
3 , & t_Query , L"references of {" , t_ObjectPath , L"}" ) ;
if ( SUCCEEDED ( t_Result ) ) { t_Result = QueryRepositoryUsingQuery (
a_Mask , a_Scope, t_Query ) ;
SysFreeString ( t_Query ) ; } }
SysFreeString ( t_ObjectPath ) ; } }
return t_Result ; }
/******************************************************************************
* * Name: * * * Description: * * *****************************************************************************/
HRESULT CServerObject_ProviderRegistrationV1 :: Load (
Enum_PropertyMask a_Mask , IWbemPath *a_Scope, IWbemClassObject *a_Class ) { HRESULT t_Result = S_OK ;
IWbemQualifierSet *t_QualifierObject = NULL ; t_Result = a_Class->GetQualifierSet ( & t_QualifierObject ) ; if ( SUCCEEDED ( t_Result ) ) { VARIANT t_Variant ; VariantInit ( & t_Variant ) ;
LONG t_Flavour = 0 ;
t_Result = t_QualifierObject->Get ( ProviderSubSystem_Common_Globals :: s_Provider , 0 , & t_Variant , & t_Flavour ) ;
if ( SUCCEEDED ( t_Result ) ) { if ( t_Variant.vt == VT_BSTR ) { t_Result = m_ComRegistration.QueryRepository (
a_Mask , a_Scope , t_Variant.bstrVal ) ;
if ( SUCCEEDED ( t_Result ) ) { t_Result = QueryRepository ( a_Mask , a_Scope , t_Variant.bstrVal ) ; }
VariantClear ( & t_Variant ) ; } }
t_QualifierObject->Release () ; }
return t_Result ; }
/******************************************************************************
* * Name: * * * Description: * * *****************************************************************************/
HRESULT CServerObject_ProviderRegistrationV1 :: Load (
Enum_PropertyMask a_Mask , IWbemPath *a_Scope, LPCWSTR a_Provider ) { HRESULT t_Result = S_OK ;
t_Result = m_ComRegistration.QueryRepository (
a_Mask , a_Scope , a_Provider ) ;
if ( SUCCEEDED ( t_Result ) ) { t_Result = QueryRepository (
a_Mask , a_Scope , a_Provider ) ; }
return t_Result ; }
/******************************************************************************
* * Name: * * * Description: * * *****************************************************************************/
HRESULT CServerObject_ProviderRegistrationV1 :: Load (
Enum_PropertyMask a_Mask , IWbemPath *a_Scope, IWbemPath *a_Provider ) { HRESULT t_Result = S_OK ;
t_Result = m_ComRegistration.QueryRepository (
a_Mask , a_Scope , a_Provider ) ;
if ( SUCCEEDED ( t_Result ) ) { t_Result = QueryRepository (
a_Mask , a_Scope , a_Provider ) ; }
return t_Result ; }
/******************************************************************************
* * Name: * * * Description: * * *****************************************************************************/
BOOL CServerObject_ProviderRegistrationV1 :: ObjectProvider () { BOOL t_Supported = GetClassProviderRegistration ().Supported () || GetInstanceProviderRegistration ().Supported () || GetMethodProviderRegistration ().Supported () || GetPropertyProviderRegistration ().Supported () ;
return t_Supported ; }
/******************************************************************************
* * Name: * * * Description: * * *****************************************************************************/
BOOL CServerObject_ProviderRegistrationV1 :: EventProvider () { BOOL t_Supported = GetEventConsumerProviderRegistration ().Supported () || GetEventProviderRegistration ().Supported () ;
return t_Supported ; }
|