Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

563 lines
18 KiB

/*++
Copyright (C) 1996-2001 Microsoft Corporation
Module Name:
MOFPROP.H
Abstract:
History:
--*/
#ifndef __MOFPROP__H_
#define __MOFPROP__H_
#include <miniafx.h>
#include <wbemidl.h>
#include "wstring.h"
#include "parmdefs.h"
#include <wbemutil.h>
//#include "mofparse.h"
#include "trace.h"
#define VT_EX_EMBEDDED (VT_RESERVED | VT_EMBEDDED_OBJECT)
#define SCOPE_CLASS 1
#define SCOPE_INSTANCE 2
#define SCOPE_PROPERTY 4
#define SCOPE_METHOD 8
#define SCOPE_PARAMETER 0X10
#define SCOPE_ASSOCIATION 0X20
#define SCOPE_REFERENCE 0x40
enum QUALSCOPE{CLASSINST_SCOPE, PROPMETH_SCOPE};
enum PARSESTATE {INITIAL, REFLATE_INST, REFLATE_CLASS};
class CMObject;
class CMoClass;
class CMofParse;
class ParseState;
class CMoValue
{
protected:
VARTYPE m_vType;
VARIANT m_varValue;
struct CAlias
{
LPWSTR m_wszAlias;
int m_nArrayIndex;
CAlias() : m_wszAlias(NULL), m_nArrayIndex(-1){}
CAlias(COPY LPCWSTR wszAlias, int nArrayIndex = -1);
~CAlias();
};
CPtrArray m_aAliases; // CAlias*
PDBG m_pDbg;
public:
CMoValue(PDBG pDbg);
~CMoValue();
INTERNAL VARIANT& AccessVariant() {return m_varValue;}
VARTYPE GetType() {return m_vType;}
VARTYPE GetVarType() {return m_varValue.vt;}
void SetType(VARTYPE vType) {m_vType = vType;}
int GetNumAliases() {return m_aAliases.GetSize();}
BOOL GetAlias(IN int nAliasIndeex,
OUT INTERNAL LPWSTR& wszAlias, OUT int& nArrayIndex);
HRESULT AddAlias(COPY LPCWSTR wszAlias, int nArrayIndex = -1);
BOOL Split(COutput & out);
};
//*****************************************************************************
typedef enum {OBJECT, PROP, ARG} QualType;
class CMoQualifier
{
protected:
LPWSTR m_wszName;
CMoValue m_Value;
PDBG m_pDbg;
DWORD m_dwScope;
long m_lFlavor;
bool m_bNotOverrideSet;
bool m_bOverrideSet;
bool m_bIsRestricted;
bool m_bNotToInstance;
bool m_bToInstance;
bool m_bNotToSubclass;
bool m_bToSubclass;
bool m_bAmended;
bool m_bCimDefaultQual;
bool m_bUsingDefaultValue;
public:
CMoQualifier(PDBG pDbg);
~CMoQualifier();
BOOL IsRestricted(){return m_bIsRestricted;};
void SetRestricted(){m_bIsRestricted = TRUE;};
void SetCimDefault(bool bSet){m_bCimDefaultQual = bSet;};
bool IsCimDefault(){return m_bCimDefaultQual;};
void SetUsingDefaultValue(bool bSet){m_bUsingDefaultValue = bSet;};
bool IsUsingDefaultValue(){return m_bUsingDefaultValue;};
HRESULT SetQualName(COPY LPCWSTR wszName);
INTERNAL LPWSTR GetName() {return m_wszName;}
VARIANT * GetpVar(){return & m_Value.AccessVariant();};
VARTYPE GetType(){return m_Value.GetType();};
void SetType(VARTYPE vt){m_Value.SetType(vt);};
bool IsAmended(){return m_bAmended;};
void SetAmended(bool bAmended){m_bAmended = bAmended;};
CMoValue& AccessValue() {return m_Value;}
void SetFlavor(long lFlavor) { m_lFlavor = lFlavor;};
long GetFlavor(void) { return m_lFlavor;};
void OverrideSet(){m_bOverrideSet = TRUE;};
BOOL IsOverrideSet(){return m_bOverrideSet;};
HRESULT SetFlag(int iToken, LPCWSTR pwsText);
BOOL SetScope(int iToken, LPCWSTR pwsText);
DWORD GetScope(){return m_dwScope;};
BOOL Split(COutput & out);
BOOL SplitFlavors( COutput& out );
BOOL IsDisplayable(COutput & out, QualType qt);
BOOL IsLocaleQual( void ) { return wbem_wcsicmp( m_wszName, L"Locale" ) == 0; }
private:
BOOL AddToSet(OLE_MODIFY IWbemQualifierSet* pQualifierSet, BOOL bClass);
friend class CMoQualifierArray;
friend class CBMOFOut;
};
//*****************************************************************************
class CMoQualifierArray
{
protected:
CPtrArray m_aQualifiers;
PDBG m_pDbg;
public:
CMoQualifierArray(PDBG pDbg){m_pDbg = pDbg;}
~CMoQualifierArray();
void RemoveAll(){m_aQualifiers.RemoveAll();};
int GetSize() {return m_aQualifiers.GetSize();}
INTERNAL CMoQualifier* GetAt(int nIndex)
{return (CMoQualifier*) m_aQualifiers[nIndex];}
INTERNAL CMoQualifier* operator[](int nIndex) {return GetAt(nIndex);}
INTERNAL CMoValue* Find(READ_ONLY LPCWSTR wszName);
BOOL Add(ACQUIRE CMoQualifier* pQualifier);
BOOL RegisterAliases(MODIFY CMObject* pObject,
READ_ONLY LPCWSTR wszPropName);
BOOL AddToSet(OLE_MODIFY IWbemQualifierSet* pQualifierSet, BOOL bClass);
BOOL AddToObject(OLE_MODIFY IWbemClassObject* pObject, BOOL bClass);
BOOL AddToPropOrMeth(OLE_MODIFY IWbemClassObject* pObject,
READ_ONLY LPCWSTR wszProperty, BOOL bClass, BOOL bProp);
BOOL Split(COutput & out, QualType qt);
bool HasAmended();
};
//*****************************************************************************
class CMoProperty
{
protected:
LPWSTR m_wszName;
CMoValue m_Value;
LPWSTR m_wszTypeTitle;
PDBG m_pDbg;
CMoQualifierArray* m_paQualifiers;
IWbemClassObject * GetInstPtr(const WCHAR * pClassName, IWbemServices* pNamespace, CMObject * pMo, IWbemContext * pCtx);
public:
CMoProperty(CMoQualifierArray * paQualifiers, PDBG pDbg);
virtual ~CMoProperty();
virtual BOOL IsValueProperty(){return TRUE;};
INTERNAL LPWSTR GetName() {return m_wszName;}
HRESULT SetPropName(COPY LPCWSTR wszName);
HRESULT SetTypeTitle(COPY LPCWSTR wszName);
VARTYPE GetType(){return m_Value.GetType();};
void SetType(VARTYPE vType){m_Value.SetType(vType);};
CMoValue& AccessValue() {return m_Value;}
VARIANT * GetpVar(){return & m_Value.AccessVariant();};
void SetQualifiers(ACQUIRE CMoQualifierArray* pQualifiers);
INTERNAL CMoQualifierArray* GetQualifiers() {return m_paQualifiers;}
virtual BOOL RegisterAliases(MODIFY CMObject* pObject){return TRUE;};
virtual BOOL AddToObject(OLE_MODIFY IWbemClassObject* pObject, IWbemServices* pNamespace, BOOL bClass, IWbemContext * pCtx) = 0;
virtual BOOL Split(COutput & out) = 0;
private:
friend CMObject;
friend CMoClass;
};
class CValueProperty : public CMoProperty
{
protected:
private:
BOOL AddEmbeddedObject(OLE_MODIFY IWbemClassObject* pObject, IWbemServices* pNamespace, IWbemContext * pCtx);
friend CMObject;
friend CMoClass;
BOOL m_bIsArg;
PDBG m_pDbg;
public:
CValueProperty(CMoQualifierArray * paQualifiers, PDBG pDbg);
BOOL RegisterAliases(MODIFY CMObject* pObject);
BOOL AddToObject(OLE_MODIFY IWbemClassObject* pObject, IWbemServices* pNamespace, BOOL bClass, IWbemContext * pCtx);
void SetAsArg(){m_bIsArg = TRUE;};
BOOL Split(COutput & out);
};
class CMoType;
class CMoInstance;
class CMethodProperty : public CMoProperty
{
protected:
enum ParamIDType {UNSPECIFIED, AUTOMATIC, MANUAL, INVALID};
public:
BOOL IsValueProperty(){return FALSE;};
CMethodProperty(CMoQualifierArray * paQualifiers, PDBG pDbg, BOOL bBinary);
~CMethodProperty();
BOOL AddToObject(OLE_MODIFY IWbemClassObject* pObject, IWbemServices* pNamespace, BOOL bClass, IWbemContext * pCtx);
BOOL AddArg(CValueProperty * pAdd){return m_Args.Add(pAdd);};
CMoInstance * GetInObj(){return m_pInObj;};
CMoInstance * GetOutObj(){return m_pOutObj;};
BOOL AddToArgObjects(CMoQualifierArray * paQualifiers, WString & sName, CMoType & Type, BOOL bRetValue,
int & ErrCtx, VARIANT * pVar, CMoValue & Value);
void SetIn(CMoInstance * pIn){m_pInObj = pIn;};
void SetOut(CMoInstance * pOut){m_pOutObj = pOut;};
bool IsIDSpecified(CMoQualifierArray * paQualifiers);
BOOL Split(COutput & out);
BOOL IsDisplayable(COutput & out);
private:
ParamIDType m_IDType;
DWORD m_NextAutoID;
BOOL AddIt(WString & sName, CMoType & Type, BOOL bInput, CMoQualifierArray * paQualifiers,
VARIANT * pVar, CMoValue & Value, BOOL bRetValue, BOOL bSecondPass);
BOOL AddEmbeddedObject(OLE_MODIFY IWbemClassObject* pObject, IWbemServices* pNamespace, IWbemContext * pCtx);
friend CMObject;
friend CMoClass;
CMoInstance * m_pInObj;
CMoInstance * m_pOutObj;
CPtrArray m_Args;
PDBG m_pDbg;
BOOL m_bBinaryMof;
};
//*****************************************************************************
class CMoType
{
protected:
BOOL m_bIsRef;
BOOL m_bIsEmbedding;
BOOL m_bIsArray;
LPWSTR m_wszTitle;
PDBG m_pDbg;
DELETE_ME CMoQualifier* CreateSyntax(READ_ONLY LPCWSTR wszSyntax);
public:
CMoType(PDBG pDbg) : m_bIsRef(FALSE), m_bIsEmbedding(FALSE), m_bIsArray(FALSE),
m_wszTitle(NULL), m_pDbg(pDbg){}
~CMoType();
HRESULT SetTitle(COPY LPCWSTR wszTitle);
INTERNAL LPCWSTR GetTitle() {return m_wszTitle;}
BOOL IsDefined() {return (m_wszTitle != NULL);}
BOOL IsString() {return !wbem_wcsicmp(m_wszTitle, L"string");};
void SetIsRef(BOOL bIsRef) {m_bIsRef = bIsRef;}
BOOL IsRef() {return m_bIsRef;}
void SetIsEmbedding(BOOL bIsEmbedding) {m_bIsEmbedding = bIsEmbedding;}
BOOL IsEmbedding() {return m_bIsEmbedding;}
void SetIsArray(BOOL bIsArray) {m_bIsArray = bIsArray;}
BOOL IsArray() {return m_bIsArray;}
VARTYPE GetCIMType();
bool IsUnsupportedType();
BOOL StoreIntoQualifiers(CMoQualifierArray * pQualifiers);
};
//*****************************************************************************
class CValueLocation
{
public:
virtual ~CValueLocation(){}
virtual HRESULT Set(READ_ONLY VARIANT& varValue,
OLE_MODIFY IWbemClassObject* pObject) = 0;
protected:
HRESULT SetArrayElement(
MODIFY VARIANT& vArray,
int nIndex,
READ_ONLY VARIANT& vValue);
};
class CPropertyLocation : public CValueLocation
{
protected:
LPWSTR m_wszName;
int m_nArrayIndex;
bool m_bOK;
public:
CPropertyLocation(COPY LPCWSTR wszName, int nArrayIndex = -1);
~CPropertyLocation();
virtual HRESULT Set(READ_ONLY VARIANT& varValue,
OLE_MODIFY IWbemClassObject* pObject);
bool IsOK(){return m_bOK;};
};
class CQualifierLocation : public CValueLocation
{
protected:
LPWSTR m_wszName;
LPWSTR m_wszPropName;
int m_nArrayIndex;
PDBG m_pDbg;
bool m_bOK;
public:
CQualifierLocation(COPY LPCWSTR wszName, PDBG pDbg, COPY LPCWSTR wszPropName = NULL,
int nArrayIndex = -1);
~CQualifierLocation();
virtual HRESULT Set(READ_ONLY VARIANT& varValue,
OLE_MODIFY IWbemClassObject* pObject);
bool IsOK(){return m_bOK;};
};
//*****************************************************************************
class CMofAliasCollection
{
public:
virtual INTERNAL LPCWSTR FindAliasee(READ_ONLY LPWSTR wszAlias) = 0;
};
//*****************************************************************************
class CMofParser;
class CMObject
{
protected:
CMoQualifierArray* m_paQualifiers;
CPtrArray m_aProperties; // CMoProperty*
LPWSTR m_wszAlias;
LPWSTR m_wszNamespace;
long m_lDefClassFlags;
long m_lDefInstanceFlags;
BOOL m_bDone;
IWbemClassObject * m_pWbemObj;
LPWSTR m_wszFullPath;
struct CAliasedValue
{
CValueLocation* pLocation;
LPWSTR wszAlias;
CAliasedValue(ACQUIRE CValueLocation* _pLocation,
COPY LPCWSTR _wszAlias);
~CAliasedValue();
};
CPtrArray m_aAliased; // CAliasedValue*
int m_nFirstLine;
LPWSTR m_wFileName;
int m_nLastLine;
bool m_bParameter;
bool m_bAmended;
ParseState m_DataState;
ParseState m_QualState;
bool m_bDeflated;
bool m_bOK;
public:
CMObject();
virtual ~CMObject();
bool IsOK(){return m_bOK;};
ParseState * GetDataState(){return &m_DataState;};
ParseState * GetQualState(){return &m_QualState;};
void SetQualState(ParseState * pNew){if(pNew)m_QualState = *pNew;};
void SetWbemObject(IWbemClassObject *pObj){m_pWbemObj = pObj;};
IWbemClassObject * GetWbemObject(){return m_pWbemObj;};
BOOL IsDone(){return m_bDone;};
void SetDone(){m_bDone = TRUE;};
virtual INTERNAL LPCWSTR GetClassName() = 0;
HRESULT SetNamespace(COPY LPCWSTR wszNamespace);
void SetOtherDefaults(long lClass, long lInst)
{m_lDefClassFlags = lClass;m_lDefInstanceFlags=lInst;return;};
void SetFullPath(BSTR bstr);
INTERNAL LPCWSTR GetNamespace() {return m_wszNamespace;}
long GetClassFlags(void){return m_lDefClassFlags;};
long GetInstanceFlags(void){return m_lDefInstanceFlags;};
HRESULT SetAlias(COPY LPCWSTR wszAlias);
INTERNAL LPCWSTR GetAlias() {return m_wszAlias;}
INTERNAL LPCWSTR GetFullPath() {return m_wszFullPath;}
int GetFirstLine() {return m_nFirstLine;}
int GetLastLine() {return m_nLastLine;}
WCHAR * GetFileName() {return m_wFileName;};
HRESULT SetLineRange(int nFirstLine, int nLastLine, WCHAR * pFileName);
BOOL AddProperty(ACQUIRE CMoProperty* pProperty);
int GetNumProperties() {return m_aProperties.GetSize();}
INTERNAL CMoProperty* GetProperty(int nIndex)
{return (CMoProperty*)m_aProperties[nIndex];}
CMoProperty* GetPropertyByName(WCHAR * pwcName);
int GetNumAliasedValues();
BOOL GetAliasedValue(
IN int nIndex,
OUT INTERNAL LPWSTR& wszAlias);
HRESULT AddAliasedValue(ACQUIRE CValueLocation* pLocation,
COPY LPCWSTR wszAlias);
void SetQualifiers(ACQUIRE CMoQualifierArray* pQualifiers);
INTERNAL CMoQualifierArray* GetQualifiers() {return m_paQualifiers;}
virtual BOOL IsInstance(){return FALSE;};
virtual BOOL IsDelete(){return FALSE;};
public:
virtual HRESULT CreateWbemObject(READ_ONLY IWbemServices* pNamespace,
RELEASE_ME IWbemClassObject** ppObject, IWbemContext * pCtx) = 0;
virtual BOOL ApplyToWbemObject(OLE_MODIFY IWbemClassObject* pObject,IWbemServices* pNamespace, IWbemContext * pCtx) = 0;
virtual HRESULT StoreWbemObject(READ_ONLY IWbemClassObject* pObject,
long lClassFlags, long lInstanceFlags,
OLE_MODIFY IWbemServices* pNamespace, IWbemContext * pCtx,
WCHAR * pUserName, WCHAR * pPassword, WCHAR * pAuthority) = 0;
BOOL ResolveAliasedValue(
IN int nIndex, READ_ONLY LPCWSTR wszPath,
OLE_MODIFY IWbemClassObject* pObject);
HRESULT ResolveAliasesInWbemObject(
OLE_MODIFY IWbemClassObject* pObject,
READ_ONLY CMofAliasCollection* pCollection);
bool CheckIfAmended();
void SetAmended(bool bVal){m_bAmended = bVal;};
bool IsAmended(){return m_bAmended;};
virtual BOOL Split(COutput & out);
virtual void FreeWbemObjectIfPossible();
virtual HRESULT Deflate(bool bDestruct);
virtual HRESULT Reflate(CMofParser & Parser);
protected:
BOOL ApplyToWbemObject(OLE_MODIFY IWbemClassObject* pObject,IWbemServices* pNamespace, BOOL bClass, IWbemContext * pCtx);
};
class CMoClass : public CMObject
{
protected:
LPWSTR m_wszParentName;
LPWSTR m_wszClassName;
BOOL m_bUpdateOnly;
PDBG m_pDbg;
public:
CMoClass(COPY LPCWSTR wszParentName, COPY LPCWSTR wszClassName, PDBG pDbg,
BOOL bUpdateOnly = FALSE);
~CMoClass();
INTERNAL LPCWSTR GetParentName() {return m_wszParentName;}
INTERNAL LPCWSTR GetClassName() {return m_wszClassName;}
HRESULT CreateWbemObject(READ_ONLY IWbemServices* pNamespace,
RELEASE_ME IWbemClassObject** ppObject, IWbemContext * pCtx);
BOOL ApplyToWbemObject(OLE_MODIFY IWbemClassObject* pObject,IWbemServices* pNamespace, IWbemContext * pCtx)
{return CMObject::ApplyToWbemObject(pObject,pNamespace, TRUE, pCtx); /* class */ }
HRESULT StoreWbemObject(READ_ONLY IWbemClassObject* pObject,
long lClassFlags, long lInstanceFlags,
OLE_MODIFY IWbemServices* pNamespace, IWbemContext * pCtx,
WCHAR * pUserName, WCHAR * pPassword, WCHAR * pAuthority);
};
class CMoInstance : public CMObject
{
protected:
LPWSTR m_wszClassName;
PDBG m_pDbg;
public:
CMoInstance(COPY LPCWSTR wszClassName, PDBG m_pDbg, bool bParameter = false);
~CMoInstance();
BOOL IsInput();
INTERNAL LPCWSTR GetClassName() {return m_wszClassName;}
HRESULT CreateWbemObject(READ_ONLY IWbemServices* pNamespace,
RELEASE_ME IWbemClassObject** ppObject, IWbemContext * pCtx);
BOOL ApplyToWbemObject(OLE_MODIFY IWbemClassObject* pObject,IWbemServices* pNamespace, IWbemContext * pCtx)
{return CMObject::ApplyToWbemObject(pObject, pNamespace, FALSE, pCtx); /* instance */ }
HRESULT StoreWbemObject(READ_ONLY IWbemClassObject* pObject,
long lClassFlags, long lInstanceFlags,
OLE_MODIFY IWbemServices* pNamespace, IWbemContext * pCtx,
WCHAR * pUserName, WCHAR * pPassword, WCHAR * pAuthority);
BOOL IsInstance(){return TRUE;};
};
class CMoActionPragma : public CMObject
{
protected:
LPWSTR m_wszClassName;
PDBG m_pDbg;
BOOL m_bFail; // if true, the failure of the delete will stop the compile
BOOL m_bClass;
public:
CMoActionPragma(COPY LPCWSTR wszClassName, PDBG m_pDbg, bool bFail, BOOL bClass);
~CMoActionPragma();
INTERNAL LPCWSTR GetClassName() {return m_wszClassName;}
HRESULT CreateWbemObject(READ_ONLY IWbemServices* pNamespace,
RELEASE_ME IWbemClassObject** ppObject, IWbemContext * pCtx){return S_OK;};
BOOL ApplyToWbemObject(OLE_MODIFY IWbemClassObject* pObject,IWbemServices* pNamespace, IWbemContext * pCtx)
{return TRUE;}
HRESULT StoreWbemObject(READ_ONLY IWbemClassObject* pObject,
long lClassFlags, long lInstanceFlags,
OLE_MODIFY IWbemServices* pNamespace, IWbemContext * pCtx,
WCHAR * pUserName, WCHAR * pPassword, WCHAR * pAuthority);
BOOL IsInstance(){return FALSE;};
BOOL IsDelete(){return TRUE;};
BOOL Split(COutput & out);
};
#endif