// (C) 1999 Microsoft Corporation #define WBEM_PROPERTY_STATUSCODE L"StatusCode" #define WBEM_PROPERTY_PROVIDERSTATUSCODE L"ProviderStatusCode" #define WBEM_PROPERTY_PROVIDERSTATUSMESSAGE L"Description" #define WBEM_QUERY_LANGUAGE_WQL L"WQL" typedef enum tag_WBEMPROVIDERSTATUS { WBEM_PROVIDER_NO_ERROR = 0, WBEM_PROVIDER_S_NO_ERROR = 0, WBEM_PROVIDER_S_NO_MORE_DATA = 0x40001, WBEM_PROVIDER_S_ALREADY_EXISTS = WBEM_PROVIDER_S_NO_MORE_DATA + 1, WBEM_PROVIDER_S_NOT_FOUND = WBEM_PROVIDER_S_ALREADY_EXISTS + 1, WBEM_PROVIDER_S_RESET_TO_DEFAULT = WBEM_PROVIDER_S_NOT_FOUND + 1, WBEM_PROVIDER_E_FAILED = 0x80041001, WBEM_PROVIDER_E_NOT_FOUND = WBEM_PROVIDER_E_FAILED + 1, WBEM_PROVIDER_E_ACCESS_DENIED = WBEM_PROVIDER_E_NOT_FOUND + 1, WBEM_PROVIDER_E_PROVIDER_FAILURE = WBEM_PROVIDER_E_ACCESS_DENIED + 1, WBEM_PROVIDER_E_TYPE_MISMATCH = WBEM_PROVIDER_E_PROVIDER_FAILURE + 1, WBEM_PROVIDER_E_OUT_OF_MEMORY = WBEM_PROVIDER_E_TYPE_MISMATCH + 1, WBEM_PROVIDER_E_INVALID_CONTEXT = WBEM_PROVIDER_E_OUT_OF_MEMORY + 1, WBEM_PROVIDER_E_INVALID_PARAMETER = WBEM_PROVIDER_E_INVALID_CONTEXT + 1, WBEM_PROVIDER_E_NOT_AVAILABLE = WBEM_PROVIDER_E_INVALID_PARAMETER + 1, WBEM_PROVIDER_E_CRITICAL_ERROR = WBEM_PROVIDER_E_NOT_AVAILABLE + 1, WBEM_PROVIDER_E_INVALID_STREAM = WBEM_PROVIDER_E_CRITICAL_ERROR + 1, WBEM_PROVIDER_E_NOT_SUPPORTED = WBEM_PROVIDER_E_INVALID_STREAM + 1, WBEM_PROVIDER_E_INVALID_SUPERCLASS = WBEM_PROVIDER_E_NOT_SUPPORTED + 1, WBEM_PROVIDER_E_INVALID_NAMESPACE = WBEM_PROVIDER_E_INVALID_SUPERCLASS + 1, WBEM_PROVIDER_E_INVALID_OBJECT = WBEM_PROVIDER_E_INVALID_NAMESPACE + 1, WBEM_PROVIDER_E_INVALID_CLASS = WBEM_PROVIDER_E_INVALID_OBJECT + 1, WBEM_PROVIDER_E_PROVIDER_NOT_FOUND = WBEM_PROVIDER_E_INVALID_CLASS + 1, WBEM_PROVIDER_E_INVALID_PROVIDER_REGISTRATION = WBEM_PROVIDER_E_PROVIDER_NOT_FOUND + 1, WBEM_PROVIDER_E_PROVIDER_LOAD_FAILURE = WBEM_PROVIDER_E_INVALID_PROVIDER_REGISTRATION + 1, WBEM_PROVIDER_E_INITIALIZATION_FAILURE = WBEM_PROVIDER_E_PROVIDER_LOAD_FAILURE + 1, WBEM_PROVIDER_E_TRANSPORT_FAILURE = WBEM_PROVIDER_E_INITIALIZATION_FAILURE + 1, WBEM_PROVIDER_E_INVALID_OPERATION = WBEM_PROVIDER_E_TRANSPORT_FAILURE + 1, WBEM_PROVIDER_E_INVALID_QUERY = WBEM_PROVIDER_E_INVALID_OPERATION + 1, WBEM_PROVIDER_E_INVALID_QUERY_TYPE = WBEM_PROVIDER_E_INVALID_QUERY + 1, WBEM_PROVIDER_E_ALREADY_EXISTS = WBEM_PROVIDER_E_INVALID_QUERY_TYPE + 1, WBEM_PROVIDER_E_OVERRIDE_NOT_ALLOWED = WBEM_PROVIDER_E_ALREADY_EXISTS + 1, WBEM_PROVIDER_E_PROPAGATED_QUALIFIER = WBEM_PROVIDER_E_OVERRIDE_NOT_ALLOWED + 1, WBEM_PROVIDER_E_UNEXPECTED = WBEM_PROVIDER_E_PROPAGATED_QUALIFIER + 1, WBEM_PROVIDER_E_ILLEGAL_OPERATION = WBEM_PROVIDER_E_UNEXPECTED + 1, WBEM_PROVIDER_E_CANNOT_BE_KEY = WBEM_PROVIDER_E_ILLEGAL_OPERATION + 1, WBEM_PROVIDER_E_INCOMPLETE_CLASS = WBEM_PROVIDER_E_CANNOT_BE_KEY + 1, WBEM_PROVIDER_E_INVALID_SYNTAX = WBEM_PROVIDER_E_INCOMPLETE_CLASS + 1, WBEM_PROVIDER_E_NONDECORATED_OBJECT = WBEM_PROVIDER_E_INVALID_SYNTAX + 1, WBEM_PROVIDER_E_READ_ONLY = WBEM_PROVIDER_E_NONDECORATED_OBJECT + 1, WBEM_PROVIDER_E_PROVIDER_NOT_CAPABLE = WBEM_PROVIDER_E_READ_ONLY + 1, WBEM_PROVIDER_E_CLASS_HAS_CHILDREN = WBEM_PROVIDER_E_PROVIDER_NOT_CAPABLE + 1, WBEM_PROVIDER_E_CLASS_HAS_INSTANCES = WBEM_PROVIDER_E_CLASS_HAS_CHILDREN + 1 , // Added WBEM_PROVIDER_E_INVALID_PROPERTY = WBEM_PROVIDER_E_CLASS_HAS_INSTANCES + 1 , WBEM_PROVIDER_E_INVALID_QUALIFIER = WBEM_PROVIDER_E_INVALID_PROPERTY + 1 , WBEM_PROVIDER_E_INVALID_PATH = WBEM_PROVIDER_E_INVALID_QUALIFIER + 1 , WBEM_PROVIDER_E_INVALID_PATHKEYPARAMETER = WBEM_PROVIDER_E_INVALID_PATH + 1 , WBEM_PROVIDER_E_MISSINGPATHKEYPARAMETER = WBEM_PROVIDER_E_INVALID_PATHKEYPARAMETER + 1 , WBEM_PROVIDER_E_INVALID_KEYORDERING = WBEM_PROVIDER_E_MISSINGPATHKEYPARAMETER + 1 , WBEM_PROVIDER_E_DUPLICATEPATHKEYPARAMETER = WBEM_PROVIDER_E_INVALID_KEYORDERING + 1 , WBEM_PROVIDER_E_MISSINGKEY = WBEM_PROVIDER_E_DUPLICATEPATHKEYPARAMETER + 1 , WBEM_PROVIDER_E_INVALID_TRANSPORT = WBEM_PROVIDER_E_MISSINGKEY + 1 , WBEM_PROVIDER_E_INVALID_TRANSPORTCONTEXT = WBEM_PROVIDER_E_INVALID_TRANSPORT + 1 , WBEM_PROVIDER_E_TRANSPORT_ERROR = WBEM_PROVIDER_E_INVALID_TRANSPORTCONTEXT + 1 , WBEM_PROVIDER_E_TRANSPORT_NO_RESPONSE = WBEM_PROVIDER_E_TRANSPORT_ERROR + 1 , WBEM_PROVIDER_E_NOWRITABLEPROPERTIES = WBEM_PROVIDER_E_TRANSPORT_NO_RESPONSE + 1 , WBEM_PROVIDER_E_NOREADABLEPROPERTIES = WBEM_PROVIDER_E_NOWRITABLEPROPERTIES + 1 } WBEMPROVIDERSTATUS; #define DllImport __declspec( dllimport ) #define DllExport __declspec( dllexport ) #ifdef PROVIDERINIT #define DllImportExport DllExport #else #define DllImportExport DllImport #endif DllImportExport wchar_t *DbcsToUnicodeString ( const char *dbcsString ) ; DllImportExport char *UnicodeToDbcsString ( const wchar_t *unicodeString ) ; DllImportExport wchar_t *UnicodeStringAppend ( const wchar_t *prefix , const wchar_t *suffix ) ; DllImportExport wchar_t *UnicodeStringDuplicate ( const wchar_t *string ) ; class DllImportExport CBString { private: BSTR m_pString; public: CBString() { m_pString = NULL; } CBString(int nSize); CBString(WCHAR* pwszString); ~CBString(); BSTR GetString() { return m_pString; } const CBString& operator=(LPWSTR pwszString) { if(m_pString) { SysFreeString(m_pString); } m_pString = SysAllocString(pwszString); return *this; } }; #if _MSC_VER >= 1100 template <> DllImportExport UINT AFXAPI HashKey ( wchar_t *key ) ; #else DllImportExport UINT HashKey ( wchar_t *key ) ; #endif #if _MSC_VER >= 1100 typedef wchar_t * HmmHack_wchar_t ; template<> DllImportExport BOOL AFXAPI CompareElements ( const HmmHack_wchar_t *pElement1, const HmmHack_wchar_t *pElement2 ) ; #else DllImportExport BOOL CompareElements ( wchar_t **pElement1, wchar_t **pElement2 ) ; #endif union ProviderLexiconValue { LONG signedInteger ; ULONG unsignedInteger ; wchar_t *token ; } ; class ProviderAnalyser; class DllImportExport ProviderLexicon { friend ProviderAnalyser ; public: enum LexiconToken { TOKEN_ID , SIGNED_INTEGER_ID , UNSIGNED_INTEGER_ID , COLON_ID , COMMA_ID , OPEN_PAREN_ID , CLOSE_PAREN_ID , DOT_ID , DOTDOT_ID , PLUS_ID , MINUS_ID , EOF_ID, WHITESPACE_ID, INVALID_ID, USERDEFINED_ID } ; private: wchar_t *tokenStream ; ULONG position ; LexiconToken token ; ProviderLexiconValue value ; protected: public: ProviderLexicon () ; ~ProviderLexicon () ; void SetToken ( ProviderLexicon :: LexiconToken a_Token ) ; ProviderLexicon :: LexiconToken GetToken () ; ProviderLexiconValue *GetValue () ; } ; #define ANALYSER_ACCEPT_STATE 10000 #define ANALYSER_REJECT_STATE 10001 /* User defined states should be greater than 20000 */ class DllImportExport ProviderAnalyser { private: wchar_t *stream ; ULONG position ; BOOL status ; ProviderLexicon *GetToken ( BOOL unSignedIntegersOnly = FALSE , BOOL leadingIntegerZeros = FALSE , BOOL eatSpace = TRUE ) ; protected: virtual void Initialise () {} ; virtual ProviderLexicon *CreateLexicon () { return new ProviderLexicon ; } virtual BOOL Analyse ( ProviderLexicon *lexicon , ULONG &state , const wchar_t token , const wchar_t *tokenStream , ULONG &position , BOOL unSignedIntegersOnly , BOOL leadingIntegerZeros , BOOL eatSpace ) { return FALSE ; } public: ProviderAnalyser ( const wchar_t *tokenStream = NULL ) ; virtual ~ProviderAnalyser () ; void Set ( const wchar_t *tokenStream ) ; ProviderLexicon *Get ( BOOL unSignedIntegersOnly = FALSE , BOOL leadingIntegerZeros = FALSE , BOOL eatSpace = TRUE ) ; void PutBack ( const ProviderLexicon *token ) ; virtual operator void * () ; static BOOL IsEof ( wchar_t token ) ; static BOOL IsLeadingDecimal ( wchar_t token ) ; static BOOL IsDecimal ( wchar_t token ) ; static BOOL IsOctal ( wchar_t token ) ; static BOOL IsHex ( wchar_t token ) ; static BOOL IsAlpha ( wchar_t token ) ; static BOOL IsAlphaNumeric ( wchar_t token ) ; static BOOL IsWhitespace ( wchar_t token ) ; static ULONG OctWCharToDecInteger ( wchar_t token ) ; static ULONG HexWCharToDecInteger ( wchar_t token ) ; static ULONG DecWCharToDecInteger ( wchar_t token ) ; static wchar_t DecIntegerToHexWChar ( UCHAR integer ) ; static wchar_t DecIntegerToDecWChar ( UCHAR integer ) ; static wchar_t DecIntegerToOctWChar ( UCHAR integer ) ; static ULONG OctCharToDecInteger ( char token ) ; static ULONG HexCharToDecInteger ( char token ) ; static ULONG DecCharToDecInteger ( char token ) ; static char DecIntegerToHexChar ( UCHAR integer ) ; static char DecIntegerToDecChar ( UCHAR integer ) ; static char DecIntegerToOctChar ( UCHAR integer ) ; } ; class __declspec ( dllexport ) WbemProviderErrorObject { private: WCHAR *m_ProviderErrorMessage ; WBEMPROVIDERSTATUS m_ProviderErrorStatus ; WBEMSTATUS m_wbemErrorStatus ; protected: public: WbemProviderErrorObject () : m_ProviderErrorMessage ( NULL ) , m_wbemErrorStatus ( WBEM_NO_ERROR ) , m_ProviderErrorStatus ( WBEM_PROVIDER_NO_ERROR ) {} ; virtual ~WbemProviderErrorObject () { delete [] m_ProviderErrorMessage ; } ; void SetStatus ( WBEMPROVIDERSTATUS a_ProviderErrorStatus ) { m_ProviderErrorStatus = a_ProviderErrorStatus ; } ; void SetWbemStatus ( WBEMSTATUS a_wbemErrorStatus ) { m_wbemErrorStatus = a_wbemErrorStatus ; } ; void SetMessage ( wchar_t *a_ProviderErrorMessage ) { #ifdef UNICODE DebugMacro1 ( if ( a_ProviderErrorMessage ) { ProvDebugLog :: s_ProvDebugLog->Write ( _TEXT("\r\nWbemProviderErrorObject :: SetMessage ( (%s) )") , a_ProviderErrorMessage ) ; } ) #else DebugMacro1 ( if ( a_ProviderErrorMessage ) { ProvDebugLog :: s_ProvDebugLog->Write ( _TEXT("\r\nWbemProviderErrorObject :: SetMessage ( (%S) )") , a_ProviderErrorMessage ) ; } ) #endif delete [] m_ProviderErrorMessage ; m_ProviderErrorMessage = UnicodeStringDuplicate ( a_ProviderErrorMessage ) ; } ; wchar_t *GetMessage () { return m_ProviderErrorMessage ; } ; WBEMPROVIDERSTATUS GetStatus () { return m_ProviderErrorStatus ; } ; WBEMSTATUS GetWbemStatus () { return m_wbemErrorStatus ; } ; } ;