|
|
///////////////////////////////////////////////////////////////////////////////////
//
// Microsoft WMIOLE DB Provider
// (C) Copyright 1999 Microsoft Corporation. All Rights Reserved.
//
// Purpose: WmiOleDBMap.h: interface for the CWmiOleDBMap class.
//
//
///////////////////////////////////////////////////////////////////////////////////
#ifndef _WMIOLEDBMAP_HEADER
#define _WMIOLEDBMAP_HEADER
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include "headers.h"
const WCHAR strIndex[] = L"Index";
class CQuery;
#define ALL_QUALIFIERS 0x00000003
#define NO_QUALIFIERS 0x00000000
#define CLASS_QUALIFIERS 0x00000001
#define PROPERTY_QUALIFIERS 0x00000002
#define QUALIFIER_ L"Qualifier_"
#define DEFAULT_QUALIFIER_COUNT 10
#define WMI_CLASS_QUALIFIER 1
#define WMI_PROPERTY_QUALIFIER 2
#define WMI_PROPERTY 3
const CIM_OBJECTARRAY= CIM_FLAG_ARRAY | CIM_OBJECT ;
class cRowColumnInfoMemMgr; class CRowDataMemMgr; ///////////////////////////////////////////////////////////////////////////////////////////////////////////
class CWmiOleDBMap {
private:
CWbemClassParameters * m_pWbemClassParms; // Common class information, such as name, context
CWbemClassDefinitionWrapper * m_pWbemClassDefinition; // Just class definitions
CWbemInstanceList * m_paWbemClassInstances; // Just instance info
CWbemCommandManager * m_pWbemCommandManager; // To manage commands
CWbemCollectionManager * m_pWbemCollectionManager;
CWbemClassWrapper * m_pWbemCurInst; ULONG m_cRef; BOOL m_bMethodRowset; CPropertyMemoryMgr m_PropMemMgr;
BOOL ParseQualifiedName(WCHAR * Root, WCHAR *& Parent, WCHAR *& Child ); HRESULT ValidProperty(const DBCOLUMNDESC * prgColDesc); HRESULT MapDBPROPToStdPropertyQualifier( DBPROP pProp, CVARIANT & Qualifier, CVARIANT & Value, LONG & lFlavor ); HRESULT MapDBPROPToStdClassQualifier( DBPROP pProp, CVARIANT & Qualifier, CVARIANT & Value, LONG & uFlavor );
HRESULT SetWMIProperty(const DBCOLUMNDESC* prgColDesc); HRESULT SetWMIClassQualifier(const DBCOLUMNDESC * prgColDesc,BOOL bDefault = TRUE); HRESULT SetWMIPropertyQualifier(const DBCOLUMNDESC * prgColDesc,BOOL bDefault = TRUE);
HRESULT GetPropertyColumnInfo( cRowColumnInfoMemMgr * pColumn, DBCOLUMNINFO ** pCol,CBSTR & pProperty,LONG &lFlavor); // HRESULT GetNextPropertyQualifier( CWbemClassWrapper *pInst,BSTR &strPropName,CVARIANT &vValue, LONG &lType);
HRESULT GetProperties(CRowDataMemMgr * pRow,CWbemClassWrapper * pClass,cRowColumnInfoMemMgr *pColInfoMgr);
HRESULT GetEmbededObjects(CWbemClassInstanceWrapper * pClass,BSTR strProperty,CVARIANT &vValue); HRESULT CommitRowDataForQualifier(CRowDataMemMgr * pRow,BSTR strQualifier,CVARIANT &vValue, ULONG lType, ULONG lFlavor); void GenerateURL(CWbemClassInstanceWrapper * pClass,BSTR strProperty,ULONG nIndex,CBSTR &strIn); void GetDefaultValue(const DBCOLUMNDESC * prgColDesc, VARIANT & varDefault); HRESULT SetColumns( const DBORDINAL cColumnDescs, const DBCOLUMNDESC rgColumnDescs[]); HRESULT GetPropertyColumnInfoForMixedRowsets( cRowColumnInfoMemMgr * pColumn, DBCOLUMNINFO ** pCol);
void SetColumnTypeURL(DBCOLUMNINFO * pCol) { pCol->dwFlags |= DBCOLUMNFLAGS_ISROWURL; }
public:
// CWmiOleDBMap(DWORD dwFlags, IDispatch *pDisp,CWbemConnectionWrapper * pWrap);
/* CWmiOleDBMap(int nSchemaType, DWORD dwFlags, WCHAR * pClassName, WCHAR * pSpecificTable, CWbemConnectionWrapper * Connect);
CWmiOleDBMap(DWORD dwFlags, WCHAR * pClassName, CWbemConnectionWrapper * Connect,BOOL fSchema = FALSE); CWmiOleDBMap(DWORD dwFlags, CQuery* p, CWbemConnectionWrapper * Connect); CWmiOleDBMap(DWORD dwFlags, WCHAR * pObjectPath, CWbemConnectionWrapper * Connect,INSTANCELISTTYPE instListType); */ CWmiOleDBMap();
HRESULT FInit(int nSchemaType, DWORD dwFlags, WCHAR * pClassName, WCHAR * pSpecificTable, CWbemConnectionWrapper * Connect); HRESULT FInit(DWORD dwFlags, WCHAR * pClassName, CWbemConnectionWrapper * Connect); HRESULT FInit(DWORD dwFlags, CQuery* p, CWbemConnectionWrapper * Connect); HRESULT FInit(DWORD dwFlags, WCHAR * pObjectPath, CWbemConnectionWrapper * Connect,INSTANCELISTTYPE instListType);
~CWmiOleDBMap();
//===================================================================================
//
//===================================================================================
HRESULT CreateTable( DBORDINAL cColumnDescs, const DBCOLUMNDESC rgColumnDescs[], ULONG cPropertySets, DBPROPSET rgPropertySets[]); HRESULT AddColumn(const DBCOLUMNDESC* prgColDesc, DBID** ppColumnID); HRESULT DropColumn(const DBID* pColumnID);
HRESULT SetCommonDBCOLUMNINFO(DBCOLUMNINFO ** pCol,DBORDINAL uCurrentIndex); void SetColumnReadOnly(DBCOLUMNINFO * pCol, BOOL bReadOnly); HRESULT GetQualifiedNameColumnInfo( cRowColumnInfoMemMgr * pParentCol,DBCOLUMNINFO ** pCol, WCHAR * pName);
HRESULT DropTable();
HRESULT GetColumnCount( DBCOUNTITEM & cTotalColumns,DBCOUNTITEM & cParentColumns,DBCOUNTITEM &cNestedCols); HRESULT GetColumnInfoForParentColumns(cRowColumnInfoMemMgr * pParentCol);
HRESULT ResetInstances(); HRESULT ResetInstancesToNewPosition(DBROWOFFSET); HRESULT GetNextInstance(CWbemClassWrapper *&ppInst, CBSTR &strKey ,BOOL bFetchBack); HRESULT GetDataForInstance(CRowDataMemMgr * pRow,CWbemClassWrapper *pInst,cRowColumnInfoMemMgr *pColInfoMgr); HRESULT GetDataForSchemaInstance(CRowDataMemMgr * pRow,CWbemClassWrapper *pInst,cRowColumnInfoMemMgr *pColInfoMgr);
HRESULT GetPropertyQualifier(BSTR strPropName, BSTR strQualifierName ,VARIANT &vValue); BOOL IsPropQualiferIncluded(); HRESULT GetDataForPropertyQualifier(CRowDataMemMgr * pRow,CWbemClassWrapper *pInst,BSTR strPropName, BSTR strQualifier, cRowColumnInfoMemMgr *pColInfoMgr); BOOL IsSystemProperty(BSTR strProperty); HRESULT GetNextPropertyQualifier(CWbemClassWrapper *pInst,BSTR strPropName,BSTR &strQualifier,BOOL bFetchBack = FALSE); HRESULT ResetPropQualiferToNewPosition(CWbemClassWrapper *pInst,DBROWOFFSET lRowOffset,BSTR strPropertyName);
HRESULT GetNextClassQualifier(CWbemClassWrapper *pInst,BSTR &strQualifier,BOOL bFetchBack = FALSE); HRESULT GetDataForClassQualifier(CRowDataMemMgr * pRow,CWbemClassWrapper *pInst, BSTR strQualifier, cRowColumnInfoMemMgr *pColInfoMgr); HRESULT ResetClassQualiferToNewPosition(CWbemClassWrapper *pInst,DBROWOFFSET lRowOffset);
HRESULT DeleteInstance(CWbemClassWrapper * pClass ); HRESULT UpdateInstance(CWbemClassWrapper *pInst , BOOL bNewInst); HRESULT AddNewInstance(CWbemClassWrapper ** ppClass ); HRESULT RefreshInstance(CWbemClassWrapper * pInstance ); void ReleaseAllQualifiers(CWbemClassWrapper *pInst) {pInst->ReleaseAllPropertyQualifiers(); } void ReleaseQualifier(CWbemClassWrapper *pInst,BSTR strQualifier); WCHAR * GetClassName(); void SetNavigationFlags(DWORD dwFlags); void SetQueryFlags(DWORD dwFlags); HRESULT DeleteQualifier(CWbemClassWrapper *pInst, BSTR strQualifierName, BOOL bClassQualifier = TRUE , BSTR strPropertyName = NULL);
HRESULT SetProperty(CWbemClassWrapper *pInst,BSTR bstrColName,VARIANT *pvarData) { return pInst->SetProperty(bstrColName,pvarData); } HRESULT SetQualifier(CWbemClassWrapper *pInst,BSTR bstrColName,BSTR bstrQualifier ,VARIANT *pvarData,LONG lFlavor); DWORD GetFlags() { return m_pWbemClassParms->GetFlags(); }
HRESULT GetProperty(CWbemClassWrapper *pInst,BSTR pProperty, BYTE *& pData,DBTYPE &dwType ,DBLENGTH & dwSize, DWORD &dwFlags );
// This method is to be called before fetching any instance
HRESULT SetClass(WCHAR *pClassName) {return m_pWbemClassDefinition->SetClass(pClassName); }
CWbemClassWrapper *GetInstance(BSTR strPath); void GetInstanceKey(CWbemClassWrapper *pInst, CBSTR &strPath){ ((CWbemClassInstanceWrapper *)pInst)->GetKey(strPath);} CWbemClassWrapper *GetEmbededInstance(BSTR strPath,BSTR strProperty,int nIndex);
HRESULT GetKeyPropertyNames( SAFEARRAY **ppsaNames) { return m_pWbemClassDefinition->GetKeyPropertyNames(ppsaNames); } int ParseQualifiedNameToGetColumnType(WCHAR * wcsName ); HRESULT CWmiOleDBMap::GetInstanceCount(ULONG_PTR &lInstanceCount) { return m_paWbemClassInstances->GetNumberOfInstanceInEnumerator(&lInstanceCount); // return m_pWbemClassDefinition->GetInstanceCount(lInstanceCount);
}
HRESULT AddPropertyQualifier(CWbemClassWrapper *pInst,BSTR pProperty, BSTR Qualifier, VARIANT * vValue, LONG Flavor) { return pInst->SetPropertyQualifier(pProperty,Qualifier, vValue, Flavor); } HRESULT SetColumnProperties(const DBCOLUMNDESC * prgColDesc);
HRESULT AddIndex(const DBID* pColumnID); HRESULT DropIndex(const DBID* pColumnID); HRESULT UnlinkObjectFromContainer(BSTR strContainerObj,BSTR pstrObject); HRESULT LinkObjectFromContainer(BSTR strContainerObj,BSTR pstrObject); HRESULT CloneAndAddNewObjectInScope(BSTR strObj, BSTR strScope,WCHAR *& pstrNewPath);
void SetSytemPropertiesFlag(BOOL bSystemProperties) { m_pWbemClassParms->SetSytemPropertiesFlag(bSystemProperties);}
DWORD GetInstanceStatus(CWbemClassWrapper *pInst) { return ((CWbemClassInstanceWrapper *)pInst)->GetStatus(); } void SetInstanceStatus(CWbemClassWrapper *pInst, DWORD dwStatus) { ((CWbemClassInstanceWrapper *)pInst)->SetStatus(dwStatus); } INSTANCELISTTYPE GetObjListType(); STDMETHODIMP_(ULONG) AddRef(void); STDMETHODIMP_(ULONG) Release(void);
HRESULT SetSearchPreferences(ULONG cProps , DBPROP rgProp[]);
HRESULT GetRelativePath(CWbemClassInstanceWrapper *pInst,WCHAR *& strRelPath) { return pInst->GetRelativePath(strRelPath); }
FETCHDIRECTION GetCurFetchDirection() { return m_paWbemClassInstances->GetCurFetchDirection(); } void SetCurFetchDirection(FETCHDIRECTION FetchDir) { m_paWbemClassInstances->SetCurFetchDirection(FetchDir); } };
#endif
|