2025-04-27 07:49:33 -04:00

580 lines
17 KiB
C++

// Copyright (c) 1999-2001 Microsoft Corporation, All Rights Reserved
#define WBEM_CLASS_EXTENDEDSTATUS L"__ExtendedStatus"
#define WBEM_TASKSTATE_START 0x0
#define WBEM_TASKSTATE_ASYNCHRONOUSCOMPLETE 0x100000
#define WBEM_TASKSTATE_ASYNCHRONOUSABORT 0x100001
class WbemTaskObject : public SnmpTaskObject
{
private:
protected:
ULONG m_State ;
WbemSnmpErrorObject m_ErrorObject ;
IWbemContext *m_Context ;
ULONG m_OperationFlag ;
IWbemClassObject *m_ClassObject ;
IWbemObjectSink *m_NotificationHandler ;
CImpTraceRouteProv *m_Provider ;
static SnmpMap <wchar_t *,wchar_t *,IWbemServices *,IWbemServices *> s_ConnectionPool ;
static SnmpMap <wchar_t *,wchar_t *,wchar_t *,wchar_t *> s_AddressPool ;
static SnmpMap <wchar_t *,wchar_t *,wchar_t *,wchar_t *> s_NamePool ;
static SnmpMap <wchar_t *,wchar_t *,wchar_t *,wchar_t *> s_QualifiedNamePool ;
protected:
void SetContext ( IWbemContext *a_Context ) ;
IWbemContext *GetContext () ;
BOOL GetClassObject ( wchar_t *a_Class ) ;
BOOL GetExtendedNotifyStatusObject ( IWbemClassObject **a_NotifyObject ) ;
BOOL GetNotifyStatusObject ( IWbemClassObject **a_NotifyObject ) ;
ULONG GetState () ;
void SetState ( ULONG a_State ) ;
/*
* Common functions
*/
BOOL CalculateRoute (
WbemSnmpErrorObject &a_ErrorObject ,
IWbemServices *a_Proxy ,
ULONG a_SourceAddress ,
ULONG a_DestinationAddress ,
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 GetRouteEntry (
WbemSnmpErrorObject &a_ErrorObject ,
IWbemClassObject *a_RoutingTableEntry ,
wchar_t *&t_ipRouteDest ,
wchar_t *&t_ipRouteNextHop ,
wchar_t *&t_ipRouteMask ,
ULONG &t_ipRouteIfIndex ,
ULONG &t_ipRouteMetric1
) ;
BOOL GetAddressEntry (
WbemSnmpErrorObject &a_ErrorObject ,
IWbemClassObject *a_AddressTableEntry ,
wchar_t *&a_ipAdEntAddr ,
wchar_t *&a_ipAdEntNetMask ,
ULONG &a_ipAdEntIfIndex
) ;
BOOL FindAddressEntryByIndex (
WbemSnmpErrorObject &a_ErrorObject ,
IEnumWbemClassObject *a_AddressTableEnumerator ,
wchar_t *&a_ipAdEntAddr ,
wchar_t *&a_ipAdEntNetMask ,
ULONG a_ipAdEntIfIndex
) ;
BOOL FindAddressEntryByAddress (
WbemSnmpErrorObject &a_ErrorObject ,
IEnumWbemClassObject *a_AddressTableEnumerator ,
wchar_t *a_ipAdEntAddr ,
wchar_t *&a_ipAdEntNetMask ,
ULONG &a_ipAdEntIfIndex
) ;
/*
* Network helper functions
*/
static wchar_t *GetHostAddressByName ( wchar_t *a_HostName ) ;
static wchar_t *GetHostNameByAddress ( wchar_t *a_HostAddress ) ;
static wchar_t *GetQualifiedHostNameByAddress ( wchar_t *a_HostAddress ) ;
static wchar_t *GetHostName () ;
static wchar_t *GetUncachedHostAddressByName ( wchar_t *a_HostName ) ;
static wchar_t *GetUncachedHostNameByAddress ( wchar_t *a_HostAddress ) ;
static wchar_t *GetUncachedQualifiedHostNameByAddress ( wchar_t *a_HostAddress ) ;
/*
* String helper functions
*/
static wchar_t *QuoteAndEscapeString ( wchar_t *a_String ) ;
static wchar_t *QuoteString ( wchar_t *a_String ) ;
public:
WbemTaskObject (
CImpTraceRouteProv *a_Provider ,
IWbemObjectSink *a_NotificationHandler ,
ULONG a_OperationFlag
) ;
~WbemTaskObject () ;
WbemSnmpErrorObject &GetErrorObject () ;
static BOOL GetProxy ( WbemSnmpErrorObject &a_ErrorObject , IWbemServices *a_RootService , wchar_t *a_Proxy , IWbemServices **a_ProxyService ) ;
} ;
class GetObjectAsyncEventObject : public WbemTaskObject
{
private:
wchar_t *m_ObjectPath ;
wchar_t *m_Class ;
ParsedObjectPath *m_ParsedObjectPath ;
CObjectPathParser m_ObjectPathParser ;
protected:
void ProcessComplete () ;
BOOL Instantiate ( WbemSnmpErrorObject &a_ErrorObject ) ;
BOOL Dispatch_Hop ( WbemSnmpErrorObject &a_ErrorObject ) ;
BOOL Hop_GetIpForwarding ( WbemSnmpErrorObject &a_ErrorObject , IWbemServices *t_Proxy , BOOL &a_IpForwarding ) ;
BOOL Hop_Get ( WbemSnmpErrorObject &a_ErrorObject , KeyRef *a_SourceKey , KeyRef *DestinationKey ) ;
BOOL Hop_Put (
WbemSnmpErrorObject &a_ErrorObject ,
IWbemClassObject *a_Hop ,
wchar_t *a_SourceAddress ,
wchar_t *a_DestinationAddress ,
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 a_IpForwarding
) ;
BOOL Dispatch_ProvidedTopNTable ( WbemSnmpErrorObject &a_ErrorObject ) ;
BOOL ProvidedTopNTable_Get ( WbemSnmpErrorObject &a_ErrorObject , KeyRef *a_TopNReport , KeyRef *a_TopNIndex ) ;
public:
GetObjectAsyncEventObject (
CImpTraceRouteProv *a_Provider ,
wchar_t *a_ObjectPath ,
ULONG a_Flag ,
IWbemObjectSink *a_NotificationHandler ,
IWbemContext *a_Context
) ;
~GetObjectAsyncEventObject () ;
void Process () ;
} ;
class CreateInstanceEnumAsyncEventObject : public WbemTaskObject
{
private:
wchar_t *m_Class ;
protected:
void ProcessComplete () ;
BOOL Instantiate ( WbemSnmpErrorObject &a_ErrorObject ) ;
BOOL Dispatch_ProvidedhostTopNTable ( WbemSnmpErrorObject &a_ErrorObject ) ;
public:
CreateInstanceEnumAsyncEventObject (
CImpTraceRouteProv *a_Provider ,
BSTR a_Class ,
ULONG a_Flag ,
IWbemObjectSink *a_NotificationHandler ,
IWbemContext *a_Context
) ;
~CreateInstanceEnumAsyncEventObject () ;
void Process () ;
} ;
class ExecQueryAsyncEventObject : public WbemTaskObject
{
private:
wchar_t *m_QueryFormat ;
wchar_t *m_Query ;
wchar_t *m_Class ;
CTextLexSource m_QuerySource ;
SQL1_Parser m_SqlParser ;
SQL_LEVEL_1_RPN_EXPRESSION *m_RPNExpression ;
protected:
void ProcessComplete () ;
BOOL Instantiate ( WbemSnmpErrorObject &a_ErrorObject ) ;
BOOL DispatchQuery ( WbemSnmpErrorObject &a_ErrorObject ) ;
BOOL DispatchAssocQuery ( WbemSnmpErrorObject &a_ErrorObject , wchar_t **a_ObjectPath ) ;
protected:
BOOL Dispatch_AllAssoc ( WbemSnmpErrorObject &a_ErrorObject , wchar_t *a_ObjectPath ) ;
BOOL All_Hop_Association (
WbemSnmpErrorObject &a_ErrorObject ,
wchar_t *a_ObjectPath ,
KeyRef *a_SourceKey ,
KeyRef *DestinationKey
) ;
BOOL 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 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 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 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 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 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 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 Dispatch_ConnectionSource ( WbemSnmpErrorObject &a_ErrorObject , wchar_t *a_ObjectPath ) ;
BOOL Dispatch_ConnectionDestination ( WbemSnmpErrorObject &a_ErrorObject , wchar_t *a_ObjectPath ) ;
BOOL Dispatch_NextHop ( WbemSnmpErrorObject &a_ErrorObject , wchar_t *a_ObjectPath ) ;
BOOL Dispatch_HopToProxySystemAssoc ( WbemSnmpErrorObject &a_ErrorObject , wchar_t *a_ObjectPath ) ;
BOOL Dispatch_HopToInterfaceTableAssoc ( WbemSnmpErrorObject &a_ErrorObject , wchar_t *a_ObjectPath ) ;
BOOL Dispatch_HopToGatewayInterfaceTableAssoc ( WbemSnmpErrorObject &a_ErrorObject , wchar_t *a_ObjectPath ) ;
BOOL Dispatch_HopToSubnetworkAssoc ( WbemSnmpErrorObject &a_ErrorObject , wchar_t *a_ObjectPath ) ;
BOOL Dispatch_HopToGatewaySubnetworkAssoc ( WbemSnmpErrorObject &a_ErrorObject , wchar_t *a_ObjectPath ) ;
BOOL Dispatch_SubnetworkToTopNAssoc ( WbemSnmpErrorObject &a_ErrorObject , wchar_t *a_ObjectPath ) ;
BOOL Dispatch_TopNToMacAddressAssoc ( WbemSnmpErrorObject &a_ErrorObject , wchar_t *a_ObjectPath ) ;
BOOL Dispatch_ProxyToWin32Service ( WbemSnmpErrorObject &a_ErrorObject , wchar_t *a_ObjectPath ) ;
BOOL Dispatch_ProxyToProcessStats ( WbemSnmpErrorObject &a_ErrorObject , wchar_t *a_ObjectPath ) ;
BOOL Dispatch_ProxyToNetworkStats ( WbemSnmpErrorObject &a_ErrorObject , wchar_t *a_ObjectPath ) ;
BOOL Dispatch_ProxyToInterfaceStats ( WbemSnmpErrorObject &a_ErrorObject , wchar_t *a_ObjectPath ) ;
BOOL ConnectionSource_Association ( WbemSnmpErrorObject &a_ErrorObject , wchar_t *a_ObjectPath , KeyRef *a_SourceKey , KeyRef *DestinationKey ) ;
BOOL NextHop_Association ( WbemSnmpErrorObject &a_ErrorObject , wchar_t *a_ObjectPath , KeyRef *a_SourceKey , KeyRef *DestinationKey ) ;
BOOL ConnectionDestination_Association ( WbemSnmpErrorObject &a_ErrorObject , wchar_t *a_ObjectPath , KeyRef *a_SourceKey , KeyRef *DestinationKey ) ;
BOOL HopToSubnetwork_Association ( WbemSnmpErrorObject &a_ErrorObject , wchar_t *a_ObjectPath , KeyRef *a_SourceKey , KeyRef *DestinationKey ) ;
BOOL HopToGatewaySubnetwork_Association ( WbemSnmpErrorObject &a_ErrorObject , wchar_t *a_ObjectPath , KeyRef *a_SourceKey , KeyRef *DestinationKey ) ;
BOOL HopToInterfaceTable_Association ( WbemSnmpErrorObject &a_ErrorObject , wchar_t *a_ObjectPath , KeyRef *a_SourceKey , KeyRef *DestinationKey ) ;
BOOL HopToGatewayInterfaceTable_Association ( WbemSnmpErrorObject &a_ErrorObject , wchar_t *a_ObjectPath , KeyRef *a_SourceKey , KeyRef *DestinationKey ) ;
BOOL HopToProxySystem_Association ( WbemSnmpErrorObject &a_ErrorObject , wchar_t *a_ObjectPath , KeyRef *a_SourceKey , KeyRef *DestinationKey ) ;
BOOL SubnetworkToTopN_Association ( WbemSnmpErrorObject &a_ErrorObject , wchar_t *a_ObjectPath , KeyRef *a_IpSubnetAddrKey ) ;
BOOL TopNToMacAddress_Association ( WbemSnmpErrorObject &a_ErrorObject , wchar_t *a_ObjectPath , KeyRef *a_IndexKey , KeyRef *a_ReportKey ) ;
BOOL ProxyToWin32Service_Association ( WbemSnmpErrorObject &a_ErrorObject , wchar_t *a_ObjectPath , KeyRef *a_SourceKey ) ;
BOOL ProxyToProcessStats_Association ( WbemSnmpErrorObject &a_ErrorObject , wchar_t *a_ObjectPath , KeyRef *a_SourceKey ) ;
BOOL ProxyToNetworkStats_Association ( WbemSnmpErrorObject &a_ErrorObject , wchar_t *a_ObjectPath , KeyRef *a_SourceKey ) ;
BOOL ProxyToInterfaceStats_Association ( WbemSnmpErrorObject &a_ErrorObject , wchar_t *a_ObjectPath , KeyRef *a_SourceKey ) ;
BOOL 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
) ;
BOOL 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
) ;
public:
ExecQueryAsyncEventObject (
CImpTraceRouteProv *a_Provider ,
BSTR a_QueryFormat ,
BSTR a_Query ,
ULONG a_Flag ,
IWbemObjectSink *a_NotificationHandler ,
IWbemContext *a_Context
) ;
~ExecQueryAsyncEventObject () ;
void Process () ;
} ;
class PutInstanceAsyncEventObject : public WbemTaskObject
{
private:
IWbemClassObject *m_Object ;
wchar_t *m_Class ;
protected:
void ProcessComplete () ;
BOOL Update ( WbemSnmpErrorObject &a_ErrorObject ) ;
public:
PutInstanceAsyncEventObject (
CImpTraceRouteProv *a_Provider ,
IWbemClassObject *a_Object ,
ULONG a_Flag ,
IWbemObjectSink *a_NotificationHandler ,
IWbemContext *a_Context
) ;
~PutInstanceAsyncEventObject () ;
void Process () ;
} ;
class PutClassAsyncEventObject : public WbemTaskObject
{
private:
IWbemClassObject *m_Object ;
wchar_t *m_Class ;
protected:
void ProcessComplete () ;
BOOL Update ( WbemSnmpErrorObject &a_ErrorObject ) ;
public:
PutClassAsyncEventObject (
CImpTraceRouteProv *a_Provider ,
IWbemClassObject *a_Object ,
ULONG a_Flag ,
IWbemObjectSink *a_NotificationHandler ,
IWbemContext *a_Context
) ;
~PutClassAsyncEventObject () ;
void Process () ;
} ;
class CreateClassEnumAsyncEventObject : public WbemTaskObject
{
private:
wchar_t *m_SuperClass ;
protected:
void ProcessComplete () ;
BOOL Instantiate ( WbemSnmpErrorObject &a_ErrorObject ) ;
public:
CreateClassEnumAsyncEventObject (
CImpTraceRouteProv *a_Provider ,
BSTR a_SuperClass ,
ULONG a_Flag ,
IWbemObjectSink *a_NotificationHandler ,
IWbemContext *a_Context
) ;
~CreateClassEnumAsyncEventObject () ;
void Process () ;
} ;