//*************************************************************************** // // MINISERV.CPP // // Module: OLE MS SNMP Property Provider // // Purpose: Implementation for the SnmpGetEventObject class. // // Copyright (c) 1996-2001 Microsoft Corporation, All Rights Reserved // //*************************************************************************** #include #include #include #include #include #include #include #include #include "classfac.h" #include "guids.h" #include #include #include #include #include #include #include #include #include #include #include #include #include "wndtime.h" #include "rmon.h" #include "trrtprov.h" #include "trrt.h" BOOL ExecQueryAsyncEventObject :: ConnectionSource_Association ( WbemSnmpErrorObject &a_ErrorObject , wchar_t *a_ObjectPath , KeyRef *a_SourceKey , KeyRef *a_DestinationKey ) { BOOL t_Status = TRUE ; wchar_t *t_SourceAddress = GetHostAddressByName ( a_SourceKey->m_vValue.bstrVal ) ; wchar_t *t_DestinationAddress = GetHostAddressByName ( a_DestinationKey->m_vValue.bstrVal ) ; if ( t_SourceAddress && t_DestinationAddress ) { SnmpIpAddressType t_SourceIpAddress ( t_SourceAddress ) ; SnmpIpAddressType t_DestinationIpAddress ( t_DestinationAddress ) ; if ( t_SourceIpAddress && t_DestinationIpAddress ) { IWbemServices *t_Server = m_Provider->GetServer () ; IWbemServices *t_Proxy ; t_Status = GetProxy ( a_ErrorObject , t_Server , a_SourceKey->m_vValue.bstrVal , &t_Proxy ) ; if ( t_Status ) { wchar_t *t_DestinationRouteAddress = 0 ; wchar_t *t_DestinationRouteMask = 0 ; wchar_t *t_SubnetAddress = 0 ; wchar_t *t_SubnetMask = 0 ; ULONG t_InterfaceIndex = 0 ; wchar_t *t_GatewayAddress = 0 ; wchar_t *t_GatewaySubnetAddress = 0 ; wchar_t *t_GatewaySubnetMask = 0 ; ULONG t_GatewayInterfaceIndex = 0 ; t_Status = CalculateRoute ( a_ErrorObject , t_Proxy , t_SourceIpAddress.GetValue () , t_DestinationIpAddress.GetValue () , t_SubnetAddress , t_SubnetMask , t_InterfaceIndex , t_GatewayAddress , t_GatewaySubnetAddress , t_GatewaySubnetMask , t_GatewayInterfaceIndex , t_DestinationRouteAddress , t_DestinationRouteMask ) ; if ( t_Status ) { SnmpIpAddressType t_HopDestinationType ( t_GatewayAddress ) ; IWbemClassObject *t_Association = NULL ; HRESULT t_Result = m_ClassObject->SpawnInstance ( 0 , & t_Association ) ; if ( t_Status = SUCCEEDED ( t_Result ) ) { VARIANT t_Variant ; VariantInit ( &t_Variant ) ; t_Variant.vt = VT_BSTR ; t_Variant.bstrVal = SysAllocString ( a_ObjectPath ) ; t_Result = t_Association->Put ( L"m_Connection" , 0 , & t_Variant , 0 ) ; VariantClear ( &t_Variant ) ; if ( t_Status = SUCCEEDED ( t_Result ) ) { wchar_t *t_String1 = UnicodeStringDuplicate ( L"Hop.m_DestinationIpAddress =\"" ) ; wchar_t *t_StringDestination = t_DestinationAddress ; wchar_t *t_String2 = UnicodeStringAppend ( t_String1 , t_StringDestination ) ; delete [] t_String1 ; wchar_t *t_String3 = UnicodeStringAppend ( t_String2 , L"\",m_IpAddress = \"" ) ; wchar_t *t_StringHop = t_SourceAddress ; wchar_t *t_String4 = UnicodeStringAppend ( t_String3 , t_StringHop ) ; wchar_t *t_String5 = UnicodeStringAppend ( t_String4 , L"\"" ) ; delete [] t_String4 ; t_Variant.vt = VT_BSTR ; t_Variant.bstrVal = SysAllocString ( t_String5 ) ; delete [] t_String5 ; t_Result = t_Association->Put ( L"m_Hop" , 0 , & t_Variant , 0 ) ; if ( t_Status = SUCCEEDED ( t_Result ) ) { m_NotificationHandler->Indicate ( 1 , & t_Association ) ; } } } t_Association->Release () ; } delete [] t_DestinationRouteAddress ; delete [] t_DestinationRouteMask ; delete [] t_GatewayAddress ; delete [] t_SubnetAddress ; delete [] t_SubnetMask ; t_Proxy->Release () ; } t_Server->Release () ; } else { t_Status = FALSE ; } } else { t_Status = FALSE ; } delete [] t_SourceAddress ; delete [] t_DestinationAddress ; return t_Status ; } BOOL ExecQueryAsyncEventObject :: Dispatch_ConnectionSource ( WbemSnmpErrorObject &a_ErrorObject , wchar_t *a_ObjectPath ) { BOOL t_Status = TRUE ; ParsedObjectPath *t_ParsedObjectPath ; CObjectPathParser t_ObjectPathParser ; t_Status = ! t_ObjectPathParser.Parse ( a_ObjectPath , &t_ParsedObjectPath ) ; if ( t_Status ) { if ( t_ParsedObjectPath->m_paKeys && ( t_ParsedObjectPath->m_dwNumKeys == 2 ) ) { if ( wcscmp ( t_ParsedObjectPath->m_pClass , L"Connection" ) == 0 ) { KeyRef *t_Key1 = t_ParsedObjectPath->m_paKeys [ 0 ] ; KeyRef *t_Key2 = t_ParsedObjectPath->m_paKeys [ 1 ] ; if ( t_Key1 && t_Key2 ) { if ( wcscmp ( t_Key1->m_pName , L"m_Source" ) == 0 ) { if ( wcscmp ( t_Key2->m_pName , L"m_Destination" ) == 0 ) { if ( ( t_Key1->m_vValue.vt == VT_BSTR ) && ( t_Key2->m_vValue.vt == VT_BSTR ) ) { t_Status = ConnectionSource_Association ( a_ErrorObject , a_ObjectPath , t_Key1 , t_Key2 ) ; } else { t_Status = FALSE ; } } else { t_Status = FALSE ; } } else if ( wcscmp ( t_Key2->m_pName , L"m_Source" ) == 0 ) { if ( wcscmp ( t_Key1->m_pName , L"m_Destination" ) == 0 ) { if ( ( t_Key1->m_vValue.vt == VT_BSTR ) && ( t_Key2->m_vValue.vt == VT_BSTR ) ) { t_Status = ConnectionSource_Association ( a_ErrorObject , a_ObjectPath , t_Key2 , t_Key1 ) ; } else { t_Status = FALSE ; } } else { t_Status = FALSE ; } } else { t_Status = FALSE ; } } else { t_Status = FALSE ; } } else { t_Status = FALSE ; } } else { t_Status = FALSE ; } delete t_ParsedObjectPath ; } return t_Status ; } BOOL ExecQueryAsyncEventObject :: NextHop_Put ( WbemSnmpErrorObject &a_ErrorObject , IWbemClassObject *a_NextHop , wchar_t *a_ObjectPath , wchar_t *a_SourceAddress , wchar_t *a_DestinationAddress , wchar_t *a_GatewayAddress , wchar_t *a_GatewaySubnetAddress , wchar_t *a_GatewaySubnetMask , ULONG a_GatewayInterfaceIndex , wchar_t *a_DestinationRouteAddress , wchar_t *a_DestinationRouteMask ) { VARIANT t_Variant ; VariantInit ( &t_Variant ) ; wchar_t *t_String1 = UnicodeStringDuplicate ( L"Hop.m_DestinationIpAddress =\"" ) ; wchar_t *t_StringDestination = a_DestinationAddress ; wchar_t *t_String2 = UnicodeStringAppend ( t_String1 , t_StringDestination ) ; delete [] t_String1 ; wchar_t *t_String3 = UnicodeStringAppend ( t_String2 , L"\",m_IpAddress = \"" ) ; wchar_t *t_StringHop = a_GatewayAddress ; wchar_t *t_String4 = UnicodeStringAppend ( t_String3 , t_StringHop ) ; wchar_t *t_String5 = UnicodeStringAppend ( t_String4 , L"\"" ) ; delete [] t_String4 ; t_Variant.vt = VT_BSTR ; t_Variant.bstrVal = SysAllocString ( t_String5 ) ; delete [] t_String5 ; HRESULT t_Result = a_NextHop->Put ( L"m_Gateway" , 0 , & t_Variant , 0 ) ; VariantClear ( &t_Variant ) ; if ( ! SUCCEEDED ( t_Result ) ) { return FALSE ; } t_Variant.vt = VT_BSTR ; t_Variant.bstrVal = SysAllocString ( a_ObjectPath ) ; t_Result = a_NextHop->Put ( L"m_Source" , 0 , & t_Variant , 0 ) ; VariantClear ( &t_Variant ) ; if ( ! SUCCEEDED ( t_Result ) ) { return FALSE ; } t_Variant.vt = VT_BSTR ; t_Variant.bstrVal = SysAllocString ( a_DestinationRouteAddress ) ; t_Result = a_NextHop->Put ( L"m_RouteAddress" , 0 , & t_Variant , 0 ) ; VariantClear ( &t_Variant ) ; if ( ! SUCCEEDED ( t_Result ) ) { return FALSE ; } t_Variant.vt = VT_BSTR ; t_Variant.bstrVal = SysAllocString ( a_DestinationRouteMask ) ; t_Result = a_NextHop->Put ( L"m_RouteMask" , 0 , & t_Variant , 0 ) ; VariantClear ( &t_Variant ) ; if ( ! SUCCEEDED ( t_Result ) ) { return FALSE ; } t_Variant.vt = VT_BSTR ; t_Variant.bstrVal = SysAllocString ( a_GatewayAddress ) ; t_Result = a_NextHop->Put ( L"m_GatewayIpAddress" , 0 , & t_Variant , 0 ) ; VariantClear ( &t_Variant ) ; if ( ! SUCCEEDED ( t_Result ) ) { return FALSE ; } t_Variant.vt = VT_BSTR ; t_Variant.bstrVal = SysAllocString ( a_GatewaySubnetMask ) ; t_Result = a_NextHop->Put ( L"m_GatewayIpSubnetMask" , 0 , & t_Variant , 0 ) ; VariantClear ( &t_Variant ) ; if ( ! SUCCEEDED ( t_Result ) ) { return FALSE ; } t_Variant.vt = VT_BSTR ; t_Variant.bstrVal = SysAllocString ( a_GatewaySubnetAddress ) ; t_Result = a_NextHop->Put ( L"m_GatewayIpSubnetAddress" , 0 , & t_Variant , 0 ) ; VariantClear ( &t_Variant ) ; if ( ! SUCCEEDED ( t_Result ) ) { return FALSE ; } t_Variant.vt = VT_I4 ; t_Variant.lVal = a_GatewayInterfaceIndex ; t_Result = a_NextHop->Put ( L"m_GatewayInterfaceIndex" , 0 , & t_Variant , 0 ) ; VariantClear ( &t_Variant ) ; if ( ! SUCCEEDED ( t_Result ) ) { return FALSE ; } return TRUE ; } BOOL ExecQueryAsyncEventObject :: NextHop_Association ( WbemSnmpErrorObject &a_ErrorObject , wchar_t *a_ObjectPath , KeyRef *a_SourceKey , KeyRef *a_DestinationKey ) { BOOL t_Status = TRUE ; wchar_t *t_SourceAddress = a_SourceKey->m_vValue.bstrVal ; wchar_t *t_DestinationAddress = a_DestinationKey->m_vValue.bstrVal ; IWbemServices *t_Server = m_Provider->GetServer () ; wchar_t *t_SourceName = GetHostNameByAddress ( t_SourceAddress ) ; if ( t_SourceAddress && t_DestinationAddress ) { SnmpIpAddressType t_SourceIpAddress ( t_SourceAddress ) ; SnmpIpAddressType t_DestinationIpAddress ( t_DestinationAddress ) ; if ( t_SourceIpAddress && t_DestinationIpAddress ) { if ( t_SourceIpAddress.GetValue () != t_DestinationIpAddress.GetValue () ) { IWbemServices *t_Proxy ; t_Status = GetProxy ( a_ErrorObject , t_Server , t_SourceName , &t_Proxy ) ; if ( t_Status ) { wchar_t *t_DestinationRouteAddress = 0 ; wchar_t *t_DestinationRouteMask = 0 ; wchar_t *t_SubnetAddress = 0 ; wchar_t *t_SubnetMask = 0 ; ULONG t_InterfaceIndex = 0 ; wchar_t *t_GatewayAddress = 0 ; wchar_t *t_GatewaySubnetAddress = 0 ; wchar_t *t_GatewaySubnetMask = 0 ; ULONG t_GatewayInterfaceIndex = 0 ; t_Status = CalculateRoute ( a_ErrorObject , t_Proxy , t_SourceIpAddress.GetValue () , t_DestinationIpAddress.GetValue () , t_SubnetAddress , t_SubnetMask , t_InterfaceIndex , t_GatewayAddress , t_GatewaySubnetAddress , t_GatewaySubnetMask , t_GatewayInterfaceIndex , t_DestinationRouteAddress , t_DestinationRouteMask ) ; if ( t_Status ) { SnmpIpAddressType t_HopDestinationType ( t_GatewayAddress ) ; if ( t_HopDestinationType.GetValue () != t_SourceIpAddress.GetValue () ) { IWbemClassObject *t_Association = NULL ; HRESULT t_Result = m_ClassObject->SpawnInstance ( 0 , & t_Association ) ; if ( t_Status = SUCCEEDED ( t_Result ) ) { t_Status = NextHop_Put ( a_ErrorObject , t_Association , a_ObjectPath , t_SourceAddress , t_DestinationAddress , t_GatewayAddress , t_GatewaySubnetAddress , t_GatewaySubnetMask , t_GatewayInterfaceIndex , t_DestinationRouteAddress , t_DestinationRouteMask ) ; if ( t_Status ) { m_NotificationHandler->Indicate ( 1 , & t_Association ) ; } } t_Association->Release () ; } else { } } delete [] t_DestinationRouteAddress ; delete [] t_DestinationRouteMask ; delete [] t_GatewayAddress ; delete [] t_SubnetAddress ; delete [] t_SubnetMask ; t_Proxy->Release () ; } } } else { t_Status = FALSE ; } } else { t_Status = FALSE ; } delete [] t_SourceName ; t_Server->Release () ; return t_Status ; } BOOL ExecQueryAsyncEventObject :: Dispatch_NextHop ( WbemSnmpErrorObject &a_ErrorObject , wchar_t *a_ObjectPath ) { BOOL t_Status = TRUE ; ParsedObjectPath *t_ParsedObjectPath ; CObjectPathParser t_ObjectPathParser ; t_Status = ! t_ObjectPathParser.Parse ( a_ObjectPath , &t_ParsedObjectPath ) ; if ( t_Status ) { if ( t_ParsedObjectPath->m_paKeys && ( t_ParsedObjectPath->m_dwNumKeys == 2 ) ) { if ( wcscmp ( t_ParsedObjectPath->m_pClass , L"Hop" ) == 0 ) { KeyRef *t_Key1 = t_ParsedObjectPath->m_paKeys [ 0 ] ; KeyRef *t_Key2 = t_ParsedObjectPath->m_paKeys [ 1 ] ; if ( t_Key1 && t_Key2 ) { if ( wcscmp ( t_Key1->m_pName , L"m_IpAddress" ) == 0 ) { if ( wcscmp ( t_Key2->m_pName , L"m_DestinationIpAddress" ) == 0 ) { if ( ( t_Key1->m_vValue.vt == VT_BSTR ) && ( t_Key2->m_vValue.vt == VT_BSTR ) ) { t_Status = NextHop_Association ( a_ErrorObject , a_ObjectPath , t_Key1 , t_Key2 ) ; } else { t_Status = FALSE ; } } else { t_Status = FALSE ; } } else if ( wcscmp ( t_Key2->m_pName , L"m_IpAddress" ) == 0 ) { if ( wcscmp ( t_Key1->m_pName , L"m_DestinationIpAddress" ) == 0 ) { if ( ( t_Key1->m_vValue.vt == VT_BSTR ) && ( t_Key2->m_vValue.vt == VT_BSTR ) ) { t_Status = NextHop_Association ( a_ErrorObject , a_ObjectPath , t_Key2 , t_Key1 ) ; } else { t_Status = FALSE ; } } else { t_Status = FALSE ; } } else { t_Status = FALSE ; } } else { t_Status = FALSE ; } } else { t_Status = FALSE ; } } else { t_Status = FALSE ; } delete t_ParsedObjectPath ; } return t_Status ; } BOOL ExecQueryAsyncEventObject :: HopToProxySystem_Association ( WbemSnmpErrorObject &a_ErrorObject , wchar_t *a_ObjectPath , KeyRef *a_SourceKey , KeyRef *a_DestinationKey ) { BOOL t_Status = TRUE ; wchar_t *t_SourceName = GetHostNameByAddress ( a_SourceKey->m_vValue.bstrVal ) ; SnmpIpAddressType t_SourceAddressType ( a_SourceKey->m_vValue.bstrVal ) ; if ( t_SourceName ) { WbemNamespacePath *t_Path = m_Provider->GetNamespacePath () ; wchar_t *t_Namespace = t_Path->GetNamespacePath () ; wchar_t *t_String1 = UnicodeStringAppend ( L"\\\\" , GetHostName () ) ; wchar_t *t_String2 = UnicodeStringAppend ( t_String1 , L"\\" ) ; delete [] t_String1 ; wchar_t *t_String3 = UnicodeStringAppend ( t_String2 , t_Namespace ) ; delete [] t_String2 ; wchar_t *t_String4 = UnicodeStringAppend ( t_String3 , L"\\" ) ; delete [] t_String3 ; wchar_t *t_String5 = UnicodeStringAppend ( t_String4 , t_SourceName ) ; delete [] t_String4 ; wchar_t *t_String6 = UnicodeStringAppend ( t_String5 , L":" ) ; delete [] t_String5 ; wchar_t *t_String7 = UnicodeStringAppend ( t_String6 , L"ProxySystem.m_Name =\"" ) ; delete [] t_String6 ; wchar_t *t_String8 = UnicodeStringAppend ( t_String7 , t_SourceName ) ; delete [] t_String7 ; wchar_t *t_String9 = UnicodeStringAppend ( t_String8 , L"\"" ) ; delete [] t_String8 ; IWbemClassObject *t_Association = NULL ; HRESULT t_Result = m_ClassObject->SpawnInstance ( 0 , & t_Association ) ; if ( t_Status = SUCCEEDED ( t_Result ) ) { VARIANT t_Variant ; VariantInit ( &t_Variant ) ; t_Variant.vt = VT_BSTR ; t_Variant.bstrVal = SysAllocString ( a_ObjectPath ) ; t_Result = t_Association->Put ( L"m_Hop" , 0 , & t_Variant , 0 ) ; VariantClear ( &t_Variant ) ; if ( t_Status = SUCCEEDED ( t_Result ) ) { t_Variant.vt = VT_BSTR ; t_Variant.bstrVal = SysAllocString ( t_String9 ) ; t_Result = t_Association->Put ( L"m_ProxySystem" , 0 , & t_Variant , 0 ) ; if ( t_Status = SUCCEEDED ( t_Result ) ) { m_NotificationHandler->Indicate ( 1 , & t_Association ) ; } } } t_Association->Release () ; delete [] t_String9 ; } delete [] t_SourceName ; return t_Status ; } BOOL ExecQueryAsyncEventObject :: Dispatch_HopToProxySystemAssoc ( WbemSnmpErrorObject &a_ErrorObject , wchar_t *a_ObjectPath ) { BOOL t_Status = TRUE ; ParsedObjectPath *t_ParsedObjectPath ; CObjectPathParser t_ObjectPathParser ; t_Status = ! t_ObjectPathParser.Parse ( a_ObjectPath , &t_ParsedObjectPath ) ; if ( t_Status ) { if ( t_ParsedObjectPath->m_paKeys && ( t_ParsedObjectPath->m_dwNumKeys == 2 ) ) { if ( wcscmp ( t_ParsedObjectPath->m_pClass , L"Hop" ) == 0 ) { KeyRef *t_Key1 = t_ParsedObjectPath->m_paKeys [ 0 ] ; KeyRef *t_Key2 = t_ParsedObjectPath->m_paKeys [ 1 ] ; if ( t_Key1 && t_Key2 ) { if ( wcscmp ( t_Key1->m_pName , L"m_IpAddress" ) == 0 ) { if ( wcscmp ( t_Key2->m_pName , L"m_DestinationIpAddress" ) == 0 ) { if ( ( t_Key1->m_vValue.vt == VT_BSTR ) && ( t_Key2->m_vValue.vt == VT_BSTR ) ) { t_Status = HopToProxySystem_Association ( a_ErrorObject , a_ObjectPath , t_Key1 , t_Key2 ) ; } else { t_Status = FALSE ; } } else { t_Status = FALSE ; } } else if ( wcscmp ( t_Key2->m_pName , L"m_IpAddress" ) == 0 ) { if ( wcscmp ( t_Key1->m_pName , L"m_DestinationIpAddress" ) == 0 ) { if ( ( t_Key1->m_vValue.vt == VT_BSTR ) && ( t_Key2->m_vValue.vt == VT_BSTR ) ) { t_Status = HopToProxySystem_Association ( a_ErrorObject , a_ObjectPath , t_Key2 , t_Key1 ) ; } else { t_Status = FALSE ; } } else { t_Status = FALSE ; } } else { t_Status = FALSE ; } } else { t_Status = FALSE ; } } else { t_Status = FALSE ; } } else { t_Status = FALSE ; } delete t_ParsedObjectPath ; } return t_Status ; } BOOL ExecQueryAsyncEventObject :: HopToInterfaceTable_Association ( WbemSnmpErrorObject &a_ErrorObject , wchar_t *a_ObjectPath , KeyRef *a_SourceKey , KeyRef *a_DestinationKey ) { BOOL t_Status = TRUE ; IWbemServices *t_Server = m_Provider->GetServer () ; IWbemClassObject *t_HopObject = NULL ; IWbemCallResult *t_ErrorObject = NULL ; CImpTraceRouteProv :: s_DefaultThreadObject->SetActive () ; HRESULT t_Result = t_Server->GetObject ( a_ObjectPath , 0 , NULL, & t_HopObject , & t_ErrorObject ) ; CImpTraceRouteProv :: s_DefaultThreadObject->SetActive ( FALSE ) ; if ( t_Status = SUCCEEDED ( t_Result ) ) { VARIANT t_Variant ; VariantInit ( &t_Variant ) ; LONG t_PropertyFlavour = 0 ; VARTYPE t_PropertyType = 0 ; ULONG t_InterfaceIndex = 0 ; HRESULT t_Result = t_HopObject->Get ( L"m_InterfaceIndex" , 0 , & t_Variant , & t_PropertyType , & t_PropertyFlavour ) ; if ( t_Status = SUCCEEDED ( t_Result ) ) { t_InterfaceIndex = t_Variant.lVal ; wchar_t *t_SourceName = GetHostNameByAddress ( a_SourceKey->m_vValue.bstrVal ) ; SnmpIpAddressType t_SourceAddressType ( a_SourceKey->m_vValue.bstrVal ) ; if ( t_SourceName ) { WbemNamespacePath *t_Path = m_Provider->GetNamespacePath () ; wchar_t *t_Namespace = t_Path->GetNamespacePath () ; wchar_t *t_String1 = UnicodeStringAppend ( L"\\\\" , GetHostName () ) ; wchar_t *t_String2 = UnicodeStringAppend ( t_String1 , L"\\" ) ; delete [] t_String1 ; wchar_t *t_String3 = UnicodeStringAppend ( t_String2 , t_Namespace ) ; delete [] t_String2 ; wchar_t *t_String4 = UnicodeStringAppend ( t_String3 , L"\\" ) ; delete [] t_String3 ; wchar_t *t_String5 = UnicodeStringAppend ( t_String4 , t_SourceName ) ; delete [] t_String4 ; wchar_t *t_String6 = UnicodeStringAppend ( t_String5 , L":" ) ; delete [] t_String5 ; wchar_t *t_String7 = UnicodeStringAppend ( t_String6 , L"MS_SNMP_RFC1213_MIB_ifTable.ifIndex =" ) ; delete [] t_String6 ; SnmpIntegerType t_InterfaceIndexType ( t_InterfaceIndex , NULL ) ; wchar_t *t_String8 = t_InterfaceIndexType.GetStringValue () ; wchar_t *t_String9 = UnicodeStringAppend ( t_String7 , t_String8 ) ; delete [] t_String7 ; delete [] t_String8 ; IWbemClassObject *t_Association = NULL ; HRESULT t_Result = m_ClassObject->SpawnInstance ( 0 , & t_Association ) ; if ( t_Status = SUCCEEDED ( t_Result ) ) { VARIANT t_Variant ; VariantInit ( &t_Variant ) ; t_Variant.vt = VT_BSTR ; t_Variant.bstrVal = SysAllocString ( a_ObjectPath ) ; t_Result = t_Association->Put ( L"m_Hop" , 0 , & t_Variant , 0 ) ; VariantClear ( &t_Variant ) ; if ( t_Status = SUCCEEDED ( t_Result ) ) { t_Variant.vt = VT_BSTR ; t_Variant.bstrVal = SysAllocString ( t_String9 ) ; t_Result = t_Association->Put ( L"m_InterfaceTable" , 0 , & t_Variant , 0 ) ; if ( t_Status = SUCCEEDED ( t_Result ) ) { m_NotificationHandler->Indicate ( 1 , & t_Association ) ; } } } t_Association->Release () ; delete [] t_String9 ; delete [] t_SourceName ; } } VariantClear ( &t_Variant ) ; t_HopObject->Release () ; t_Server->Release () ; } return t_Status ; } BOOL ExecQueryAsyncEventObject :: Dispatch_HopToInterfaceTableAssoc ( WbemSnmpErrorObject &a_ErrorObject , wchar_t *a_ObjectPath ) { BOOL t_Status = TRUE ; ParsedObjectPath *t_ParsedObjectPath ; CObjectPathParser t_ObjectPathParser ; t_Status = ! t_ObjectPathParser.Parse ( a_ObjectPath , &t_ParsedObjectPath ) ; if ( t_Status ) { if ( t_ParsedObjectPath->m_paKeys && ( t_ParsedObjectPath->m_dwNumKeys == 2 ) ) { if ( wcscmp ( t_ParsedObjectPath->m_pClass , L"Hop" ) == 0 ) { KeyRef *t_Key1 = t_ParsedObjectPath->m_paKeys [ 0 ] ; KeyRef *t_Key2 = t_ParsedObjectPath->m_paKeys [ 1 ] ; if ( t_Key1 && t_Key2 ) { if ( wcscmp ( t_Key1->m_pName , L"m_IpAddress" ) == 0 ) { if ( wcscmp ( t_Key2->m_pName , L"m_DestinationIpAddress" ) == 0 ) { if ( ( t_Key1->m_vValue.vt == VT_BSTR ) && ( t_Key2->m_vValue.vt == VT_BSTR ) ) { t_Status = HopToInterfaceTable_Association ( a_ErrorObject , a_ObjectPath , t_Key1 , t_Key2 ) ; } else { t_Status = FALSE ; } } else { t_Status = FALSE ; } } else if ( wcscmp ( t_Key2->m_pName , L"m_IpAddress" ) == 0 ) { if ( wcscmp ( t_Key1->m_pName , L"m_DestinationIpAddress" ) == 0 ) { if ( ( t_Key1->m_vValue.vt == VT_BSTR ) && ( t_Key2->m_vValue.vt == VT_BSTR ) ) { t_Status = HopToInterfaceTable_Association ( a_ErrorObject , a_ObjectPath , t_Key2 , t_Key1 ) ; } else { t_Status = FALSE ; } } else { t_Status = FALSE ; } } else { t_Status = FALSE ; } } else { t_Status = FALSE ; } } else { t_Status = FALSE ; } } else { t_Status = FALSE ; } delete t_ParsedObjectPath ; } return t_Status ; } BOOL ExecQueryAsyncEventObject :: HopToGatewayInterfaceTable_Association ( WbemSnmpErrorObject &a_ErrorObject , wchar_t *a_ObjectPath , KeyRef *a_SourceKey , KeyRef *a_DestinationKey ) { BOOL t_Status = TRUE ; IWbemServices *t_Server = m_Provider->GetServer () ; IWbemClassObject *t_HopObject = NULL ; IWbemCallResult *t_ErrorObject = NULL ; CImpTraceRouteProv :: s_DefaultThreadObject->SetActive () ; HRESULT t_Result = t_Server->GetObject ( a_ObjectPath , 0 , NULL, & t_HopObject , & t_ErrorObject ) ; CImpTraceRouteProv :: s_DefaultThreadObject->SetActive ( FALSE ) ; if ( t_Status = SUCCEEDED ( t_Result ) ) { VARIANT t_Variant ; VariantInit ( &t_Variant ) ; LONG t_PropertyFlavour = 0 ; VARTYPE t_PropertyType = 0 ; ULONG t_InterfaceIndex = 0 ; HRESULT t_Result = t_HopObject->Get ( L"m_GatewayInterfaceIndex" , 0 , & t_Variant , & t_PropertyType , & t_PropertyFlavour ) ; if ( t_Status = SUCCEEDED ( t_Result ) ) { t_InterfaceIndex = t_Variant.lVal ; wchar_t *t_SourceName = GetHostNameByAddress ( a_SourceKey->m_vValue.bstrVal ) ; SnmpIpAddressType t_SourceAddressType ( a_SourceKey->m_vValue.bstrVal ) ; if ( t_SourceName ) { WbemNamespacePath *t_Path = m_Provider->GetNamespacePath () ; wchar_t *t_Namespace = t_Path->GetNamespacePath () ; wchar_t *t_String1 = UnicodeStringAppend ( L"\\\\" , GetHostName () ) ; wchar_t *t_String2 = UnicodeStringAppend ( t_String1 , L"\\" ) ; delete [] t_String1 ; wchar_t *t_String3 = UnicodeStringAppend ( t_String2 , t_Namespace ) ; delete [] t_String2 ; wchar_t *t_String4 = UnicodeStringAppend ( t_String3 , L"\\" ) ; delete [] t_String3 ; wchar_t *t_String5 = UnicodeStringAppend ( t_String4 , t_SourceName ) ; delete [] t_String4 ; wchar_t *t_String6 = UnicodeStringAppend ( t_String5 , L":" ) ; delete [] t_String5 ; wchar_t *t_String7 = UnicodeStringAppend ( t_String6 , L"MS_SNMP_RFC1213_MIB_ifTable.ifIndex =" ) ; delete [] t_String6 ; SnmpIntegerType t_InterfaceIndexType ( t_InterfaceIndex , NULL ) ; wchar_t *t_String8 = t_InterfaceIndexType.GetStringValue () ; wchar_t *t_String9 = UnicodeStringAppend ( t_String7 , t_String8 ) ; delete [] t_String7 ; delete [] t_String8 ; IWbemClassObject *t_Association = NULL ; HRESULT t_Result = m_ClassObject->SpawnInstance ( 0 , & t_Association ) ; if ( t_Status = SUCCEEDED ( t_Result ) ) { VARIANT t_Variant ; VariantInit ( &t_Variant ) ; t_Variant.vt = VT_BSTR ; t_Variant.bstrVal = SysAllocString ( a_ObjectPath ) ; t_Result = t_Association->Put ( L"m_Hop" , 0 , & t_Variant , 0 ) ; VariantClear ( &t_Variant ) ; if ( t_Status = SUCCEEDED ( t_Result ) ) { t_Variant.vt = VT_BSTR ; t_Variant.bstrVal = SysAllocString ( t_String9 ) ; t_Result = t_Association->Put ( L"m_InterfaceTable" , 0 , & t_Variant , 0 ) ; if ( t_Status = SUCCEEDED ( t_Result ) ) { m_NotificationHandler->Indicate ( 1 , & t_Association ) ; } } } t_Association->Release () ; delete [] t_String9 ; delete [] t_SourceName ; } } VariantClear ( &t_Variant ) ; t_HopObject->Release () ; t_Server->Release () ; } return t_Status ; } BOOL ExecQueryAsyncEventObject :: Dispatch_HopToGatewayInterfaceTableAssoc ( WbemSnmpErrorObject &a_ErrorObject , wchar_t *a_ObjectPath ) { BOOL t_Status = TRUE ; ParsedObjectPath *t_ParsedObjectPath ; CObjectPathParser t_ObjectPathParser ; t_Status = ! t_ObjectPathParser.Parse ( a_ObjectPath , &t_ParsedObjectPath ) ; if ( t_Status ) { if ( t_ParsedObjectPath->m_paKeys && ( t_ParsedObjectPath->m_dwNumKeys == 2 ) ) { if ( wcscmp ( t_ParsedObjectPath->m_pClass , L"Hop" ) == 0 ) { KeyRef *t_Key1 = t_ParsedObjectPath->m_paKeys [ 0 ] ; KeyRef *t_Key2 = t_ParsedObjectPath->m_paKeys [ 1 ] ; if ( t_Key1 && t_Key2 ) { if ( wcscmp ( t_Key1->m_pName , L"m_IpAddress" ) == 0 ) { if ( wcscmp ( t_Key2->m_pName , L"m_DestinationIpAddress" ) == 0 ) { if ( ( t_Key1->m_vValue.vt == VT_BSTR ) && ( t_Key2->m_vValue.vt == VT_BSTR ) ) { t_Status = HopToGatewayInterfaceTable_Association ( a_ErrorObject , a_ObjectPath , t_Key1 , t_Key2 ) ; } else { t_Status = FALSE ; } } else { t_Status = FALSE ; } } else if ( wcscmp ( t_Key2->m_pName , L"m_IpAddress" ) == 0 ) { if ( wcscmp ( t_Key1->m_pName , L"m_DestinationIpAddress" ) == 0 ) { if ( ( t_Key1->m_vValue.vt == VT_BSTR ) && ( t_Key2->m_vValue.vt == VT_BSTR ) ) { t_Status = HopToGatewayInterfaceTable_Association ( a_ErrorObject , a_ObjectPath , t_Key2 , t_Key1 ) ; } else { t_Status = FALSE ; } } else { t_Status = FALSE ; } } else { t_Status = FALSE ; } } else { t_Status = FALSE ; } } else { t_Status = FALSE ; } } else { t_Status = FALSE ; } delete t_ParsedObjectPath ; } return t_Status ; } BOOL ExecQueryAsyncEventObject :: ConnectionDestination_Put ( WbemSnmpErrorObject &a_ErrorObject , IWbemClassObject *a_ConnectionDestination , wchar_t *a_ObjectPath , wchar_t *a_SourceAddress , wchar_t *a_DestinationAddress , wchar_t *a_GatewayAddress , wchar_t *a_GatewaySubnetAddress , wchar_t *a_GatewaySubnetMask , ULONG a_GatewayInterfaceIndex , wchar_t *a_DestinationRouteAddress , wchar_t *a_DestinationRouteMask ) { VARIANT t_Variant ; VariantInit ( &t_Variant ) ; wchar_t *t_DestinationName = GetHostNameByAddress ( a_DestinationAddress ) ; if ( t_DestinationName ) { WbemNamespacePath *t_Path = m_Provider->GetNamespacePath () ; wchar_t *t_Namespace = t_Path->GetNamespacePath () ; wchar_t *t_String1 = UnicodeStringAppend ( L"\\\\" , GetHostName () ) ; wchar_t *t_String2 = UnicodeStringAppend ( t_String1 , L"\\" ) ; delete [] t_String1 ; wchar_t *t_String3 = UnicodeStringAppend ( t_String2 , t_Namespace ) ; delete [] t_String2 ; wchar_t *t_String4 = UnicodeStringAppend ( t_String3 , L"\\" ) ; delete [] t_String3 ; wchar_t *t_String5 = UnicodeStringAppend ( t_String4 , t_DestinationName ) ; delete [] t_String4 ; wchar_t *t_String6 = UnicodeStringAppend ( t_String5 , L":" ) ; delete [] t_String5 ; wchar_t *t_String7 = UnicodeStringAppend ( t_String6 , L"ProxySystem.m_Name =\"" ) ; delete [] t_String6 ; wchar_t *t_String8 = UnicodeStringAppend ( t_String7 , t_DestinationName ) ; delete [] t_String7 ; wchar_t *t_String9 = UnicodeStringAppend ( t_String8 , L"\"" ) ; delete [] t_String8 ; t_Variant.vt = VT_BSTR ; t_Variant.bstrVal = SysAllocString ( t_String9 ) ; delete [] t_String9 ; HRESULT t_Result = a_ConnectionDestination->Put ( L"m_ProxySystem" , 0 , & t_Variant , 0 ) ; VariantClear ( &t_Variant ) ; if ( ! SUCCEEDED ( t_Result ) ) { return FALSE ; } } else { return FALSE ; } t_Variant.vt = VT_BSTR ; t_Variant.bstrVal = SysAllocString ( a_ObjectPath ) ; HRESULT t_Result = a_ConnectionDestination->Put ( L"m_Hop" , 0 , & t_Variant , 0 ) ; VariantClear ( &t_Variant ) ; if ( ! SUCCEEDED ( t_Result ) ) { return FALSE ; } t_Variant.vt = VT_BSTR ; t_Variant.bstrVal = SysAllocString ( a_DestinationRouteAddress ) ; t_Result = a_ConnectionDestination->Put ( L"m_RouteAddress" , 0 , & t_Variant , 0 ) ; VariantClear ( &t_Variant ) ; if ( ! SUCCEEDED ( t_Result ) ) { return FALSE ; } t_Variant.vt = VT_BSTR ; t_Variant.bstrVal = SysAllocString ( a_DestinationRouteMask ) ; t_Result = a_ConnectionDestination->Put ( L"m_RouteMask" , 0 , & t_Variant , 0 ) ; VariantClear ( &t_Variant ) ; if ( ! SUCCEEDED ( t_Result ) ) { return FALSE ; } t_Variant.vt = VT_BSTR ; t_Variant.bstrVal = SysAllocString ( a_GatewayAddress ) ; t_Result = a_ConnectionDestination->Put ( L"m_GatewayIpAddress" , 0 , & t_Variant , 0 ) ; VariantClear ( &t_Variant ) ; if ( ! SUCCEEDED ( t_Result ) ) { return FALSE ; } t_Variant.vt = VT_BSTR ; t_Variant.bstrVal = SysAllocString ( a_GatewaySubnetMask ) ; t_Result = a_ConnectionDestination->Put ( L"m_GatewayIpSubnetMask" , 0 , & t_Variant , 0 ) ; VariantClear ( &t_Variant ) ; if ( ! SUCCEEDED ( t_Result ) ) { return FALSE ; } t_Variant.vt = VT_BSTR ; t_Variant.bstrVal = SysAllocString ( a_GatewaySubnetAddress ) ; t_Result = a_ConnectionDestination->Put ( L"m_GatewayIpSubnetAddress" , 0 , & t_Variant , 0 ) ; VariantClear ( &t_Variant ) ; if ( ! SUCCEEDED ( t_Result ) ) { return FALSE ; } t_Variant.vt = VT_I4 ; t_Variant.lVal = a_GatewayInterfaceIndex ; t_Result = a_ConnectionDestination->Put ( L"m_GatewayInterfaceIndex" , 0 , & t_Variant , 0 ) ; VariantClear ( &t_Variant ) ; if ( ! SUCCEEDED ( t_Result ) ) { return FALSE ; } return TRUE ; } BOOL ExecQueryAsyncEventObject :: ConnectionDestination_Association ( WbemSnmpErrorObject &a_ErrorObject , wchar_t *a_ObjectPath , KeyRef *a_SourceKey , KeyRef *a_DestinationKey ) { BOOL t_Status = TRUE ; wchar_t *t_SourceAddress = a_SourceKey->m_vValue.bstrVal ; wchar_t *t_DestinationAddress = a_DestinationKey->m_vValue.bstrVal ; IWbemServices *t_Server = m_Provider->GetServer () ; wchar_t *t_SourceName = GetHostNameByAddress ( t_SourceAddress ) ; if ( t_SourceAddress && t_DestinationAddress ) { SnmpIpAddressType t_SourceIpAddress ( t_SourceAddress ) ; SnmpIpAddressType t_DestinationIpAddress ( t_DestinationAddress ) ; if ( t_SourceIpAddress && t_DestinationIpAddress ) { if ( t_SourceIpAddress.GetValue () != t_DestinationIpAddress.GetValue () ) { IWbemServices *t_Proxy ; t_Status = GetProxy ( a_ErrorObject , t_Server , t_SourceName , &t_Proxy ) ; if ( t_Status ) { wchar_t *t_DestinationRouteAddress = 0 ; wchar_t *t_DestinationRouteMask = 0 ; wchar_t *t_SubnetAddress = 0 ; wchar_t *t_SubnetMask = 0 ; ULONG t_InterfaceIndex = 0 ; wchar_t *t_GatewayAddress = 0 ; wchar_t *t_GatewaySubnetAddress = 0 ; wchar_t *t_GatewaySubnetMask = 0 ; ULONG t_GatewayInterfaceIndex = 0 ; t_Status = CalculateRoute ( a_ErrorObject , t_Proxy , t_SourceIpAddress.GetValue () , t_DestinationIpAddress.GetValue () , t_SubnetAddress , t_SubnetMask , t_InterfaceIndex , t_GatewayAddress , t_GatewaySubnetAddress , t_GatewaySubnetMask , t_GatewayInterfaceIndex , t_DestinationRouteAddress , t_DestinationRouteMask ) ; if ( t_Status ) { SnmpIpAddressType t_HopDestinationType ( t_GatewayAddress ) ; if ( t_HopDestinationType.GetValue () == t_SourceIpAddress.GetValue () ) { SnmpIpAddressType t_HopDestinationType ( t_GatewayAddress ) ; SnmpIpAddressType t_HopDestinationSubnetType ( t_GatewaySubnetAddress ) ; SnmpIpAddressType t_HopDestinationSubnetMaskType ( t_GatewaySubnetMask ) ; SnmpIpAddressType t_DestinationSubnetType ( t_DestinationIpAddress.GetValue () & t_HopDestinationSubnetMaskType.GetValue () ) ; if ( t_DestinationSubnetType.GetValue () == t_HopDestinationSubnetType.GetValue () ) { IWbemClassObject *t_Association = NULL ; HRESULT t_Result = m_ClassObject->SpawnInstance ( 0 , & t_Association ) ; if ( t_Status = SUCCEEDED ( t_Result ) ) { t_Status = ConnectionDestination_Put ( a_ErrorObject , t_Association , a_ObjectPath , t_SourceAddress , t_DestinationAddress , t_GatewayAddress , t_GatewaySubnetAddress , t_GatewaySubnetMask , t_GatewayInterfaceIndex , t_DestinationRouteAddress , t_DestinationRouteMask ) ; if ( t_Status ) { m_NotificationHandler->Indicate ( 1 , & t_Association ) ; } } else { t_Status = FALSE ; } t_Association->Release () ; } } else { } } delete [] t_DestinationRouteAddress ; delete [] t_DestinationRouteMask ; delete [] t_GatewayAddress ; delete [] t_SubnetAddress ; delete [] t_SubnetMask ; t_Proxy->Release () ; } } } else { t_Status = FALSE ; } } else { t_Status = FALSE ; } delete [] t_SourceName ; t_Server->Release () ; return t_Status ; } BOOL ExecQueryAsyncEventObject :: Dispatch_ConnectionDestination ( WbemSnmpErrorObject &a_ErrorObject , wchar_t *a_ObjectPath ) { BOOL t_Status = TRUE ; ParsedObjectPath *t_ParsedObjectPath ; CObjectPathParser t_ObjectPathParser ; t_Status = ! t_ObjectPathParser.Parse ( a_ObjectPath , &t_ParsedObjectPath ) ; if ( t_Status ) { if ( t_ParsedObjectPath->m_paKeys && ( t_ParsedObjectPath->m_dwNumKeys == 2 ) ) { if ( wcscmp ( t_ParsedObjectPath->m_pClass , L"Hop" ) == 0 ) { KeyRef *t_Key1 = t_ParsedObjectPath->m_paKeys [ 0 ] ; KeyRef *t_Key2 = t_ParsedObjectPath->m_paKeys [ 1 ] ; if ( t_Key1 && t_Key2 ) { if ( wcscmp ( t_Key1->m_pName , L"m_IpAddress" ) == 0 ) { if ( wcscmp ( t_Key2->m_pName , L"m_DestinationIpAddress" ) == 0 ) { if ( ( t_Key1->m_vValue.vt == VT_BSTR ) && ( t_Key2->m_vValue.vt == VT_BSTR ) ) { t_Status = ConnectionDestination_Association ( a_ErrorObject , a_ObjectPath , t_Key1 , t_Key2 ) ; } else { t_Status = FALSE ; } } else { t_Status = FALSE ; } } else if ( wcscmp ( t_Key2->m_pName , L"m_IpAddress" ) == 0 ) { if ( wcscmp ( t_Key1->m_pName , L"m_DestinationIpAddress" ) == 0 ) { if ( ( t_Key1->m_vValue.vt == VT_BSTR ) && ( t_Key2->m_vValue.vt == VT_BSTR ) ) { t_Status = ConnectionDestination_Association ( a_ErrorObject , a_ObjectPath , t_Key2 , t_Key1 ) ; } else { t_Status = FALSE ; } } else { t_Status = FALSE ; } } else { t_Status = FALSE ; } } else { t_Status = FALSE ; } } else { t_Status = FALSE ; } } else { t_Status = FALSE ; } delete t_ParsedObjectPath ; } return t_Status ; } BOOL ExecQueryAsyncEventObject :: HopToSubnetwork_Association ( WbemSnmpErrorObject &a_ErrorObject , wchar_t *a_ObjectPath , KeyRef *a_SourceKey , KeyRef *a_DestinationKey ) { BOOL t_Status = TRUE ; IWbemServices *t_Server = m_Provider->GetServer () ; IWbemClassObject *t_HopObject = NULL ; IWbemCallResult *t_ErrorObject = NULL ; CImpTraceRouteProv :: s_DefaultThreadObject->SetActive () ; HRESULT t_Result = t_Server->GetObject ( a_ObjectPath , 0 , NULL, & t_HopObject , & t_ErrorObject ) ; CImpTraceRouteProv :: s_DefaultThreadObject->SetActive ( FALSE ) ; if ( t_Status = SUCCEEDED ( t_Result ) ) { VARIANT t_Variant ; VariantInit ( &t_Variant ) ; LONG t_PropertyFlavour = 0 ; VARTYPE t_PropertyType = 0 ; HRESULT t_Result = t_HopObject->Get ( L"m_IpSubnetAddress" , 0 , & t_Variant , & t_PropertyType , & t_PropertyFlavour ) ; if ( t_Status = SUCCEEDED ( t_Result ) ) { wchar_t *t_SubnetAddress = UnicodeStringDuplicate ( t_Variant.bstrVal ) ; IWbemClassObject *t_Association = NULL ; HRESULT t_Result = m_ClassObject->SpawnInstance ( 0 , & t_Association ) ; if ( t_Status = SUCCEEDED ( t_Result ) ) { VARIANT t_Variant ; VariantInit ( &t_Variant ) ; t_Variant.vt = VT_BSTR ; t_Variant.bstrVal = SysAllocString ( a_ObjectPath ) ; t_Result = t_Association->Put ( L"m_Hop" , 0 , & t_Variant , 0 ) ; VariantClear ( &t_Variant ) ; if ( t_Status = SUCCEEDED ( t_Result ) ) { wchar_t *t_String1 = UnicodeStringAppend ( L"Subnetwork.m_IpSubnetAddress=\"" , t_SubnetAddress ) ; wchar_t *t_String2 = UnicodeStringAppend ( t_String1 , L"\"" ) ; delete [] t_String1 ; t_Variant.vt = VT_BSTR ; t_Variant.bstrVal = SysAllocString ( t_String2 ) ; delete t_String2 ; t_Result = t_Association->Put ( L"m_Subnetwork" , 0 , & t_Variant , 0 ) ; if ( t_Status = SUCCEEDED ( t_Result ) ) { m_NotificationHandler->Indicate ( 1 , & t_Association ) ; } VariantClear ( & t_Variant ) ; } t_Association->Release () ; } } VariantClear ( &t_Variant ) ; t_HopObject->Release () ; t_Server->Release () ; } return t_Status ; } BOOL ExecQueryAsyncEventObject :: Dispatch_HopToSubnetworkAssoc ( WbemSnmpErrorObject &a_ErrorObject , wchar_t *a_ObjectPath ) { BOOL t_Status = TRUE ; ParsedObjectPath *t_ParsedObjectPath ; CObjectPathParser t_ObjectPathParser ; t_Status = ! t_ObjectPathParser.Parse ( a_ObjectPath , &t_ParsedObjectPath ) ; if ( t_Status ) { if ( t_ParsedObjectPath->m_paKeys && ( t_ParsedObjectPath->m_dwNumKeys == 2 ) ) { if ( wcscmp ( t_ParsedObjectPath->m_pClass , L"Hop" ) == 0 ) { KeyRef *t_Key1 = t_ParsedObjectPath->m_paKeys [ 0 ] ; KeyRef *t_Key2 = t_ParsedObjectPath->m_paKeys [ 1 ] ; if ( t_Key1 && t_Key2 ) { if ( wcscmp ( t_Key1->m_pName , L"m_IpAddress" ) == 0 ) { if ( wcscmp ( t_Key2->m_pName , L"m_DestinationIpAddress" ) == 0 ) { if ( ( t_Key1->m_vValue.vt == VT_BSTR ) && ( t_Key2->m_vValue.vt == VT_BSTR ) ) { t_Status = HopToSubnetwork_Association ( a_ErrorObject , a_ObjectPath , t_Key1 , t_Key2 ) ; } else { t_Status = FALSE ; } } else { t_Status = FALSE ; } } else if ( wcscmp ( t_Key2->m_pName , L"m_IpAddress" ) == 0 ) { if ( wcscmp ( t_Key1->m_pName , L"m_DestinationIpAddress" ) == 0 ) { if ( ( t_Key1->m_vValue.vt == VT_BSTR ) && ( t_Key2->m_vValue.vt == VT_BSTR ) ) { t_Status = HopToSubnetwork_Association ( a_ErrorObject , a_ObjectPath , t_Key2 , t_Key1 ) ; } else { t_Status = FALSE ; } } else { t_Status = FALSE ; } } else { t_Status = FALSE ; } } else { t_Status = FALSE ; } } else { t_Status = FALSE ; } } else { t_Status = FALSE ; } delete t_ParsedObjectPath ; } return t_Status ; } BOOL ExecQueryAsyncEventObject :: HopToGatewaySubnetwork_Association ( WbemSnmpErrorObject &a_ErrorObject , wchar_t *a_ObjectPath , KeyRef *a_SourceKey , KeyRef *a_DestinationKey ) { BOOL t_Status = TRUE ; IWbemServices *t_Server = m_Provider->GetServer () ; IWbemClassObject *t_HopObject = NULL ; IWbemCallResult *t_ErrorObject = NULL ; CImpTraceRouteProv :: s_DefaultThreadObject->SetActive () ; HRESULT t_Result = t_Server->GetObject ( a_ObjectPath , 0 , NULL, & t_HopObject , & t_ErrorObject ) ; CImpTraceRouteProv :: s_DefaultThreadObject->SetActive ( FALSE ) ; if ( t_Status = SUCCEEDED ( t_Result ) ) { VARIANT t_Variant ; VariantInit ( &t_Variant ) ; LONG t_PropertyFlavour = 0 ; VARTYPE t_PropertyType = 0 ; HRESULT t_Result = t_HopObject->Get ( L"m_GatewayIpSubnetAddress" , 0 , & t_Variant , & t_PropertyType , & t_PropertyFlavour ) ; if ( t_Status = SUCCEEDED ( t_Result ) ) { wchar_t *t_SubnetAddress = UnicodeStringDuplicate ( t_Variant.bstrVal ) ; IWbemClassObject *t_Association = NULL ; HRESULT t_Result = m_ClassObject->SpawnInstance ( 0 , & t_Association ) ; if ( t_Status = SUCCEEDED ( t_Result ) ) { VARIANT t_Variant ; VariantInit ( &t_Variant ) ; t_Variant.vt = VT_BSTR ; t_Variant.bstrVal = SysAllocString ( a_ObjectPath ) ; t_Result = t_Association->Put ( L"m_Hop" , 0 , & t_Variant , 0 ) ; VariantClear ( &t_Variant ) ; if ( t_Status = SUCCEEDED ( t_Result ) ) { wchar_t *t_String1 = UnicodeStringAppend ( L"Subnetwork.m_IpSubnetAddress=\"" , t_SubnetAddress ) ; wchar_t *t_String2 = UnicodeStringAppend ( t_String1 , L"\"" ) ; delete [] t_String1 ; t_Variant.vt = VT_BSTR ; t_Variant.bstrVal = SysAllocString ( t_String2 ) ; delete t_String2 ; t_Result = t_Association->Put ( L"m_Subnetwork" , 0 , & t_Variant , 0 ) ; if ( t_Status = SUCCEEDED ( t_Result ) ) { m_NotificationHandler->Indicate ( 1 , & t_Association ) ; } VariantClear ( & t_Variant ) ; } t_Association->Release () ; } } VariantClear ( &t_Variant ) ; t_HopObject->Release () ; t_Server->Release () ; } return t_Status ; } BOOL ExecQueryAsyncEventObject :: Dispatch_HopToGatewaySubnetworkAssoc ( WbemSnmpErrorObject &a_ErrorObject , wchar_t *a_ObjectPath ) { BOOL t_Status = TRUE ; ParsedObjectPath *t_ParsedObjectPath ; CObjectPathParser t_ObjectPathParser ; t_Status = ! t_ObjectPathParser.Parse ( a_ObjectPath , &t_ParsedObjectPath ) ; if ( t_Status ) { if ( t_ParsedObjectPath->m_paKeys && ( t_ParsedObjectPath->m_dwNumKeys == 2 ) ) { if ( wcscmp ( t_ParsedObjectPath->m_pClass , L"Hop" ) == 0 ) { KeyRef *t_Key1 = t_ParsedObjectPath->m_paKeys [ 0 ] ; KeyRef *t_Key2 = t_ParsedObjectPath->m_paKeys [ 1 ] ; if ( t_Key1 && t_Key2 ) { if ( wcscmp ( t_Key1->m_pName , L"m_IpAddress" ) == 0 ) { if ( wcscmp ( t_Key2->m_pName , L"m_DestinationIpAddress" ) == 0 ) { if ( ( t_Key1->m_vValue.vt == VT_BSTR ) && ( t_Key2->m_vValue.vt == VT_BSTR ) ) { t_Status = HopToGatewaySubnetwork_Association ( a_ErrorObject , a_ObjectPath , t_Key1 , t_Key2 ) ; } else { t_Status = FALSE ; } } else { t_Status = FALSE ; } } else if ( wcscmp ( t_Key2->m_pName , L"m_IpAddress" ) == 0 ) { if ( wcscmp ( t_Key1->m_pName , L"m_DestinationIpAddress" ) == 0 ) { if ( ( t_Key1->m_vValue.vt == VT_BSTR ) && ( t_Key2->m_vValue.vt == VT_BSTR ) ) { t_Status = HopToGatewaySubnetwork_Association ( a_ErrorObject , a_ObjectPath , t_Key2 , t_Key1 ) ; } else { t_Status = FALSE ; } } else { t_Status = FALSE ; } } else { t_Status = FALSE ; } } else { t_Status = FALSE ; } } else { t_Status = FALSE ; } } else { t_Status = FALSE ; } delete t_ParsedObjectPath ; } return t_Status ; } BOOL ExecQueryAsyncEventObject :: All_Hop_Association ( WbemSnmpErrorObject &a_ErrorObject , wchar_t *a_ObjectPath , KeyRef *a_SourceKey , KeyRef *a_DestinationKey ) { BOOL t_Status = TRUE ; IWbemServices *t_Server = m_Provider->GetServer () ; IWbemClassObject *t_HopObject = NULL ; IWbemCallResult *t_ErrorObject = NULL ; CImpTraceRouteProv :: s_DefaultThreadObject->SetActive () ; HRESULT t_Result = t_Server->GetObject ( a_ObjectPath , 0 , NULL, & t_HopObject , & t_ErrorObject ) ; CImpTraceRouteProv :: s_DefaultThreadObject->SetActive ( FALSE ) ; if ( t_Status = SUCCEEDED ( t_Result ) ) { wchar_t *t_SourceAddress = a_SourceKey->m_vValue.bstrVal ; wchar_t *t_DestinationAddress = a_DestinationKey->m_vValue.bstrVal ; wchar_t *t_SourceName = GetHostNameByAddress ( t_SourceAddress ) ; if ( t_SourceAddress && t_DestinationAddress ) { SnmpIpAddressType t_SourceIpAddress ( t_SourceAddress ) ; SnmpIpAddressType t_DestinationIpAddress ( t_DestinationAddress ) ; if ( t_SourceIpAddress && t_DestinationIpAddress ) { SnmpIpAddressType t_SourceIpAddress ( t_SourceAddress ) ; SnmpIpAddressType t_DestinationIpAddress ( t_DestinationAddress ) ; if ( t_SourceIpAddress && t_DestinationIpAddress ) { IWbemServices *t_Server = m_Provider->GetServer () ; IWbemServices *t_Proxy ; t_Status = GetProxy ( a_ErrorObject , t_Server , t_SourceName , &t_Proxy ) ; if ( t_Status ) { wchar_t *t_DestinationRouteAddress = 0 ; wchar_t *t_DestinationRouteMask = 0 ; wchar_t *t_SubnetAddress = 0 ; wchar_t *t_SubnetMask = 0 ; ULONG t_InterfaceIndex = 0 ; wchar_t *t_GatewayAddress = 0 ; wchar_t *t_GatewaySubnetAddress = 0 ; wchar_t *t_GatewaySubnetMask = 0 ; ULONG t_GatewayInterfaceIndex = 0 ; t_Status = CalculateRoute ( a_ErrorObject , t_Proxy , t_SourceIpAddress.GetValue () , t_DestinationIpAddress.GetValue () , t_SubnetAddress , t_SubnetMask , t_InterfaceIndex , t_GatewayAddress , t_GatewaySubnetAddress , t_GatewaySubnetMask , t_GatewayInterfaceIndex , t_DestinationRouteAddress , t_DestinationRouteMask ) ; if ( t_Status ) { t_Status = All_NextHop_Association ( a_ErrorObject , a_ObjectPath , a_SourceKey , a_DestinationKey , t_Proxy , t_HopObject , t_SourceName , t_SourceAddress , t_DestinationAddress , t_SourceIpAddress.GetValue () , t_DestinationIpAddress.GetValue () , t_SubnetAddress , t_SubnetMask , t_InterfaceIndex , t_GatewayAddress , t_GatewaySubnetAddress , t_GatewaySubnetMask , t_GatewayInterfaceIndex , t_DestinationRouteAddress , t_DestinationRouteMask ) ; t_Status = t_Status && All_ConnectionDestination_Association ( a_ErrorObject , a_ObjectPath , a_SourceKey , a_DestinationKey , t_Proxy , t_HopObject , t_SourceName , t_SourceAddress , t_DestinationAddress , t_SourceIpAddress.GetValue () , t_DestinationIpAddress.GetValue () , t_SubnetAddress , t_SubnetMask , t_InterfaceIndex , t_GatewayAddress , t_GatewaySubnetAddress , t_GatewaySubnetMask , t_GatewayInterfaceIndex , t_DestinationRouteAddress , t_DestinationRouteMask ) ; t_Status = t_Status && All_HopToProxySystem_Association ( a_ErrorObject , a_ObjectPath , a_SourceKey , a_DestinationKey , t_Proxy , t_HopObject , t_SourceName , t_SourceAddress , t_DestinationAddress , t_SourceIpAddress.GetValue () , t_DestinationIpAddress.GetValue () , t_SubnetAddress , t_SubnetMask , t_InterfaceIndex , t_GatewayAddress , t_GatewaySubnetAddress , t_GatewaySubnetMask , t_GatewayInterfaceIndex , t_DestinationRouteAddress , t_DestinationRouteMask ) ; t_Status = t_Status && All_HopToInterfaceTable_Association ( a_ErrorObject , a_ObjectPath , a_SourceKey , a_DestinationKey , t_Proxy , t_HopObject , t_SourceName , t_SourceAddress , t_DestinationAddress , t_SourceIpAddress.GetValue () , t_DestinationIpAddress.GetValue () , t_SubnetAddress , t_SubnetMask , t_InterfaceIndex , t_GatewayAddress , t_GatewaySubnetAddress , t_GatewaySubnetMask , t_GatewayInterfaceIndex , t_DestinationRouteAddress , t_DestinationRouteMask ) ; t_Status = t_Status && All_HopToGatewayInterfaceTable_Association ( a_ErrorObject , a_ObjectPath , a_SourceKey , a_DestinationKey , t_Proxy , t_HopObject , t_SourceName , t_SourceAddress , t_DestinationAddress , t_SourceIpAddress.GetValue () , t_DestinationIpAddress.GetValue () , t_SubnetAddress , t_SubnetMask , t_InterfaceIndex , t_GatewayAddress , t_GatewaySubnetAddress , t_GatewaySubnetMask , t_GatewayInterfaceIndex , t_DestinationRouteAddress , t_DestinationRouteMask ) ; t_Status = t_Status && All_HopToSubnetwork_Association ( a_ErrorObject , a_ObjectPath , a_SourceKey , a_DestinationKey , t_Proxy , t_HopObject , t_SourceName , t_SourceAddress , t_DestinationAddress , t_SourceIpAddress.GetValue () , t_DestinationIpAddress.GetValue () , t_SubnetAddress , t_SubnetMask , t_InterfaceIndex , t_GatewayAddress , t_GatewaySubnetAddress , t_GatewaySubnetMask , t_GatewayInterfaceIndex , t_DestinationRouteAddress , t_DestinationRouteMask ) ; t_Status = t_Status && All_HopToGatewaySubnetwork_Association ( a_ErrorObject , a_ObjectPath , a_SourceKey , a_DestinationKey , t_Proxy , t_HopObject , t_SourceName , t_SourceAddress , t_DestinationAddress , t_SourceIpAddress.GetValue () , t_DestinationIpAddress.GetValue () , t_SubnetAddress , t_SubnetMask , t_InterfaceIndex , t_GatewayAddress , t_GatewaySubnetAddress , t_GatewaySubnetMask , t_GatewayInterfaceIndex , t_DestinationRouteAddress , t_DestinationRouteMask ) ; } } } } } t_HopObject->Release () ; t_Server->Release () ; } return t_Status ; } BOOL ExecQueryAsyncEventObject :: Dispatch_AllAssoc ( WbemSnmpErrorObject &a_ErrorObject , wchar_t *a_ObjectPath ) { BOOL t_Status = TRUE ; ParsedObjectPath *t_ParsedObjectPath ; CObjectPathParser t_ObjectPathParser ; t_Status = ! t_ObjectPathParser.Parse ( a_ObjectPath , &t_ParsedObjectPath ) ; if ( t_Status ) { if ( t_ParsedObjectPath->m_paKeys && ( t_ParsedObjectPath->m_dwNumKeys == 2 ) ) { if ( wcscmp ( t_ParsedObjectPath->m_pClass , L"Connection" ) == 0 ) { KeyRef *t_Key1 = t_ParsedObjectPath->m_paKeys [ 0 ] ; KeyRef *t_Key2 = t_ParsedObjectPath->m_paKeys [ 1 ] ; if ( t_Key1 && t_Key2 ) { if ( wcscmp ( t_Key1->m_pName , L"m_Source" ) == 0 ) { if ( wcscmp ( t_Key2->m_pName , L"m_Destination" ) == 0 ) { if ( ( t_Key1->m_vValue.vt == VT_BSTR ) && ( t_Key2->m_vValue.vt == VT_BSTR ) ) { t_Status = ConnectionSource_Association ( a_ErrorObject , a_ObjectPath , t_Key1 , t_Key2 ) ; } else { t_Status = FALSE ; } } else { t_Status = FALSE ; } } else if ( wcscmp ( t_Key2->m_pName , L"m_Source" ) == 0 ) { if ( wcscmp ( t_Key1->m_pName , L"m_Destination" ) == 0 ) { if ( ( t_Key1->m_vValue.vt == VT_BSTR ) && ( t_Key2->m_vValue.vt == VT_BSTR ) ) { t_Status = ConnectionSource_Association ( a_ErrorObject , a_ObjectPath , t_Key2 , t_Key1 ) ; } else { t_Status = FALSE ; } } else { t_Status = FALSE ; } } else { t_Status = FALSE ; } } else { t_Status = FALSE ; } } else if ( wcscmp ( t_ParsedObjectPath->m_pClass , L"Hop" ) == 0 ) { KeyRef *t_Key1 = t_ParsedObjectPath->m_paKeys [ 0 ] ; KeyRef *t_Key2 = t_ParsedObjectPath->m_paKeys [ 1 ] ; if ( t_Key1 && t_Key2 ) { if ( wcscmp ( t_Key1->m_pName , L"m_IpAddress" ) == 0 ) { if ( wcscmp ( t_Key2->m_pName , L"m_DestinationIpAddress" ) == 0 ) { if ( ( t_Key1->m_vValue.vt == VT_BSTR ) && ( t_Key2->m_vValue.vt == VT_BSTR ) ) { t_Status = All_Hop_Association ( a_ErrorObject , a_ObjectPath , t_Key1 , t_Key2 ) ; } else { t_Status = FALSE ; } } else { t_Status = FALSE ; } } else if ( wcscmp ( t_Key2->m_pName , L"m_IpAddress" ) == 0 ) { if ( wcscmp ( t_Key1->m_pName , L"m_DestinationIpAddress" ) == 0 ) { if ( ( t_Key1->m_vValue.vt == VT_BSTR ) && ( t_Key2->m_vValue.vt == VT_BSTR ) ) { t_Status = All_Hop_Association ( a_ErrorObject , a_ObjectPath , t_Key2 , t_Key1 ) ; } else { t_Status = FALSE ; } } else { t_Status = FALSE ; } } else { t_Status = FALSE ; } } else { t_Status = FALSE ; } } else { t_Status = FALSE ; } } else { t_Status = FALSE ; } delete t_ParsedObjectPath ; } return t_Status ; } BOOL ExecQueryAsyncEventObject :: All_NextHop_Association ( WbemSnmpErrorObject &a_ErrorObject , wchar_t *a_ObjectPath , KeyRef *a_SourceKey , KeyRef *DestinationKey , IWbemServices *a_Proxy , IWbemClassObject *a_HopObject , wchar_t *a_SourceName , wchar_t *a_SourceAddress , wchar_t *a_DestinationAddress , ULONG a_SourceIpAddress , ULONG a_DestinationIpAddress , wchar_t *a_SubnetAddress , wchar_t *a_SubnetMask , ULONG a_InterfaceIndex , wchar_t *a_GatewayAddress , wchar_t *a_GatewaySubnetAddress , wchar_t *a_GatewaySubnetMask , ULONG a_GatewayInterfaceIndex , wchar_t *a_DestinationRouteAddress , wchar_t *a_DestinationRouteMask ) { BOOL t_Status = TRUE ; SnmpIpAddressType t_HopDestinationType ( a_GatewayAddress ) ; if ( t_HopDestinationType.GetValue () != a_SourceIpAddress ) { t_Status = GetClassObject ( L"NextHop" ) ; if ( t_Status ) { IWbemClassObject *t_Association = NULL ; HRESULT t_Result = m_ClassObject->SpawnInstance ( 0 , & t_Association ) ; if ( t_Status = SUCCEEDED ( t_Result ) ) { t_Status = NextHop_Put ( a_ErrorObject , t_Association , a_ObjectPath , a_SourceAddress , a_DestinationAddress , a_GatewayAddress , a_GatewaySubnetAddress , a_GatewaySubnetMask , a_GatewayInterfaceIndex , a_DestinationRouteAddress , a_DestinationRouteMask ) ; if ( t_Status ) { m_NotificationHandler->Indicate ( 1 , & t_Association ) ; } } t_Association->Release () ; } } return t_Status ; } BOOL ExecQueryAsyncEventObject :: All_ConnectionDestination_Association ( WbemSnmpErrorObject &a_ErrorObject , wchar_t *a_ObjectPath , KeyRef *a_SourceKey , KeyRef *DestinationKey , IWbemServices *a_Proxy , IWbemClassObject *a_HopObject , wchar_t *a_SourceName , wchar_t *a_SourceAddress , wchar_t *a_DestinationAddress , ULONG a_SourceIpAddress , ULONG a_DestinationIpAddress , wchar_t *a_SubnetAddress , wchar_t *a_SubnetMask , ULONG a_InterfaceIndex , wchar_t *a_GatewayAddress , wchar_t *a_GatewaySubnetAddress , wchar_t *a_GatewaySubnetMask , ULONG a_GatewayInterfaceIndex , wchar_t *a_DestinationRouteAddress , wchar_t *a_DestinationRouteMask ) { BOOL t_Status = TRUE ; SnmpIpAddressType t_HopDestinationType ( a_GatewayAddress ) ; if ( t_HopDestinationType.GetValue () == a_SourceIpAddress ) { SnmpIpAddressType t_HopDestinationType ( a_GatewayAddress ) ; SnmpIpAddressType t_HopDestinationSubnetType ( a_GatewaySubnetAddress ) ; SnmpIpAddressType t_HopDestinationSubnetMaskType ( a_GatewaySubnetMask ) ; SnmpIpAddressType t_DestinationSubnetType ( a_DestinationIpAddress & t_HopDestinationSubnetMaskType.GetValue () ) ; if ( t_DestinationSubnetType.GetValue () == t_HopDestinationSubnetType.GetValue () ) { t_Status = GetClassObject ( L"ConnectionDestination" ) ; if ( t_Status ) { IWbemClassObject *t_Association = NULL ; HRESULT t_Result = m_ClassObject->SpawnInstance ( 0 , & t_Association ) ; if ( t_Status = SUCCEEDED ( t_Result ) ) { t_Status = ConnectionDestination_Put ( a_ErrorObject , t_Association , a_ObjectPath , a_SourceAddress , a_DestinationAddress , a_GatewayAddress , a_GatewaySubnetAddress , a_GatewaySubnetMask , a_GatewayInterfaceIndex , a_DestinationRouteAddress , a_DestinationRouteMask ) ; if ( t_Status ) { m_NotificationHandler->Indicate ( 1 , & t_Association ) ; } } else { t_Status = FALSE ; } t_Association->Release () ; } } } return t_Status ; } BOOL ExecQueryAsyncEventObject :: All_HopToProxySystem_Association ( WbemSnmpErrorObject &a_ErrorObject , wchar_t *a_ObjectPath , KeyRef *a_SourceKey , KeyRef *DestinationKey , IWbemServices *a_Proxy , IWbemClassObject *a_HopObject , wchar_t *a_SourceName , wchar_t *a_SourceAddress , wchar_t *a_DestinationAddress , ULONG a_SourceIpAddress , ULONG a_DestinationIpAddress , wchar_t *a_SubnetAddress , wchar_t *a_SubnetMask , ULONG a_InterfaceIndex , wchar_t *a_GatewayAddress , wchar_t *a_GatewaySubnetAddress , wchar_t *a_GatewaySubnetMask , ULONG a_GatewayInterfaceIndex , wchar_t *a_DestinationRouteAddress , wchar_t *a_DestinationRouteMask ) { BOOL t_Status ; wchar_t *t_SourceName = GetHostNameByAddress ( a_SourceKey->m_vValue.bstrVal ) ; SnmpIpAddressType t_SourceAddressType ( a_SourceKey->m_vValue.bstrVal ) ; if ( t_SourceName ) { WbemNamespacePath *t_Path = m_Provider->GetNamespacePath () ; wchar_t *t_Namespace = t_Path->GetNamespacePath () ; wchar_t *t_String1 = UnicodeStringAppend ( L"\\\\" , GetHostName () ) ; wchar_t *t_String2 = UnicodeStringAppend ( t_String1 , L"\\" ) ; delete [] t_String1 ; wchar_t *t_String3 = UnicodeStringAppend ( t_String2 , t_Namespace ) ; delete [] t_String2 ; wchar_t *t_String4 = UnicodeStringAppend ( t_String3 , L"\\" ) ; delete [] t_String3 ; wchar_t *t_String5 = UnicodeStringAppend ( t_String4 , t_SourceName ) ; delete [] t_String4 ; wchar_t *t_String6 = UnicodeStringAppend ( t_String5 , L":" ) ; delete [] t_String5 ; wchar_t *t_String7 = UnicodeStringAppend ( t_String6 , L"ProxySystem.m_Name =\"" ) ; delete [] t_String6 ; wchar_t *t_String8 = UnicodeStringAppend ( t_String7 , a_SourceName ) ; delete [] t_String7 ; wchar_t *t_String9 = UnicodeStringAppend ( t_String8 , L"\"" ) ; delete [] t_String8 ; t_Status = GetClassObject ( L"HopToProxySystem_Assoc" ) ; if ( t_Status ) { IWbemClassObject *t_Association = NULL ; HRESULT t_Result = m_ClassObject->SpawnInstance ( 0 , & t_Association ) ; if ( t_Status = SUCCEEDED ( t_Result ) ) { VARIANT t_Variant ; VariantInit ( &t_Variant ) ; t_Variant.vt = VT_BSTR ; t_Variant.bstrVal = SysAllocString ( a_ObjectPath ) ; t_Result = t_Association->Put ( L"m_Hop" , 0 , & t_Variant , 0 ) ; VariantClear ( &t_Variant ) ; if ( t_Status = SUCCEEDED ( t_Result ) ) { t_Variant.vt = VT_BSTR ; t_Variant.bstrVal = SysAllocString ( t_String9 ) ; t_Result = t_Association->Put ( L"m_ProxySystem" , 0 , & t_Variant , 0 ) ; if ( t_Status = SUCCEEDED ( t_Result ) ) { m_NotificationHandler->Indicate ( 1 , & t_Association ) ; } } } t_Association->Release () ; } delete [] t_String9 ; } return t_Status ; } BOOL ExecQueryAsyncEventObject :: All_HopToInterfaceTable_Association ( WbemSnmpErrorObject &a_ErrorObject , wchar_t *a_ObjectPath , KeyRef *a_SourceKey , KeyRef *DestinationKey , IWbemServices *a_Proxy , IWbemClassObject *a_HopObject , wchar_t *a_SourceName , wchar_t *a_SourceAddress , wchar_t *a_DestinationAddress , ULONG a_SourceIpAddress , ULONG a_DestinationIpAddress , wchar_t *a_SubnetAddress , wchar_t *a_SubnetMask , ULONG a_InterfaceIndex , wchar_t *a_GatewayAddress , wchar_t *a_GatewaySubnetAddress , wchar_t *a_GatewaySubnetMask , ULONG a_GatewayInterfaceIndex , wchar_t *a_DestinationRouteAddress , wchar_t *a_DestinationRouteMask ) { BOOL t_Status = TRUE ; VARIANT t_Variant ; VariantInit ( &t_Variant ) ; LONG t_PropertyFlavour = 0 ; VARTYPE t_PropertyType = 0 ; ULONG t_InterfaceIndex = 0 ; HRESULT t_Result = a_HopObject->Get ( L"m_InterfaceIndex" , 0 , & t_Variant , & t_PropertyType , & t_PropertyFlavour ) ; if ( t_Status = SUCCEEDED ( t_Result ) ) { t_Status = GetClassObject ( L"HopToInterfaceTable_Assoc" ) ; if ( t_Status ) { t_InterfaceIndex = t_Variant.lVal ; WbemNamespacePath *t_Path = m_Provider->GetNamespacePath () ; wchar_t *t_Namespace = t_Path->GetNamespacePath () ; wchar_t *t_String1 = UnicodeStringAppend ( t_Namespace, L"\\" ) ; wchar_t *t_String2 = UnicodeStringAppend ( t_String1 , a_SourceName ) ; delete [] t_String1 ; wchar_t *t_String3 = UnicodeStringAppend ( t_String2 , L":" ) ; delete [] t_String2 ; wchar_t *t_String4 = UnicodeStringAppend ( t_String3 , L"MS_SNMP_RFC1213_MIB_ifTable.ifIndex =" ) ; delete [] t_String3 ; SnmpIntegerType t_InterfaceIndexType ( a_InterfaceIndex , NULL ) ; wchar_t *t_String5 = t_InterfaceIndexType.GetStringValue () ; wchar_t *t_String6 = UnicodeStringAppend ( t_String4 , t_String5 ) ; delete [] t_String5 ; IWbemClassObject *t_Association = NULL ; HRESULT t_Result = m_ClassObject->SpawnInstance ( 0 , & t_Association ) ; if ( t_Status = SUCCEEDED ( t_Result ) ) { VARIANT t_Variant ; VariantInit ( &t_Variant ) ; t_Variant.vt = VT_BSTR ; t_Variant.bstrVal = SysAllocString ( a_ObjectPath ) ; t_Result = t_Association->Put ( L"m_Hop" , 0 , & t_Variant , 0 ) ; VariantClear ( &t_Variant ) ; if ( t_Status = SUCCEEDED ( t_Result ) ) { t_Variant.vt = VT_BSTR ; t_Variant.bstrVal = SysAllocString ( t_String6 ) ; t_Result = t_Association->Put ( L"m_InterfaceTable" , 0 , & t_Variant , 0 ) ; if ( t_Status = SUCCEEDED ( t_Result ) ) { m_NotificationHandler->Indicate ( 1 , & t_Association ) ; } } t_Association->Release () ; } delete [] t_String6 ; } } VariantClear ( &t_Variant ) ; return t_Status ; } BOOL ExecQueryAsyncEventObject :: All_HopToGatewayInterfaceTable_Association ( WbemSnmpErrorObject &a_ErrorObject , wchar_t *a_ObjectPath , KeyRef *a_SourceKey , KeyRef *DestinationKey , IWbemServices *a_Proxy , IWbemClassObject *a_HopObject , wchar_t *a_SourceName , wchar_t *a_SourceAddress , wchar_t *a_DestinationAddress , ULONG a_SourceIpAddress , ULONG a_DestinationIpAddress , wchar_t *a_SubnetAddress , wchar_t *a_SubnetMask , ULONG a_InterfaceIndex , wchar_t *a_GatewayAddress , wchar_t *a_GatewaySubnetAddress , wchar_t *a_GatewaySubnetMask , ULONG a_GatewayInterfaceIndex , wchar_t *a_DestinationRouteAddress , wchar_t *a_DestinationRouteMask ) { BOOL t_Status = TRUE ; VARIANT t_Variant ; VariantInit ( &t_Variant ) ; LONG t_PropertyFlavour = 0 ; VARTYPE t_PropertyType = 0 ; ULONG t_InterfaceIndex = 0 ; HRESULT t_Result = a_HopObject->Get ( L"m_GatewayInterfaceIndex" , 0 , & t_Variant , & t_PropertyType , & t_PropertyFlavour ) ; if ( t_Status = SUCCEEDED ( t_Result ) ) { t_Status = GetClassObject ( L"HopToGatewayInterfaceTable_Assoc" ) ; if ( t_Status ) { t_InterfaceIndex = t_Variant.lVal ; WbemNamespacePath *t_Path = m_Provider->GetNamespacePath () ; wchar_t *t_Namespace = t_Path->GetNamespacePath () ; wchar_t *t_String1 = UnicodeStringAppend ( t_Namespace, L"\\" ) ; wchar_t *t_String2 = UnicodeStringAppend ( t_String1 , a_SourceName ) ; delete [] t_String1 ; wchar_t *t_String3 = UnicodeStringAppend ( t_String2 , L":" ) ; delete [] t_String2 ; wchar_t *t_String4 = UnicodeStringAppend ( t_String3 , L"MS_SNMP_RFC1213_MIB_ifTable.ifIndex =" ) ; delete [] t_String3 ; SnmpIntegerType t_InterfaceIndexType ( a_InterfaceIndex , NULL ) ; wchar_t *t_String5 = t_InterfaceIndexType.GetStringValue () ; wchar_t *t_String6 = UnicodeStringAppend ( t_String4 , t_String5 ) ; delete [] t_String5 ; IWbemClassObject *t_Association = NULL ; HRESULT t_Result = m_ClassObject->SpawnInstance ( 0 , & t_Association ) ; if ( t_Status = SUCCEEDED ( t_Result ) ) { VARIANT t_Variant ; VariantInit ( &t_Variant ) ; t_Variant.vt = VT_BSTR ; t_Variant.bstrVal = SysAllocString ( a_ObjectPath ) ; t_Result = t_Association->Put ( L"m_Hop" , 0 , & t_Variant , 0 ) ; VariantClear ( &t_Variant ) ; if ( t_Status = SUCCEEDED ( t_Result ) ) { t_Variant.vt = VT_BSTR ; t_Variant.bstrVal = SysAllocString ( t_String6 ) ; t_Result = t_Association->Put ( L"m_InterfaceTable" , 0 , & t_Variant , 0 ) ; if ( t_Status = SUCCEEDED ( t_Result ) ) { m_NotificationHandler->Indicate ( 1 , & t_Association ) ; } } t_Association->Release () ; } delete [] t_String6 ; } } VariantClear ( &t_Variant ) ; return t_Status ; } BOOL ExecQueryAsyncEventObject :: All_HopToSubnetwork_Association ( WbemSnmpErrorObject &a_ErrorObject , wchar_t *a_ObjectPath , KeyRef *a_SourceKey , KeyRef *DestinationKey , IWbemServices *a_Proxy , IWbemClassObject *a_HopObject , wchar_t *a_SourceName , wchar_t *a_SourceAddress , wchar_t *a_DestinationAddress , ULONG a_SourceIpAddress , ULONG a_DestinationIpAddress , wchar_t *a_SubnetAddress , wchar_t *a_SubnetMask , ULONG a_InterfaceIndex , wchar_t *a_GatewayAddress , wchar_t *a_GatewaySubnetAddress , wchar_t *a_GatewaySubnetMask , ULONG a_GatewayInterfaceIndex , wchar_t *a_DestinationRouteAddress , wchar_t *a_DestinationRouteMask ) { BOOL t_Status ; VARIANT t_Variant ; VariantInit ( &t_Variant ) ; LONG t_PropertyFlavour = 0 ; VARTYPE t_PropertyType = 0 ; HRESULT t_Result = a_HopObject->Get ( L"m_IpSubnetAddress" , 0 , & t_Variant , & t_PropertyType , & t_PropertyFlavour ) ; if ( t_Status = SUCCEEDED ( t_Result ) ) { t_Status = GetClassObject ( L"HopToSubnetwork_Assoc" ) ; if ( t_Status ) { wchar_t *t_SubnetAddress = UnicodeStringDuplicate ( t_Variant.bstrVal ) ; IWbemClassObject *t_Association = NULL ; HRESULT t_Result = m_ClassObject->SpawnInstance ( 0 , & t_Association ) ; if ( t_Status = SUCCEEDED ( t_Result ) ) { VARIANT t_Variant ; VariantInit ( &t_Variant ) ; t_Variant.vt = VT_BSTR ; t_Variant.bstrVal = SysAllocString ( a_ObjectPath ) ; t_Result = t_Association->Put ( L"m_Hop" , 0 , & t_Variant , 0 ) ; VariantClear ( &t_Variant ) ; if ( t_Status = SUCCEEDED ( t_Result ) ) { wchar_t *t_String1 = UnicodeStringAppend ( L"Subnetwork.m_IpSubnetAddress=\"" , a_SubnetAddress ) ; wchar_t *t_String2 = UnicodeStringAppend ( t_String1 , L"\"" ) ; delete [] t_String1 ; t_Variant.vt = VT_BSTR ; t_Variant.bstrVal = SysAllocString ( t_String2 ) ; delete t_String2 ; t_Result = t_Association->Put ( L"m_Subnetwork" , 0 , & t_Variant , 0 ) ; if ( t_Status = SUCCEEDED ( t_Result ) ) { m_NotificationHandler->Indicate ( 1 , & t_Association ) ; } VariantClear ( & t_Variant ) ; } t_Association->Release () ; } delete [] t_SubnetAddress ; } } return t_Status ; } BOOL ExecQueryAsyncEventObject :: All_HopToGatewaySubnetwork_Association ( WbemSnmpErrorObject &a_ErrorObject , wchar_t *a_ObjectPath , KeyRef *a_SourceKey , KeyRef *DestinationKey , IWbemServices *a_Proxy , IWbemClassObject *a_HopObject , wchar_t *a_SourceName , wchar_t *a_SourceAddress , wchar_t *a_DestinationAddress , ULONG a_SourceIpAddress , ULONG a_DestinationIpAddress , wchar_t *a_SubnetAddress , wchar_t *a_SubnetMask , ULONG a_InterfaceIndex , wchar_t *a_GatewayAddress , wchar_t *a_GatewaySubnetAddress , wchar_t *a_GatewaySubnetMask , ULONG a_GatewayInterfaceIndex , wchar_t *a_DestinationRouteAddress , wchar_t *a_DestinationRouteMask ) { BOOL t_Status ; VARIANT t_Variant ; VariantInit ( &t_Variant ) ; LONG t_PropertyFlavour = 0 ; VARTYPE t_PropertyType = 0 ; HRESULT t_Result = a_HopObject->Get ( L"m_GatewayIpSubnetAddress" , 0 , & t_Variant , & t_PropertyType , & t_PropertyFlavour ) ; if ( t_Status = SUCCEEDED ( t_Result ) ) { t_Status = GetClassObject ( L"HopToGatewaySubnetwork_Assoc" ) ; if ( t_Status ) { wchar_t *t_SubnetAddress = UnicodeStringDuplicate ( t_Variant.bstrVal ) ; IWbemClassObject *t_Association = NULL ; HRESULT t_Result = m_ClassObject->SpawnInstance ( 0 , & t_Association ) ; if ( t_Status = SUCCEEDED ( t_Result ) ) { VARIANT t_Variant ; VariantInit ( &t_Variant ) ; t_Variant.vt = VT_BSTR ; t_Variant.bstrVal = SysAllocString ( a_ObjectPath ) ; t_Result = t_Association->Put ( L"m_Hop" , 0 , & t_Variant , 0 ) ; VariantClear ( &t_Variant ) ; if ( t_Status = SUCCEEDED ( t_Result ) ) { wchar_t *t_String1 = UnicodeStringAppend ( L"Subnetwork.m_IpSubnetAddress=\"" , a_SubnetAddress ) ; wchar_t *t_String2 = UnicodeStringAppend ( t_String1 , L"\"" ) ; delete [] t_String1 ; t_Variant.vt = VT_BSTR ; t_Variant.bstrVal = SysAllocString ( t_String2 ) ; delete t_String2 ; t_Result = t_Association->Put ( L"m_Subnetwork" , 0 , & t_Variant , 0 ) ; if ( t_Status = SUCCEEDED ( t_Result ) ) { m_NotificationHandler->Indicate ( 1 , & t_Association ) ; } VariantClear ( & t_Variant ) ; } t_Association->Release () ; } delete [] t_SubnetAddress ; } } return t_Status ; } BOOL ExecQueryAsyncEventObject :: ProxyToWin32Service_Association ( WbemSnmpErrorObject &a_ErrorObject , wchar_t *a_ObjectPath , KeyRef *a_SourceKey ) { BOOL t_Status = TRUE ; IWbemServices *t_Server = m_Provider->GetServer () ; IEnumWbemClassObject *t_Enumeration = NULL ; HRESULT t_Result = t_Server->CreateInstanceEnum ( L"Win32Service" , 0 , NULL , & t_Enumeration ) ; if ( t_Status = SUCCEEDED ( t_Result ) ) { IWbemClassObject *t_Service = NULL ; ULONG t_Returned = 0 ; t_Enumeration->Reset () ; while ( ( t_Result = t_Enumeration->Next ( -1, 1 , &t_Service, & t_Returned ) ) == WBEM_NO_ERROR ) { IWbemClassObject *t_Association = NULL ; t_Result = m_ClassObject->SpawnInstance ( 0 , & t_Association ) ; if ( t_Status = SUCCEEDED ( t_Result ) ) { VARIANT t_Variant ; VariantInit ( &t_Variant ) ; t_Variant.vt = VT_BSTR ; t_Variant.bstrVal = SysAllocString ( a_ObjectPath ) ; HRESULT t_Result = t_Association->Put ( L"m_Proxy" , 0 , & t_Variant , 0 ) ; VariantClear ( &t_Variant ) ; LONG t_PropertyFlavour = 0 ; VARTYPE t_PropertyType = 0 ; t_Result = t_Service->Get ( L"__PATH" , 0 , & t_Variant , & t_PropertyType , & t_PropertyFlavour ) ; if ( t_Status = SUCCEEDED ( t_Result ) ) { BSTR t_ServicePath = SysAllocString ( t_Variant.bstrVal ) ; VariantClear ( & t_Variant ) ; t_Variant.vt = VT_BSTR ; t_Variant.bstrVal = t_ServicePath ; t_Result = t_Association->Put ( L"m_Win32Service" , 0 , & t_Variant , 0 ) ; if ( t_Status = SUCCEEDED ( t_Result ) ) { m_NotificationHandler->Indicate ( 1 , & t_Association ) ; } VariantClear ( & t_Variant ) ; t_Association->Release () ; } } t_Service->Release () ; } } t_Server->Release () ; return t_Status ; } BOOL ExecQueryAsyncEventObject :: Dispatch_ProxyToWin32Service ( WbemSnmpErrorObject &a_ErrorObject , wchar_t *a_ObjectPath ) { BOOL t_Status = TRUE ; ParsedObjectPath *t_ParsedObjectPath ; CObjectPathParser t_ObjectPathParser ; t_Status = ! t_ObjectPathParser.Parse ( a_ObjectPath , &t_ParsedObjectPath ) ; if ( t_Status ) { if ( t_ParsedObjectPath->m_paKeys && ( t_ParsedObjectPath->m_dwNumKeys == 1 ) ) { if ( wcscmp ( t_ParsedObjectPath->m_pClass , L"ProxySystem" ) == 0 ) { KeyRef *t_Key1 = t_ParsedObjectPath->m_paKeys [ 0 ] ; if ( t_Key1 ) { if ( wcscmp ( t_Key1->m_pName , L"m_Name" ) == 0 ) { if ( t_Key1->m_vValue.vt == VT_BSTR ) { t_Status = ProxyToWin32Service_Association ( a_ErrorObject , a_ObjectPath , t_Key1 ) ; } else { t_Status = FALSE ; } } else { t_Status = FALSE ; } } else { t_Status = FALSE ; } } else { t_Status = FALSE ; } } else { t_Status = FALSE ; } delete t_ParsedObjectPath ; } return t_Status ; } BOOL ExecQueryAsyncEventObject :: ProxyToProcessStats_Association ( WbemSnmpErrorObject &a_ErrorObject , wchar_t *a_ObjectPath , KeyRef *a_SourceKey ) { BOOL t_Status = TRUE ; IWbemServices *t_Server = m_Provider->GetServer () ; IEnumWbemClassObject *t_Enumeration = NULL ; HRESULT t_Result = t_Server->CreateInstanceEnum ( L"NT_Process_Statistics" , 0 , NULL , & t_Enumeration ) ; if ( t_Status = SUCCEEDED ( t_Result ) ) { IWbemClassObject *t_Service = NULL ; ULONG t_Returned = 0 ; t_Enumeration->Reset () ; while ( ( t_Result = t_Enumeration->Next ( -1 , 1 , &t_Service, & t_Returned ) ) == WBEM_NO_ERROR ) { IWbemClassObject *t_Association = NULL ; t_Result = m_ClassObject->SpawnInstance ( 0 , & t_Association ) ; if ( t_Status = SUCCEEDED ( t_Result ) ) { VARIANT t_Variant ; VariantInit ( &t_Variant ) ; t_Variant.vt = VT_BSTR ; t_Variant.bstrVal = SysAllocString ( a_ObjectPath ) ; HRESULT t_Result = t_Association->Put ( L"m_Proxy" , 0 , & t_Variant , 0 ) ; VariantClear ( &t_Variant ) ; LONG t_PropertyFlavour = 0 ; VARTYPE t_PropertyType = 0 ; t_Result = t_Service->Get ( L"__PATH" , 0 , & t_Variant , & t_PropertyType , & t_PropertyFlavour ) ; if ( t_Status = SUCCEEDED ( t_Result ) ) { BSTR t_ServicePath = SysAllocString ( t_Variant.bstrVal ) ; VariantClear ( & t_Variant ) ; t_Variant.vt = VT_BSTR ; t_Variant.bstrVal = t_ServicePath ; t_Result = t_Association->Put ( L"m_ProcessStats" , 0 , & t_Variant , 0 ) ; if ( t_Status = SUCCEEDED ( t_Result ) ) { m_NotificationHandler->Indicate ( 1 , & t_Association ) ; } VariantClear ( & t_Variant ) ; t_Association->Release () ; } } t_Service->Release () ; } } t_Server->Release () ; return t_Status ; } BOOL ExecQueryAsyncEventObject :: Dispatch_ProxyToProcessStats ( WbemSnmpErrorObject &a_ErrorObject , wchar_t *a_ObjectPath ) { BOOL t_Status = TRUE ; ParsedObjectPath *t_ParsedObjectPath ; CObjectPathParser t_ObjectPathParser ; t_Status = ! t_ObjectPathParser.Parse ( a_ObjectPath , &t_ParsedObjectPath ) ; if ( t_Status ) { if ( t_ParsedObjectPath->m_paKeys && ( t_ParsedObjectPath->m_dwNumKeys == 1 ) ) { if ( wcscmp ( t_ParsedObjectPath->m_pClass , L"ProxySystem" ) == 0 ) { KeyRef *t_Key1 = t_ParsedObjectPath->m_paKeys [ 0 ] ; if ( t_Key1 ) { if ( wcscmp ( t_Key1->m_pName , L"m_Name" ) == 0 ) { if ( t_Key1->m_vValue.vt == VT_BSTR ) { t_Status = ProxyToProcessStats_Association ( a_ErrorObject , a_ObjectPath , t_Key1 ) ; } else { t_Status = FALSE ; } } else { t_Status = FALSE ; } } else { t_Status = FALSE ; } } else { t_Status = FALSE ; } } else { t_Status = FALSE ; } delete t_ParsedObjectPath ; } return t_Status ; } BOOL ExecQueryAsyncEventObject :: ProxyToNetworkStats_Association ( WbemSnmpErrorObject &a_ErrorObject , wchar_t *a_ObjectPath , KeyRef *a_SourceKey ) { BOOL t_Status = TRUE ; IWbemServices *t_Server = m_Provider->GetServer () ; IEnumWbemClassObject *t_Enumeration = NULL ; HRESULT t_Result = t_Server->CreateInstanceEnum ( L"NT_Network_Segment_Statistics" , 0 , NULL , & t_Enumeration ) ; if ( t_Status = SUCCEEDED ( t_Result ) ) { IWbemClassObject *t_Service = NULL ; ULONG t_Returned = 0 ; t_Enumeration->Reset () ; while ( ( t_Result = t_Enumeration->Next ( -1 , 1 , &t_Service, & t_Returned ) ) == WBEM_NO_ERROR ) { IWbemClassObject *t_Association = NULL ; t_Result = m_ClassObject->SpawnInstance ( 0 , & t_Association ) ; if ( t_Status = SUCCEEDED ( t_Result ) ) { VARIANT t_Variant ; VariantInit ( &t_Variant ) ; t_Variant.vt = VT_BSTR ; t_Variant.bstrVal = SysAllocString ( a_ObjectPath ) ; HRESULT t_Result = t_Association->Put ( L"m_Proxy" , 0 , & t_Variant , 0 ) ; VariantClear ( &t_Variant ) ; LONG t_PropertyFlavour = 0 ; VARTYPE t_PropertyType = 0 ; t_Result = t_Service->Get ( L"__PATH" , 0 , & t_Variant , & t_PropertyType , & t_PropertyFlavour ) ; if ( t_Status = SUCCEEDED ( t_Result ) ) { BSTR t_ServicePath = SysAllocString ( t_Variant.bstrVal ) ; VariantClear ( & t_Variant ) ; t_Variant.vt = VT_BSTR ; t_Variant.bstrVal = t_ServicePath ; t_Result = t_Association->Put ( L"m_NetworkStats" , 0 , & t_Variant , 0 ) ; if ( t_Status = SUCCEEDED ( t_Result ) ) { m_NotificationHandler->Indicate ( 1 , & t_Association ) ; } VariantClear ( & t_Variant ) ; t_Association->Release () ; } } t_Service->Release () ; } } t_Server->Release () ; return t_Status ; } BOOL ExecQueryAsyncEventObject :: Dispatch_ProxyToNetworkStats ( WbemSnmpErrorObject &a_ErrorObject , wchar_t *a_ObjectPath ) { BOOL t_Status = TRUE ; ParsedObjectPath *t_ParsedObjectPath ; CObjectPathParser t_ObjectPathParser ; t_Status = ! t_ObjectPathParser.Parse ( a_ObjectPath , &t_ParsedObjectPath ) ; if ( t_Status ) { if ( t_ParsedObjectPath->m_paKeys && ( t_ParsedObjectPath->m_dwNumKeys == 1 ) ) { if ( wcscmp ( t_ParsedObjectPath->m_pClass , L"ProxySystem" ) == 0 ) { KeyRef *t_Key1 = t_ParsedObjectPath->m_paKeys [ 0 ] ; if ( t_Key1 ) { if ( wcscmp ( t_Key1->m_pName , L"m_Name" ) == 0 ) { if ( t_Key1->m_vValue.vt == VT_BSTR ) { t_Status = ProxyToNetworkStats_Association ( a_ErrorObject , a_ObjectPath , t_Key1 ) ; } else { t_Status = FALSE ; } } else { t_Status = FALSE ; } } else { t_Status = FALSE ; } } else { t_Status = FALSE ; } } else { t_Status = FALSE ; } delete t_ParsedObjectPath ; } return t_Status ; } BOOL ExecQueryAsyncEventObject :: ProxyToInterfaceStats_Association ( WbemSnmpErrorObject &a_ErrorObject , wchar_t *a_ObjectPath , KeyRef *a_SourceKey ) { BOOL t_Status = TRUE ; IWbemServices *t_Server = m_Provider->GetServer () ; IEnumWbemClassObject *t_Enumeration = NULL ; HRESULT t_Result = t_Server->CreateInstanceEnum ( L"NT_Network_Interface_Statistics" , 0 , NULL , & t_Enumeration ) ; if ( t_Status = SUCCEEDED ( t_Result ) ) { IWbemClassObject *t_Service = NULL ; ULONG t_Returned = 0 ; t_Enumeration->Reset () ; while ( ( t_Result = t_Enumeration->Next ( -1 , 1 , &t_Service, & t_Returned ) ) == WBEM_NO_ERROR ) { IWbemClassObject *t_Association = NULL ; t_Result = m_ClassObject->SpawnInstance ( 0 , & t_Association ) ; if ( t_Status = SUCCEEDED ( t_Result ) ) { VARIANT t_Variant ; VariantInit ( &t_Variant ) ; t_Variant.vt = VT_BSTR ; t_Variant.bstrVal = SysAllocString ( a_ObjectPath ) ; HRESULT t_Result = t_Association->Put ( L"m_Proxy" , 0 , & t_Variant , 0 ) ; VariantClear ( &t_Variant ) ; LONG t_PropertyFlavour = 0 ; VARTYPE t_PropertyType = 0 ; t_Result = t_Service->Get ( L"__PATH" , 0 , & t_Variant , & t_PropertyType , & t_PropertyFlavour ) ; if ( t_Status = SUCCEEDED ( t_Result ) ) { BSTR t_ServicePath = SysAllocString ( t_Variant.bstrVal ) ; VariantClear ( & t_Variant ) ; t_Variant.vt = VT_BSTR ; t_Variant.bstrVal = t_ServicePath ; t_Result = t_Association->Put ( L"m_InterfaceStats" , 0 , & t_Variant , 0 ) ; if ( t_Status = SUCCEEDED ( t_Result ) ) { m_NotificationHandler->Indicate ( 1 , & t_Association ) ; } VariantClear ( & t_Variant ) ; t_Association->Release () ; } } t_Service->Release () ; } } t_Server->Release () ; return t_Status ; } BOOL ExecQueryAsyncEventObject :: Dispatch_ProxyToInterfaceStats ( WbemSnmpErrorObject &a_ErrorObject , wchar_t *a_ObjectPath ) { BOOL t_Status = TRUE ; ParsedObjectPath *t_ParsedObjectPath ; CObjectPathParser t_ObjectPathParser ; t_Status = ! t_ObjectPathParser.Parse ( a_ObjectPath , &t_ParsedObjectPath ) ; if ( t_Status ) { if ( t_ParsedObjectPath->m_paKeys && ( t_ParsedObjectPath->m_dwNumKeys == 1 ) ) { if ( wcscmp ( t_ParsedObjectPath->m_pClass , L"ProxySystem" ) == 0 ) { KeyRef *t_Key1 = t_ParsedObjectPath->m_paKeys [ 0 ] ; if ( t_Key1 ) { if ( wcscmp ( t_Key1->m_pName , L"m_Name" ) == 0 ) { if ( t_Key1->m_vValue.vt == VT_BSTR ) { t_Status = ProxyToInterfaceStats_Association ( a_ErrorObject , a_ObjectPath , t_Key1 ) ; } else { t_Status = FALSE ; } } else { t_Status = FALSE ; } } else { t_Status = FALSE ; } } else { t_Status = FALSE ; } } else { t_Status = FALSE ; } delete t_ParsedObjectPath ; } return t_Status ; }