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

320 lines
10 KiB
C++

// (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 *> ( 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 <wchar_t *, wchar_t * > ( 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 ; } ;
} ;