|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////
//
// Microsoft WMI OLE DB Provider
// (C) Copyright 1999 Microsoft Corporation. All Rights Reserved.
//
// Utility object versions for synthesized rowsets.
//
////////////////////////////////////////////////////////////////////////////////////////////////////////
#ifndef __SCHEMA_INCL__
#define __SCHEMA_INCL__
#include "headers.h"
#define SOURCES_ROWSET 10
#define PROVIDER_TYPES_ROWSET 20
#define CATALOGS_ROWSET 30
#define COLUMNS_ROWSET 40
#define TABLES_ROWSET 60
#define PRIMARY_KEYS_ROWSET 70
#define TABLES_INFO_ROWSET 80
#define PROCEDURES_ROWSET 90
#define PROCEDURE_PARAMETERS_ROWSET 100
/////////////////////////////////////////////////////////////////////////////////////////////
// The Schema rowset definitions
/////////////////////////////////////////////////////////////////////////////////////////////
// FOR THE PROVIDER_TYPES ROWSET
typedef struct _CIMTypeInfo { WCHAR * wcsTypeName; short DataType; unsigned long ColumnSize; // WCHAR * LiteralPrefix; Same values for all rows, so hardcoded in function
// WCHAR * LiteralSuffix; Same values for all rows, so hardcoded in function
// WCHAR * CreateParams; Same values for all rows, so hardcoded in function
// CIM_BOOLEAN IsNullable; Same values for all rows, so hardcoded in function
// CIM_BOOLEAN CaseSensitive; Same values for all rows, so hardcoded in function
// CIM_UINT32 Searchable; Same values for all rows, so hardcoded in function
BOOL UnsignedAttribute; // CIM_BOOLEAN FixedPrec; Same values for all rows, so hardcoded in function
// CIM_BOOLEAN AutoUnique; Same values for all rows, so hardcoded in function
// WCHAR * LocalTypeName; Same values for all rows, so hardcoded in function
// CIM_SINT16 MinimumScale; Same values for all rows, so hardcoded in function
// CIM_SINT16 MaximumScale; Same values for all rows, so hardcoded in function
// DBTYPE_GUID Guid;
// WCHAR * TypeLib; Same values for all rows, so hardcoded in function
// WCHAR * Version; Same values for all rows, so hardcoded in function
// CIM_BOOLEAN IsLong; Same values for all rows, so hardcoded in function
// CIM_BOOLEAN BestMatch; Same values for all rows, so hardcoded in function
// CIM_BOOLEAN IsFixedLength; Same values for all rows, so hardcoded in function
}CIMTypeInfo;
typedef struct _SchemaRowsetDefinition { LPWSTR wcsColumnName; CIMTYPE Type;
} SchemaRowsetDefinition;
////////////////////////////////////////////////////////////////////////////////////////////////////////
// SCHEMA BASE CLASS
//
// This class is used by one of the many CSchema__xxx classes to retrieve schema information.
//
////////////////////////////////////////////////////////////////////////////////////////////////////////
class CSchema : public CRowset { int m_nTableId;
HRESULT GetTableName(WCHAR *pTableName);
public:
STDMETHODIMP FInit( ULONG cPropertySets, // IN Count of properties
DBPROPSET rgProperties[], // IN Properties array
REFIID riid, // IN riid for IRowset object
IUnknown *pUnkOuter, // IN Outer unknown
IUnknown **ppIRowset, // OUT Newly-created IRowset interface
WCHAR * wcsSpecificTable );
protected: //=========================================================================
// These are functions a derived class needs to call (only on base).
// Protected so only a derived class can use.
//=========================================================================
CSchema (LPUNKNOWN pUnkOuter, int nTableId,PCDBSESSION pObj );
//=========================================================================
// Sets the rowset property corresponding to the requested interface
// if the requested interface is available on a read-only rowset.
//=========================================================================
HRESULT SetReadOnlyProperty( CUtilProp* pRowsetProps, REFIID riid);
protected: virtual ~CSchema(); //Clients must use Release().
}; ////////////////////////////////////////////////////////////////////////////////////////////////
//
// Schema Command object for CATALOGS rowset.
//
////////////////////////////////////////////////////////////////////////////////////////////////
class CSchema_Catalogs: public CSchema { public: CSchema_Catalogs(LPUNKNOWN pUnkOuter,PCDBSESSION pObj ):CSchema(pUnkOuter,CATALOGS_ROWSET,pObj) {};
};
////////////////////////////////////////////////////////////////////////////////////////////////
//
// Schema Command object for PROVIDER_TYPES rowset.
//
////////////////////////////////////////////////////////////////////////////////////////////////
class CSchema_Provider_Types: public CSchema { public: CSchema_Provider_Types(LPUNKNOWN pUnkOuter,PCDBSESSION pObj ):CSchema(pUnkOuter,PROVIDER_TYPES_ROWSET,pObj) {};
};
////////////////////////////////////////////////////////////////////////////////////////////////
//
// Schema Command object for COLUMNS rowset.
//
////////////////////////////////////////////////////////////////////////////////////////////////
class CSchema_Columns: public CSchema { public: CSchema_Columns(LPUNKNOWN pUnkOuter,PCDBSESSION pObj ):CSchema(pUnkOuter,COLUMNS_ROWSET,pObj) {};
};
////////////////////////////////////////////////////////////////////////////////////////////////
//
// Schema Command object for TABLES rowset.
//
////////////////////////////////////////////////////////////////////////////////////////////////
class CSchema_Tables: public CSchema { public: CSchema_Tables(LPUNKNOWN pUnkOuter,PCDBSESSION pObj ):CSchema(pUnkOuter,TABLES_ROWSET,pObj) {};
};
////////////////////////////////////////////////////////////////////////////////////////////////
//
// Schema Command object for primary keys rowset.
//
////////////////////////////////////////////////////////////////////////////////////////////////
class CSchema_Primary_Keys: public CSchema { public: CSchema_Primary_Keys(LPUNKNOWN pUnkOuter,PCDBSESSION pObj ):CSchema(pUnkOuter,PRIMARY_KEYS_ROWSET,pObj) {};
};
////////////////////////////////////////////////////////////////////////////////////////////////
//
// Schema Command object for TABLES_INFO rowset.
//
////////////////////////////////////////////////////////////////////////////////////////////////
class CSchema_Tables_Info: public CSchema { public: CSchema_Tables_Info(LPUNKNOWN pUnkOuter,PCDBSESSION pObj ):CSchema(pUnkOuter,TABLES_INFO_ROWSET,pObj) {};
}; ////////////////////////////////////////////////////////////////////////////////////////////////
//
// Schema Command object for Sources rowset.
//
////////////////////////////////////////////////////////////////////////////////////////////////
class CSchema_ISourcesRowset: public CSchema { public: CSchema_ISourcesRowset(LPUNKNOWN pUnkOuter,PCDBSESSION pObj ):CSchema(pUnkOuter,SOURCES_ROWSET,pObj) {}
}; ////////////////////////////////////////////////////////////////////////////////////////////////
//
// Schema object for Procedures rowset.
//
////////////////////////////////////////////////////////////////////////////////////////////////
class CSchema_Procedures: public CSchema { public: CSchema_Procedures(LPUNKNOWN pUnkOuter,PCDBSESSION pObj ):CSchema(pUnkOuter,PROCEDURES_ROWSET,pObj) {}; };
////////////////////////////////////////////////////////////////////////////////////////////////
//
// Schema object for PROCEDURES_PARAMETERS rowset.
//
////////////////////////////////////////////////////////////////////////////////////////////////
class CSchema_Procedure_Parameters: public CSchema { public: CSchema_Procedure_Parameters(LPUNKNOWN pUnkOuter,PCDBSESSION pObj ) :CSchema(pUnkOuter,PROCEDURE_PARAMETERS_ROWSET,pObj) {}; };
////////////////////////////////////////////////////////////////////////////////////////////////
class CImpIDBSchemaRowset : public IDBSchemaRowset //@base public | IDBSchemaRowset
{ private: enum eRestrictionSupport{ eSup_CATALOGS = 0x00, // Allow nothing
eSup_COLUMNS = 0x07, // Allow the first 3 columns as a restriction
eSup_PRIMARY_KEYS = 0x07, // Allow the first 3 columns as a restriction
eSup_PROCEDURE_PARAMETERS = 0x03, // Allow the first 2 columns as a restriction
eSup_PROCEDURES = 0x03, // Allow the first 2 columns as a restriction
eSup_PROVIDER_TYPES = 0x00, // Allow nothing
eSup_TABLES = 0x07, // Allow the first 3 columns as a restriction
eSup_TABLES_INFO = 0x07, // Allow the first 3 columns as a restriction
eSup_LINKEDSERVERS = 0x01, // 1 out of 1
};
public: CImpIDBSchemaRowset(PCDBSESSION pCDBSession){ DEBUGCODE(m_cRef = 0L); m_pCDBSession = pCDBSession; } ~CImpIDBSchemaRowset() {assert(m_cRef == 0);}
STDMETHODIMP_(ULONG) AddRef(void) { DEBUGCODE(InterlockedIncrement((long*)&m_cRef)); return m_pCDBSession->GetOuterUnknown()->AddRef(); } STDMETHODIMP_(ULONG) Release(void) { DEBUGCODE(long lRef = InterlockedDecrement((long*)&m_cRef); if( lRef < 0 ){ ASSERT("Reference count on Object went below 0!") }) return m_pCDBSession->GetOuterUnknown()->Release(); }
STDMETHODIMP QueryInterface(REFIID riid, LPVOID *ppv) { return m_pCDBSession->GetOuterUnknown()->QueryInterface(riid, ppv); }
STDMETHODIMP GetRowset( IUnknown *pUnkOuter, REFGUID rguidSchema, ULONG cRestrictions, const VARIANT rgRestrictions[], REFIID riid, ULONG cProperties, DBPROPSET rgProperties[], IUnknown **ppRowset); STDMETHODIMP GetSchemas( ULONG *pcSchemas, GUID **ppSchemas, ULONG **prgRestrictionSupport );
private: DEBUGCODE(ULONG m_cRef); PCDBSESSION m_pCDBSession; };
typedef CImpIDBSchemaRowset *PIMPIDBSCHEMAROWSET;
//////////////////////////////////////////////////////////////////////////////////////////////
class CWbemSchemaClassInstanceWrapper : public CWbemClassInstanceWrapper { protected: ULONG m_uCurrentIndex; int m_nMaxColumns;
public: CWbemSchemaClassInstanceWrapper(CWbemClassParameters * p); ~CWbemSchemaClassInstanceWrapper();
void SetIndex(ULONG u) { m_uCurrentIndex = u;} void AddToKeyList(WCHAR *& pwcsKeyList, WCHAR * wcsKey );
virtual HRESULT ResetInstanceFromKey(CBSTR Key) { return CWbemClassInstanceWrapper::ResetInstanceFromKey(Key); } virtual HRESULT GetKey(CBSTR & Key) { return CWbemClassInstanceWrapper::GetKey(Key);} virtual HRESULT RefreshInstance() { return CWbemClassInstanceWrapper::RefreshInstance(); } virtual WCHAR * GetClassName() { return CWbemClassInstanceWrapper::GetClassName(); }
HRESULT GetClassProperty(WCHAR * wcsProperty, VARIANT * v, CIMTYPE * pType , LONG * plFlavor ); virtual HRESULT GetSchemaProperty(WCHAR * wcsProperty, VARIANT * v, CIMTYPE * pType , LONG * plFlavor )=0; }; //////////////////////////////////////////////////////////////////////////////////////////////
// Works with just the schema classes
//////////////////////////////////////////////////////////////////////////////////////////////
class CWbemSchemaClassDefinitionWrapper : public CWbemClassDefinitionWrapper { protected: int m_nSchemaClassIndex; int m_nMaxColumns;
public: CWbemSchemaClassDefinitionWrapper(CWbemClassParameters * p); ~CWbemSchemaClassDefinitionWrapper();
HRESULT ValidClass();
HRESULT TotalPropertiesInClass(ULONG & ulPropCount, ULONG &ulSysPropCount); HRESULT BeginPropertyEnumeration(); HRESULT EndPropertyEnumeration(); virtual HRESULT GetNextProperty(BSTR * pProperty, VARIANT * vValue, CIMTYPE * pType ,LONG * plFlavor ) { return CWbemClassDefinitionWrapper::GetNextProperty(pProperty,vValue,pType,plFlavor);} HRESULT BeginPropertyQualifierEnumeration(BSTR strPropName);
}; ///////////////////////////////////////////////////////////////////////////////////////////////////
class CWbemSchemaInstanceList: public CWbemInstanceList { protected: ULONG m_ulMaxRow; WCHAR * m_pwcsSpecificClass; IWbemClassObject * m_pSpecificClass; BOOL m_fGotThemAll; public: CWbemSchemaInstanceList(CWbemClassParameters * p); CWbemSchemaInstanceList(CWbemClassParameters * p,WCHAR * pSpecific); ~CWbemSchemaInstanceList();
virtual HRESULT Reset()=0; virtual HRESULT NextInstance(CBSTR & Key, CWbemClassInstanceWrapper ** p) { return CWbemInstanceList::NextInstance(Key,p);} virtual HRESULT PrevInstance( CBSTR & Key, CWbemClassInstanceWrapper *& p){ if( !m_pwcsSpecificClass ){ return CWbemInstanceList::PrevInstance(Key,p);} return S_OK;} HRESULT ResetTheSpecificClass(); HRESULT GetTheSpecificClass();
}; //////////////////////////////////////////////////////////////////////////////////////////////
//********************************************************************************************
//
// Classes for the Sources schema rowset
//
//********************************************************************************************
//////////////////////////////////////////////////////////////////////////////////////////////
class CWbemSchemaSourcesClassDefinitionWrapper: public CWbemSchemaClassDefinitionWrapper { private:
public: CWbemSchemaSourcesClassDefinitionWrapper(CWbemClassParameters * p); ~CWbemSchemaSourcesClassDefinitionWrapper() {} HRESULT GetNextProperty(BSTR * pProperty, VARIANT * vValue,CIMTYPE * pType , LONG * plFlavor );
}; class CWbemSchemaSourcesInstanceWrapper: public CWbemSchemaClassInstanceWrapper { private:
public: CWbemSchemaSourcesInstanceWrapper(CWbemClassParameters * p) : CWbemSchemaClassInstanceWrapper(p) { } ~CWbemSchemaSourcesInstanceWrapper() {} HRESULT GetSchemaProperty(WCHAR * wcsProperty, VARIANT * v, CIMTYPE * pType , LONG * plFlavor ); };
class CWbemSchemaSourcesInstanceList: public CWbemSchemaInstanceList { private:
public: CWbemSchemaSourcesInstanceList(CWbemClassParameters * p) : CWbemSchemaInstanceList(p) {m_nBaseType = SOURCES_ROWSET;} ~CWbemSchemaSourcesInstanceList() {} HRESULT Reset(); };
//////////////////////////////////////////////////////////////////////////////////////////////
//********************************************************************************************
//
// Classes for the Provider Types schema rowset
//
//********************************************************************************************
//////////////////////////////////////////////////////////////////////////////////////////////
class CWbemSchemaProviderTypesClassDefinitionWrapper: public CWbemSchemaClassDefinitionWrapper { private:
public: CWbemSchemaProviderTypesClassDefinitionWrapper(CWbemClassParameters * p); ~CWbemSchemaProviderTypesClassDefinitionWrapper() {} HRESULT GetNextProperty(BSTR * pProperty, VARIANT * vValue,CIMTYPE * pType , LONG * plFlavor ); HRESULT ResetInstanceFromKey(CBSTR Key); }; class CWbemSchemaProviderTypesInstanceWrapper: public CWbemSchemaClassInstanceWrapper { private:
public: CWbemSchemaProviderTypesInstanceWrapper(CWbemClassParameters * p) : CWbemSchemaClassInstanceWrapper(p) { } ~CWbemSchemaProviderTypesInstanceWrapper() {} HRESULT GetSchemaProperty(WCHAR * wcsProperty, VARIANT * v, CIMTYPE * pType , LONG * plFlavor ); HRESULT GetKey(CBSTR & Key); HRESULT ResetInstanceFromKey(CBSTR Key); HRESULT RefreshInstance(); WCHAR * GetClassName(); }; class CWbemSchemaProviderTypesInstanceList: public CWbemSchemaInstanceList { private:
public: CWbemSchemaProviderTypesInstanceList(CWbemClassParameters * p) : CWbemSchemaInstanceList(p) {m_nBaseType = PROVIDER_TYPES_ROWSET;} ~CWbemSchemaProviderTypesInstanceList(){} HRESULT Reset(); HRESULT NextInstance(CBSTR & Key, CWbemClassInstanceWrapper ** p);
};
//////////////////////////////////////////////////////////////////////////////////////////////
//********************************************************************************************
//
// Classes for the Catalogs schema rowset
//
//********************************************************************************************
//////////////////////////////////////////////////////////////////////////////////////////////
class CWbemSchemaCatalogsClassDefinitionWrapper: public CWbemSchemaClassDefinitionWrapper { private:
public: CWbemSchemaCatalogsClassDefinitionWrapper(CWbemClassParameters * p); ~CWbemSchemaCatalogsClassDefinitionWrapper() {} HRESULT GetNextProperty(BSTR * pProperty, VARIANT * vValue,CIMTYPE * pType , LONG * plFlavor ); }; class CWbemSchemaCatalogsInstanceWrapper: public CWbemSchemaClassInstanceWrapper { private:
public: CWbemSchemaCatalogsInstanceWrapper(CWbemClassParameters * p) : CWbemSchemaClassInstanceWrapper(p) { } ~CWbemSchemaCatalogsInstanceWrapper() {} HRESULT GetSchemaProperty(WCHAR * wcsProperty, VARIANT * v, CIMTYPE * pType , LONG * plFlavor ); }; class CWbemSchemaCatalogsInstanceList: public CWbemSchemaInstanceList { private:
public: CWbemSchemaCatalogsInstanceList(CWbemClassParameters * p) : CWbemSchemaInstanceList(p) { m_nBaseType = CATALOGS_ROWSET; } ~CWbemSchemaCatalogsInstanceList() {} HRESULT Reset(); };
//////////////////////////////////////////////////////////////////////////////////////////////
//********************************************************************************************
//
// Classes for the COlumns schema rowset
//
//********************************************************************************************
//////////////////////////////////////////////////////////////////////////////////////////////
class CWbemSchemaColumnsClassDefinitionWrapper : public CWbemSchemaClassDefinitionWrapper { private:
public: CWbemSchemaColumnsClassDefinitionWrapper(CWbemClassParameters * p); ~CWbemSchemaColumnsClassDefinitionWrapper() {} HRESULT GetNextProperty(BSTR * pProperty, VARIANT * vValue,CIMTYPE * pType , LONG * plFlavor ); };
class CWbemSchemaColumnsInstanceWrapper: public CWbemSchemaClassInstanceWrapper { private: cRowColumnInfoMemMgr * m_pColumns;
public: CWbemSchemaColumnsInstanceWrapper(CWbemClassParameters * p) : CWbemSchemaClassInstanceWrapper(p) { m_pColumns=NULL;} ~CWbemSchemaColumnsInstanceWrapper() {}
void SetColumnsPtr(cRowColumnInfoMemMgr * p) { m_pColumns = p; } HRESULT GetSchemaProperty(WCHAR * wcsProperty, VARIANT * v, CIMTYPE * pType , LONG * plFlavor ); HRESULT GetKey(CBSTR & Key);
}; class CWbemSchemaColumnsInstanceList: public CWbemSchemaInstanceList { private: LONG m_lColumnIndex; cRowColumnInfoMemMgr m_Columns; HRESULT GetColumnInformation(CWbemClassInstanceWrapper * p); void FreeColumns() { m_Columns.FreeColumnNameList(); m_Columns.FreeColumnInfoList();}
public: CWbemSchemaColumnsInstanceList(CWbemClassParameters * p,WCHAR * pSpecific) : CWbemSchemaInstanceList(p, pSpecific) { m_lColumnIndex = -1; m_nBaseType = COLUMNS_ROWSET;} ~CWbemSchemaColumnsInstanceList() {FreeColumns();} DBCOUNTITEM GetTotalColumns() { return m_Columns.GetTotalNumberOfColumns(); } HRESULT Reset(); HRESULT NextInstance( CBSTR & Key, CWbemClassInstanceWrapper ** pInst );
};
//////////////////////////////////////////////////////////////////////////////////////////////
//********************************************************************************************
//
// Classes for the Tables schema rowset
//
//********************************************************************************************
//////////////////////////////////////////////////////////////////////////////////////////////
class CWbemSchemaTablesClassDefinitionWrapper: public CWbemSchemaClassDefinitionWrapper { private:
public: CWbemSchemaTablesClassDefinitionWrapper(CWbemClassParameters * p); ~CWbemSchemaTablesClassDefinitionWrapper() {} HRESULT GetNextProperty(BSTR * pProperty, VARIANT * vValue,CIMTYPE * pType , LONG * plFlavor ); }; class CWbemSchemaTablesInstanceWrapper: public CWbemSchemaClassInstanceWrapper { private:
public: CWbemSchemaTablesInstanceWrapper(CWbemClassParameters * p) : CWbemSchemaClassInstanceWrapper(p) { } ~CWbemSchemaTablesInstanceWrapper() {} HRESULT GetSchemaProperty(WCHAR * wcsProperty, VARIANT * v, CIMTYPE * pType , LONG * plFlavor ); }; class CWbemSchemaTablesInstanceList: public CWbemSchemaInstanceList { private:
public: CWbemSchemaTablesInstanceList(CWbemClassParameters * p,WCHAR * pSpecific) : CWbemSchemaInstanceList(p, pSpecific) {m_nBaseType = TABLES_ROWSET;} ~CWbemSchemaTablesInstanceList() {} HRESULT Reset(); HRESULT NextInstance( CBSTR & Key, CWbemClassInstanceWrapper ** pInst );
}; //////////////////////////////////////////////////////////////////////////////////////////////
//********************************************************************************************
//
// Classes for the Primary Keys schema rowset
//
//********************************************************************************************
//////////////////////////////////////////////////////////////////////////////////////////////
class CWbemSchemaPrimaryKeysClassDefinitionWrapper : public CWbemSchemaClassDefinitionWrapper { private:
public: CWbemSchemaPrimaryKeysClassDefinitionWrapper(CWbemClassParameters * p); ~CWbemSchemaPrimaryKeysClassDefinitionWrapper() {} HRESULT GetNextProperty(BSTR * pProperty, VARIANT * vValue,CIMTYPE * pType , LONG * plFlavor ); }; class CWbemSchemaPrimaryKeysInstanceWrapper: public CWbemSchemaClassInstanceWrapper { private:
public: CWbemSchemaPrimaryKeysInstanceWrapper(CWbemClassParameters * p) : CWbemSchemaClassInstanceWrapper(p) { } ~CWbemSchemaPrimaryKeysInstanceWrapper() {} HRESULT GetSchemaProperty(WCHAR * wcsProperty, VARIANT * v, CIMTYPE * pType , LONG * plFlavor ); }; class CWbemSchemaPrimaryKeysInstanceList: public CWbemSchemaInstanceList { private:
public:
CWbemSchemaPrimaryKeysInstanceList(CWbemClassParameters * p,WCHAR * pSpecific) : CWbemSchemaInstanceList(p, pSpecific) { m_nBaseType = PRIMARY_KEYS_ROWSET;} ~CWbemSchemaPrimaryKeysInstanceList() {} HRESULT Reset(); HRESULT NextInstance( CBSTR & Key, CWbemClassInstanceWrapper ** pInst );
};
//////////////////////////////////////////////////////////////////////////////////////////////
//********************************************************************************************
//
// Classes for the Tables Info schema rowset
//
//********************************************************************************************
//////////////////////////////////////////////////////////////////////////////////////////////
class CWbemSchemaTablesInfoClassDefinitionWrapper: public CWbemSchemaClassDefinitionWrapper { private:
public: CWbemSchemaTablesInfoClassDefinitionWrapper(CWbemClassParameters * p); ~CWbemSchemaTablesInfoClassDefinitionWrapper() {} HRESULT GetNextProperty(BSTR * pProperty, VARIANT * vValue,CIMTYPE * pType , LONG * plFlavor ); }; class CWbemSchemaTablesInfoInstanceWrapper: public CWbemSchemaClassInstanceWrapper { private:
public: CWbemSchemaTablesInfoInstanceWrapper(CWbemClassParameters * p) : CWbemSchemaClassInstanceWrapper(p) {} ~CWbemSchemaTablesInfoInstanceWrapper() {} HRESULT GetSchemaProperty(WCHAR * wcsProperty, VARIANT * v, CIMTYPE * pType , LONG * plFlavor ); }; class CWbemSchemaTablesInfoInstanceList: public CWbemSchemaInstanceList { private:
public: CWbemSchemaTablesInfoInstanceList(CWbemClassParameters * p,WCHAR * pSpecific) : CWbemSchemaInstanceList(p,pSpecific) {m_nBaseType = TABLES_INFO_ROWSET;} ~CWbemSchemaTablesInfoInstanceList() {} HRESULT Reset(); HRESULT NextInstance( CBSTR & Key, CWbemClassInstanceWrapper ** pInst ); };
//////////////////////////////////////////////////////////////////////////////////////////////
//********************************************************************************************
//
// Classes for the Procedures schema rowset
//
//********************************************************************************************
//////////////////////////////////////////////////////////////////////////////////////////////
class CWbemSchemaProceduresClassDefinitionWrapper: public CWbemSchemaClassDefinitionWrapper { private:
public: CWbemSchemaProceduresClassDefinitionWrapper(CWbemClassParameters * p); ~CWbemSchemaProceduresClassDefinitionWrapper() {} HRESULT GetNextProperty(BSTR * pProperty, VARIANT * vValue,CIMTYPE * pType , LONG * plFlavor ); };
class CWbemSchemaProceduresInstanceWrapper: public CWbemSchemaClassInstanceWrapper { protected: CBSTR m_bstrCurrentMethodName; IWbemClassObject * m_pInClass; IWbemClassObject * m_pOutClass;
public: CWbemSchemaProceduresInstanceWrapper(CWbemClassParameters * p) : CWbemSchemaClassInstanceWrapper(p) { m_pInClass = NULL; m_pOutClass = NULL; } ~CWbemSchemaProceduresInstanceWrapper() { m_bstrCurrentMethodName.Clear(); SAFE_RELEASE_PTR(m_pInClass); SAFE_RELEASE_PTR(m_pOutClass); } HRESULT GetKey(CBSTR & Key); HRESULT GetSchemaProperty(WCHAR * wcsProperty, VARIANT * v, CIMTYPE * pType , LONG * plFlavor ); void SetMethodName(WCHAR * Method) { m_bstrCurrentMethodName.Clear(); m_bstrCurrentMethodName.SetStr(Method);} void SetInputClass(IWbemClassObject * p) { SAFE_RELEASE_PTR(m_pInClass); m_pInClass = p; if( p ) m_pInClass->AddRef(); } void SetOutputClass(IWbemClassObject * p) { SAFE_RELEASE_PTR(m_pOutClass); m_pOutClass = p; if( p ) m_pOutClass->AddRef(); } };
class CWbemSchemaProceduresInstanceList: public CWbemSchemaInstanceList { protected: CBSTR m_bstrCurrentMethodName; IWbemClassObject * m_pCurrentMethodClass; IWbemClassObject * m_pCurrentMethodInClass; IWbemClassObject * m_pCurrentMethodOutClass; BOOL m_fContinueWithSameClass; HRESULT GetSpecificNextInstance();
public: CWbemSchemaProceduresInstanceList(CWbemClassParameters * p,WCHAR * pSpecific) : CWbemSchemaInstanceList(p, pSpecific) { m_nBaseType = PROCEDURES_ROWSET; m_fContinueWithSameClass = FALSE; m_pCurrentMethodClass = NULL; m_pCurrentMethodInClass = NULL; m_pCurrentMethodOutClass = NULL; } ~CWbemSchemaProceduresInstanceList() { SAFE_RELEASE_PTR(m_pCurrentMethodClass); SAFE_RELEASE_PTR(m_pCurrentMethodInClass); SAFE_RELEASE_PTR(m_pCurrentMethodOutClass); ResetMethodPtrs(); } HRESULT GetTheNextClassThatHasMethods(); HRESULT Reset(); HRESULT NextInstance( CBSTR & Key, CWbemClassInstanceWrapper ** pInst ); void ResetMethodPtrs(); };
//////////////////////////////////////////////////////////////////////////////////////////////
//********************************************************************************************
//
// Classes for the Procedure Parameters schema rowset
//
//********************************************************************************************
//////////////////////////////////////////////////////////////////////////////////////////////
class CWbemSchemaProceduresParametersClassDefinitionWrapper : public CWbemSchemaClassDefinitionWrapper { private:
public: CWbemSchemaProceduresParametersClassDefinitionWrapper(CWbemClassParameters * p); ~CWbemSchemaProceduresParametersClassDefinitionWrapper() {} HRESULT GetNextProperty(BSTR * pProperty, VARIANT * vValue,CIMTYPE * pType , LONG * plFlavor ); };
class CWbemSchemaProceduresParametersInstanceWrapper: public CWbemSchemaProceduresInstanceWrapper { protected: CVARIANT m_vProperty; short m_nOrdinal; CBSTR m_bstrPropertyName;
public: CWbemSchemaProceduresParametersInstanceWrapper(CWbemClassParameters * p) : CWbemSchemaProceduresInstanceWrapper(p) { m_nOrdinal = 0; } ~CWbemSchemaProceduresParametersInstanceWrapper() { m_bstrPropertyName.Clear(); } HRESULT GetSchemaProperty(WCHAR * wcsProperty, VARIANT * v, CIMTYPE * pType , LONG * plFlavor ); HRESULT GetPropertyQualifier(WCHAR * wcsQualifier,VARIANT * v); void SetPropertyName(WCHAR * Name) { m_bstrPropertyName.Clear(); m_bstrPropertyName.SetStr(Name);} void SetProperty(CVARIANT v) { m_vProperty = v;} void SetOrdinal(short n) { m_nOrdinal = n; } HRESULT GetKey(CBSTR & Key); };
class CWbemSchemaProceduresParametersInstanceList : public CWbemSchemaProceduresInstanceList { private: BOOL m_fStillWorkingOnTheSameClass; short m_nOrdinal; CBSTR m_bstrPropertyName; CVARIANT m_vProperty;
public: CWbemSchemaProceduresParametersInstanceList(CWbemClassParameters * p,WCHAR * pSpecific) : CWbemSchemaProceduresInstanceList(p, pSpecific) { m_nBaseType = PROCEDURE_PARAMETERS_ROWSET; m_fStillWorkingOnTheSameClass = FALSE; m_nOrdinal = 0; }
~CWbemSchemaProceduresParametersInstanceList() { m_bstrPropertyName.Clear(); } HRESULT NextInstance( CBSTR & Key, CWbemClassInstanceWrapper ** pInst ); HRESULT GetTheNextParameter(); HRESULT GetTheNextClassThatHasParameters();
};
#endif // __SCHEMA_INCL__
|