//*************************************************************************** // // File: // // Module: MS SNMP Provider // // Purpose: // // Copyright (c) 1997-2001 Microsoft Corporation, All Rights Reserved // //*************************************************************************** #ifndef __PROPQUERY_H #define __PROPQUERY_H #define SYSTEM_PROPERTY_CLASS L"__CLASS" #define SYSTEM_PROPERTY_SUPERCLASS L"__SUPERCLASS" #define SYSTEM_PROPERTY_DYNASTY L"__DYNASTY" #define SYSTEM_PROPERTY_DERIVATION L"__DERIVATION" #define SYSTEM_PROPERTY_GENUS L"__GENUS" #define SYSTEM_PROPERTY_NAMESPACE L"__NAMESPACE" #define SYSTEM_PROPERTY_PROPERTY_COUNT L"__PROPERTY_COUNT" #define SYSTEM_PROPERTY_SERVER L"__SERVER" #define SYSTEM_PROPERTY_RELPATH L"__RELPATH" #define SYSTEM_PROPERTY_PATH L"__PATH" #include #include class SnmpQueryEventObject : public SnmpInstanceResponseEventObject , public QueryPreprocessor { protected: WmiTreeNode *AllocTypeNode ( void *a_Context , BSTR a_PropertyName , VARIANT &a_Variant , WmiValueNode :: WmiValueFunction a_PropertyFunction , WmiValueNode :: WmiValueFunction a_ConstantFunction , WmiTreeNode *a_Parent ) ; QuadState InvariantEvaluate ( void *a_Context , WmiTreeNode *a_Operator , WmiTreeNode *a_Operand ) ; WmiRangeNode *AllocInfiniteRangeNode ( void *a_Context , BSTR a_PropertyName ) ; QueryPreprocessor :: QuadState Compare ( wchar_t *a_Operand1 , wchar_t *a_Operand2 , DWORD a_Operand1Func , DWORD a_Operand2Func , WmiTreeNode &a_OperatorType ) ; QueryPreprocessor :: QuadState Compare ( LONG a_Operand1 , LONG a_Operand2 , DWORD a_Operand1Func , DWORD a_Operand2Func , WmiTreeNode &a_OperatorType ) ; QueryPreprocessor :: QuadState CompareCaseInsensitiveString ( BSTR a_PropertyName , WmiTreeNode *a_Operator , WmiTreeNode *a_Operand , bool a_Class = false ) ; QueryPreprocessor :: QuadState CompareString ( BSTR a_PropertyName , WmiTreeNode *a_Operator , WmiTreeNode *a_Operand , bool a_Class = false ) ; QueryPreprocessor :: QuadState CompareInteger ( BSTR a_PropertyName , WmiTreeNode *a_Operator , WmiTreeNode *a_Operand ) ; void GetPropertiesToPartition ( ULONG &a_Count , BSTR *&a_Container ) ; SnmpInstanceClassObject *requestObject ; wchar_t *Query ; wchar_t *QueryFormat ; wchar_t *Class ; #ifdef POST_FILTERING_RECEIVED_ROW BOOL Compare ( const LONG & op1 , const LONG & op2 , const DWORD & op1Func , const DWORD & op2Func , const int & operatorType ) ; BOOL Compare ( const wchar_t * & op1 , const wchar_t * & op2 , const DWORD & op1Func , const DWORD & op2Func , const int & operatorType ) ; BOOL Compare ( const SAFEARRAY * & op1 , const SAFEARRAY * & op2 , const DWORD & op1Func , const DWORD & op2Func , const int & operatorType ) ; BOOL ExpressionCompare ( SnmpInstanceClassObject *snmpObject , SQL_LEVEL_1_TOKEN *propertyValue ) ; BOOL RecursivePostEvaluateWhereClause ( SnmpInstanceClassObject *snmpObject , int &index ) ; BOOL PostEvaluateWhereClause ( SnmpInstanceClassObject *snmpObject ) ; #endif //POST_FILTERING_RECEIVED_ROW BOOL CheckWhereCondition ( WbemSnmpErrorObject &a_errorObject , WbemSnmpProperty *property , SQL_LEVEL_1_TOKEN *token ) ; BOOL PreEvaluate ( WbemSnmpErrorObject &a_errorObject ) ; BOOL FilterSelectProperties ( WbemSnmpErrorObject &a_errorObject ) ; BOOL PreEvaluateWhereClause ( WbemSnmpErrorObject &a_errorObject ) ; BOOL IsSystemProperty (const wchar_t *propertyName ) ; private: SQL_LEVEL_1_RPN_EXPRESSION *rpnExpression ; SQL1_Parser parser ; CTextLexSource source ; public: SnmpQueryEventObject ( CImpPropProv *provider , BSTR QueryFormat , BSTR Query , IWbemContext *a_Context ) ; ~SnmpQueryEventObject () ; SnmpClassObject *GetSnmpClassObject () { return & snmpObject ; } SnmpClassObject *GetSnmpRequestClassObject () { return requestObject ; } BOOL Instantiate ( WbemSnmpErrorObject &a_errorObject ) ; } ; class SnmpQueryAsyncEventObject : public SnmpQueryEventObject { private: ULONG state ; IWbemObjectSink *notificationHandler ; protected: public: SnmpQueryAsyncEventObject ( CImpPropProv *provider , BSTR QueryFormat , BSTR Query , IWbemObjectSink *notify , IWbemContext *a_Context ) ; ~SnmpQueryAsyncEventObject () ; void Process () ; void ReceiveRow ( SnmpInstanceClassObject *snmpObject ) ; void ReceiveRow ( IWbemClassObject *snmpObject ) ; void ReceiveComplete () ; } ; #endif // __PROPQUERY_H