//*************************************************************************** // // (c) 1999-2001 by Microsoft Corp. All Rights Reserved. // // repdrvr.h // // cvadai 19-Mar-99 Created as prototype for Quasar. // //*************************************************************************** #ifndef _REPDRVR_H_ #define _REPDRVR_H_ #pragma warning( disable : 4251 ) // needs to have dll-interface to be used by clients of class //#define InterlockedIncrement(l) (++(*(l))) //#define InterlockedDecrement(l) (--(*(l))) EXTERN_C const IID IID_IWbemQuery; EXTERN_C const IID IID_IWmiDbHandle; EXTERN_C const IID IID_IWmiDbController; EXTERN_C const IID IID_IWmiDbSession; EXTERN_C const IID IID_IWmiDbBatchSession; EXTERN_C const IID IID_IWmiDbIterator; EXTERN_C const IID IID_ISequentialStream2; #define WMIDB_OBJECT_STATE_NORMAL 0 #define WMIDB_OBJECT_STATE_IN_USE 1 #define WMIDB_OBJECT_STATE_DELETED 2 #define WMIDB_OBJECT_STATE_PROTECTED 3 #define WMIDB_OBJECT_STATE_EXCLUSIVE 4 #define WMIDB_OBJECT_STATE_PERSISTENT 5 #define WMIDB_OBJECT_STATE_AUTODELETE 6 #define WMIDB_SECURITY_FLAG_CLASS 1 #define WMIDB_SECURITY_FLAG_INSTANCE 2 #include #include #include #include #include #include extern CRITICAL_SECTION g_csRepdrvr; class _WMILockit { public: _WMILockit(CRITICAL_SECTION *pCS); ~_WMILockit(); private: CRITICAL_SECTION *m_cs; }; class CWmiDbIterator; struct MappedProperties { LPWSTR wPropName; LPWSTR wTableName; BOOL bReadOnly; LPWSTR wScopeClass; BOOL bIsKey; BOOL bStoreAsBlob; BOOL bStoreAsNumber; BOOL bStoreAsMOFText; LPWSTR * arrColumnNames; LPWSTR * arrForeignKeys; DWORD dwNumColumns; DWORD dwNumForeignKeys; // Special treatment for embedded objects BOOL bDecompose; LPWSTR wClassTable; LPWSTR wClassNameCol; LPWSTR wClassDataCol; LPWSTR wClassForeignKey; }; LPWSTR GetKeyString (LPWSTR lpString); void ConvertDataToString(WCHAR * lpKey, BYTE* pData, DWORD dwType, BOOL bQuotes = FALSE); LPWSTR StripUnresolvedName (LPWSTR lpPath); BOOL IsDerivedFrom(IWbemClassObject *pObj, LPWSTR lpClassName, BOOL bDirectOnly=FALSE); HRESULT ConvertBlobToObject (IWbemClassObject *pNewObj, BYTE *pBuffer, DWORD dwLen, _IWmiObject **ppNewObj); //*************************************************************************** // CWmiDbHandle //*************************************************************************** class CWmiDbHandle : public IWmiDbHandle { friend class CWmiDbSession; friend class CWmiDbIterator; friend class CLockCache; friend class CObjectCache; friend class CWmiCustomDbIterator; friend class CWmiESEIterator; public: HRESULT STDMETHODCALLTYPE QueryInterface( /* [in] */ REFIID riid, /* [iid_is][out] */ void __RPC_FAR *__RPC_FAR *ppvObject); ULONG STDMETHODCALLTYPE AddRef( ); ULONG STDMETHODCALLTYPE Release( ); HRESULT STDMETHODCALLTYPE GetHandleType( /* [out] */ DWORD __RPC_FAR *pdwType) ; CWmiDbHandle(); ~CWmiDbHandle(); HRESULT QueryInterface_Internal(CSQLConnection *pConn, void __RPC_FAR *__RPC_FAR *ppvObject, LPWSTR lpKey = NULL); private: DWORD m_dwHandleType; DWORD m_dwVersion; SQL_ID m_dObjectId; SQL_ID m_dClassId; SQL_ID m_dScopeId; ULONG m_uRefCount; BOOL m_bSecDesc; BOOL m_bDefault; IWmiDbSession *m_pSession; IWbemClassObject *m_pData; }; class CESSHolder { public: CESSHolder(long lType, LPWSTR lpNs, LPWSTR lpClass, _IWmiObject *pOld, _IWmiObject *pNew); ~CESSHolder() {}; HRESULT Deliver(_IWmiCoreServices *pCS, LPCWSTR lpRootNs); private: _bstr_t m_sNamespace; _bstr_t m_sClass; _IWmiObject *pOldObject; _IWmiObject *pNewObject; long m_lType; }; class CESSManager { friend class CWmiDbController; public: typedef std::map ESSObjs; CESSManager(); ~CESSManager (); void SetConnCache (CSQLConnCache *pConn) {m_Conns = pConn;}; void SetSchemaCache (CSchemaCache *pCache) {m_Schema = pCache;}; void SetObjectCache (CObjectCache *pObjects) {m_Objects = pObjects;}; void InitializeESS(); HRESULT AddInsertRecord(CSQLConnection *pConn, LPWSTR lpGUID, LPWSTR lpNamespace, LPWSTR lpClass, DWORD dwGenus, IWbemClassObject *pOldObj, IWbemClassObject *pNewObj); HRESULT AddDeleteRecord(CSQLConnection *pConn, LPWSTR lpGUID, LPWSTR lpNamespace, LPWSTR lpClass, DWORD dwGenus, IWbemClassObject *pObj); HRESULT CommitAll (LPCWSTR lpGUID, LPCWSTR lpRootNs); HRESULT DeleteAll (LPCWSTR lpGUID); private: _IWmiCoreServices *m_EventSubSys; CSQLConnCache *m_Conns; CObjectCache *m_Objects; CSchemaCache *m_Schema; ESSObjs m_ESSObjs; }; //*************************************************************************** // CWmiDbController //*************************************************************************** class CWmiDbController : public IWmiDbController { friend class CWmiDbSession; friend class CWmiDbIterator; friend class CWmiCustomDbIterator; friend class CWmiESEIterator; friend class CWmiDbHandle; typedef std::map SQL_IDMap; public: HRESULT STDMETHODCALLTYPE QueryInterface( /* [in] */ REFIID riid, /* [iid_is][out] */ void __RPC_FAR *__RPC_FAR *ppvObject); ULONG STDMETHODCALLTYPE AddRef( ); ULONG STDMETHODCALLTYPE Release( ); virtual HRESULT STDMETHODCALLTYPE Logon( /* [in] */ WMIDB_LOGON_TEMPLATE __RPC_FAR *pLogonParms, /* [in] */ DWORD dwFlags, /* [in] */ DWORD dwRequestedHandleType, /* [out] */ IWmiDbSession __RPC_FAR *__RPC_FAR *ppSession, /* [out] */ IWmiDbHandle __RPC_FAR *__RPC_FAR *ppRootNamespace) ; virtual HRESULT STDMETHODCALLTYPE GetLogonTemplate( /* [in] */ LCID lLocale, /* [in] */ DWORD dwFlags, /* [out] */ WMIDB_LOGON_TEMPLATE __RPC_FAR *__RPC_FAR *ppTemplate) ; virtual HRESULT STDMETHODCALLTYPE FreeLogonTemplate( /* [out][in] */ WMIDB_LOGON_TEMPLATE __RPC_FAR *__RPC_FAR *pTemplate) ; virtual HRESULT STDMETHODCALLTYPE Shutdown( /* [in] */ DWORD dwFlags); virtual HRESULT STDMETHODCALLTYPE SetCallTimeout( /* [in] */ DWORD dwMaxTimeout); virtual HRESULT STDMETHODCALLTYPE SetCacheValue( /* [in] */ DWORD dwMaxBytes); virtual HRESULT STDMETHODCALLTYPE FlushCache( /* [in] */ DWORD dwFlags); virtual HRESULT STDMETHODCALLTYPE GetStatistics( /* [in] */ DWORD dwParameter, /* [out] */ DWORD __RPC_FAR *pdwValue) ; CWmiDbController(); ~CWmiDbController(); private: typedef std::vector Sessions; HRESULT GetUnusedSession(WMIDB_LOGON_TEMPLATE *pLogon, DWORD dwFlags, DWORD dwHandleType, IWmiDbSession **ppSession); HRESULT SetConnProps(WMIDB_LOGON_TEMPLATE *pLogon); HRESULT ReleaseSession(IWmiDbSession *pSession); void IncrementHitCount(bool bCacheUsed=false); void AddHandle(); void SubtractHandle(); HINSTANCE GetResourceDll (LCID lLocale); BOOL HasSecurityDescriptor(SQL_ID ObjId); void AddSecurityDescriptor(SQL_ID ObjId); void RemoveSecurityDescriptor(SQL_ID ObjId); DWORD m_dwTimeOut; DWORD m_dwCurrentStatus; ULONG m_uRefCount; DWORD m_dwTotalHits; DWORD m_dwCacheHits; DWORD m_dwTotalHandles; CRITICAL_SECTION m_cs; DBPROP *m_InitProperties; DBPROPSET *m_rgInitPropSet; IMalloc *m_pIMalloc; CObjectCache ObjectCache; CSchemaCache SchemaCache; // separate so it doesn't get flushed. CLockCache LockCache; // separate so it doesn't get flushed. CSQLConnCache ConnCache; // Cache of SQL connections. CESSManager ESSMgr; SQL_IDMap SecuredIDs; // List of objects with security descriptors. Sessions m_Sessions; BOOL m_bCacheInit; BOOL m_bIsAdmin; BOOL m_bESSEnabled; }; class CWbemClassObjectProps { public: LPWSTR lpClassName; LPWSTR lpNamespace; LPWSTR lpRelPath; LPWSTR lpSuperClass; LPWSTR lpDynasty; LPWSTR lpKeyString; DWORD dwGenus; CWbemClassObjectProps(CWmiDbSession *pSession, CSQLConnection *pConn, IWbemClassObject *pObj, CSchemaCache *pCache, SQL_ID dScopeID); ~CWbemClassObjectProps(); }; struct SessionLock { SQL_ID dObjectId; DWORD dwHandleType; }; //*************************************************************************** // CWmiDbSession //*************************************************************************** class CWmiDbSession : public IWmiDbSession, IWmiDbBatchSession, IWbemTransaction, IWmiDbBackupRestore { friend class CWmiDbController; friend class CWmiDbIterator; friend class CWmiCustomDbIterator; friend class CWmiESEIterator; friend class CWmiDbHandle; typedef std::vector SQLIDs; typedef std::map Properties; typedef std::vector SessionLocks; typedef std::map SessionDynasties; typedef std::map RefCount; public: HRESULT STDMETHODCALLTYPE QueryInterface( /* [in] */ REFIID riid, /* [iid_is][out] */ void __RPC_FAR *__RPC_FAR *ppvObject); ULONG STDMETHODCALLTYPE AddRef( ); ULONG STDMETHODCALLTYPE Release( ); virtual HRESULT STDMETHODCALLTYPE GetObject( /* [in] */ IWmiDbHandle __RPC_FAR *pScope, /* [in] */ IWbemPath __RPC_FAR *pPath, /* [in] */ DWORD dwFlags, /* [in] */ DWORD dwRequestedHandleType, /* [out] */ IWmiDbHandle __RPC_FAR *__RPC_FAR *ppResult); virtual HRESULT STDMETHODCALLTYPE GetObjectDirect( /* [in] */ IWmiDbHandle __RPC_FAR *pScope, /* [in] */ IWbemPath __RPC_FAR *pPath, /* [in] */ DWORD dwFlags, /* [in] */ REFIID riid, /* [iid_is][out] */ LPVOID __RPC_FAR *pObj); virtual HRESULT STDMETHODCALLTYPE PutObject( /* [in] */ IWmiDbHandle __RPC_FAR *pScope, /* [in] */ REFIID riid, /* [iid_is][in] */ LPVOID pObjToPut, /* [in] */ DWORD dwFlags, /* [in] */ DWORD dwRequestedHandleType, /* [out] */ IWmiDbHandle __RPC_FAR *__RPC_FAR *ppResult); virtual HRESULT STDMETHODCALLTYPE DeleteObject( /* [in] */ IWmiDbHandle __RPC_FAR *pScope, /* [in] */ DWORD dwFlags, /* [in] */ REFIID riid, /* [iid_is][in] */ LPVOID pObj); virtual HRESULT STDMETHODCALLTYPE ExecQuery( /* [in] */ IWmiDbHandle __RPC_FAR *pScope, /* [in] */ IWbemQuery __RPC_FAR *pQuery, /* [in] */ DWORD dwFlags, /* [in] */ DWORD dwHandleType, /* [out] */ DWORD *dwMessageFlags, /* [out] */ IWmiDbIterator __RPC_FAR *__RPC_FAR *pQueryResult) ; virtual HRESULT STDMETHODCALLTYPE RenameObject( /* [in] */ IWbemPath __RPC_FAR *pOldPath, /* [in] */ IWbemPath __RPC_FAR *pNewPath, /* [in] */ DWORD dwFlags, /* [in] */ DWORD dwRequestedHandleType, /* [out] */ IWmiDbHandle __RPC_FAR *__RPC_FAR *ppResult); virtual HRESULT STDMETHODCALLTYPE Enumerate( /* [in] */ IWmiDbHandle __RPC_FAR *pScope, /* [in] */ DWORD dwFlags, /* [in] */ DWORD dwRequestedHandleType, /* [out] */ IWmiDbIterator __RPC_FAR *__RPC_FAR *ppQueryResult); virtual HRESULT STDMETHODCALLTYPE AddObject( /* [in] */ IWmiDbHandle __RPC_FAR *pScope, /* [in] */ IWbemPath __RPC_FAR *pPath, /* [in] */ DWORD dwFlags, /* [in] */ DWORD dwRequestedHandleType, /* [out] */ IWmiDbHandle __RPC_FAR *__RPC_FAR *ppResult); virtual HRESULT STDMETHODCALLTYPE RemoveObject( /* [in] */ IWmiDbHandle __RPC_FAR *pScope, /* [in] */ IWbemPath __RPC_FAR *pPath, /* [in] */ DWORD dwFlags); virtual HRESULT STDMETHODCALLTYPE SetDecoration( /* [in] */ LPWSTR lpMachineName, /* [in] */ LPWSTR lpNamespacePath); virtual HRESULT STDMETHODCALLTYPE SupportsQueries( /* [in] */ DWORD *dwQuerySupportLevel ) {return WBEM_S_NO_ERROR;}; // batch session methods virtual HRESULT STDMETHODCALLTYPE PutObjects( /* [in] */ IWmiDbHandle __RPC_FAR *pScope, /* [in] */ DWORD dwFlags, /* [in] */ DWORD dwHandleType, /* [out][in] */ WMIOBJECT_BATCH __RPC_FAR *pBatch); virtual HRESULT STDMETHODCALLTYPE GetObjects( /* [in] */ IWmiDbHandle __RPC_FAR *pScope, /* [in] */ DWORD dwFlags, /* [in] */ DWORD dwHandleType, /* [in, out] */ WMIOBJECT_BATCH __RPC_FAR *pBatch); virtual HRESULT STDMETHODCALLTYPE DeleteObjects( /* [in] */ IWmiDbHandle __RPC_FAR *pScope, /* [in] */ DWORD dwFlags, /* [out][in] */ WMIOBJECT_BATCH __RPC_FAR *pBatch); // IWbemTransaction methods. virtual HRESULT STDMETHODCALLTYPE Begin( /* [in] */ ULONG uTimeout, /* [in] */ ULONG uFlags, /* [in] */ GUID __RPC_FAR *pTransGUID); virtual HRESULT STDMETHODCALLTYPE Rollback( /* [in] */ ULONG uFlags); virtual HRESULT STDMETHODCALLTYPE Commit( /* [in] */ ULONG uFlags); virtual HRESULT STDMETHODCALLTYPE QueryState( /* [in] */ ULONG uFlags, /* [out] */ ULONG __RPC_FAR *puState); virtual HRESULT STDMETHODCALLTYPE Backup( /* [in] */ LPCWSTR lpBackupPath, /* [in] */ DWORD dwFlags); virtual HRESULT STDMETHODCALLTYPE Restore( /* [in] */ LPCWSTR lpRestorePath, /* [in] */ LPCWSTR lpDestination, /* [in] */ DWORD dwFlags); HRESULT LoadSchemaCache (); HRESULT LoadClassInfo (CSQLConnection *pConn, LPCWSTR lpDynasty = NULL, SQL_ID dScopeId = 0, BOOL bDeep = TRUE); HRESULT LoadClassInfo (CSQLConnection *pConn, SQL_ID dClassId, BOOL bDeep = TRUE); HRESULT GetObjectData (CSQLConnection *pConn, SQL_ID dObjectId, SQL_ID dClassId, SQL_ID dScopeId, DWORD dwHandleType, DWORD &dwVersion, IWbemClassObject **pObj, BOOL bNoDefaults = FALSE, LPWSTR lpKey = NULL, BOOL bGetSD = FALSE); HRESULT GetObjectData2 (CSQLConnection *pConn, SQL_ID dObjectId, SQL_ID dClassId, SQL_ID dScopeId, IWbemClassObject *pObj, BOOL bNoDefaults = FALSE, LPWSTR *lpKey = NULL); HRESULT GetClassObject (CSQLConnection *pConn, SQL_ID dClassId, IWbemClassObject **ppObj); HRESULT STDMETHODCALLTYPE GetObject_Internal( /* [in] */ LPWSTR lpPath, /* [in] */ DWORD dwFlags, /* [in] */ DWORD dwRequestedHandleType, /* [in] */ SQL_ID *dScopeId, /* [out] */ IWmiDbHandle __RPC_FAR *__RPC_FAR *ppResult, CSQLConnection *pConn = NULL); HRESULT STDMETHODCALLTYPE PutObject( CSQLConnection *pConn, /* [in] */ IWmiDbHandle *pScope, SQL_ID dScopeID, LPWSTR lpScopePath, /* [in] */ IUnknown __RPC_FAR *pObjToPut, /* [in] */ DWORD dwFlags, /* [in] */ DWORD dwRequestedHandleType, _bstr_t &sPath, /* [out] */ IWmiDbHandle __RPC_FAR *__RPC_FAR *ppResult, BOOL bStoreAsClass = FALSE); HRESULT CleanCache(SQL_ID dObjId, DWORD dwLockType = 0, void *pObj = NULL); HRESULT ShutDown (); HRESULT Delete(IWmiDbHandle *pHandle, CSQLConnection *pConn= NULL); HRESULT Delete(SQL_ID dID, CSQLConnection *pConn= NULL); HRESULT VerifyObjectSecurity (CSQLConnection *pConn, SQL_ID ObjectId, SQL_ID ClassId, SQL_ID ScopeId, SQL_ID ScopeClassId, DWORD AccessType); HRESULT AccessCheck( PNTSECURITY_DESCRIPTOR pSD, DWORD dwAccessType, BOOL &bHasDACL ); CWmiDbController * GetController() { return (CWmiDbController *)m_pController;} CSchemaCache * GetSchemaCache() { return (m_pController ? &((CWmiDbController *)m_pController)->SchemaCache : NULL);} CObjectCache * GetObjectCache() { return (m_pController ? &((CWmiDbController *)m_pController)->ObjectCache : NULL);} CSQLConnCache * GetSQLCache() { return (m_pController ? &((CWmiDbController *)m_pController)->ConnCache : NULL);} CRITICAL_SECTION * GetCS() {return (m_pController ? &((CWmiDbController *)m_pController)->m_cs : NULL);} void FixMethodParamIds(IWbemClassObject *pTemp); CWmiDbSession(IWmiDbController *pController); ~CWmiDbSession(); private: HRESULT CustomGetObject(IWmiDbHandle *pScope, IWbemPath *pPath, LPWSTR lpObjectKey, DWORD dwFlags, DWORD dwRequestedHandleType, IWmiDbHandle **ppResult); HRESULT CustomGetMapping(CSQLConnection *pConn, IWmiDbHandle *pScope, LPWSTR lpClassName, IWbemClassObject **ppMapping); HRESULT CustomCreateMapping(CSQLConnection *pConn, LPWSTR lpClassName, IWbemClassObject *pClassObj, IWmiDbHandle *pScope); HRESULT CustomPutInstance(CSQLConnection *pConn, IWmiDbHandle *pScope, SQL_ID dClassId, DWORD dwFlags, IWbemClassObject **ppObjToPut, LPWSTR lpClassName = NULL); HRESULT CustomFormatSQL(IWmiDbHandle *pScope, IWbemQuery *pQuery, _bstr_t &sSQL, SQL_ID *dClassId, MappedProperties **ppMapping, DWORD *dwNumProps, BOOL *bCount=FALSE); HRESULT CustomDelete(CSQLConnection *pConn, IWmiDbHandle *pScope, IWmiDbHandle *pHandle, LPWSTR lpClassName = NULL); HRESULT SetEmbeddedProp (IWmiDbHandle *pScope, LPWSTR lpPropName, IWbemClassObject *pObj, VARIANT &vValue, CIMTYPE ct); HRESULT GetEmbeddedClass (IWmiDbHandle *pScope, IWbemClassObject *pObj, LPWSTR lpEmbedProp, IWbemClassObject **ppClass); HRESULT CustomSetProperties (IWmiDbHandle *pScope, IRowset *pRowset, IMalloc *pMalloc, IWbemClassObject *pClassObj, MappedProperties *pProps, DWORD dwNumProps, IWbemClassObject *pObj); // Security helper functions. HRESULT VerifyObjectSecurity (CSQLConnection *pConn, IWmiDbHandle *pHandle, DWORD AccessType); HRESULT VerifyObjectSecurity(CSQLConnection *pConn, SQL_ID dScopeID, SQL_ID dScopeClassId, LPWSTR lpObjectPath,CWbemClassObjectProps *pProps,DWORD dwHandleType, DWORD dwReqAccess, SQL_ID &dObjectId, SQL_ID &dClassId); HRESULT VerifyClassSecurity (CSQLConnection *pConn, SQL_ID ClassId, DWORD AccessType); HRESULT GetEffectiveObjectSecurity(CSQLConnection *pConn, SQL_ID ObjectId, SQL_ID ClassId, SQL_ID ScopeId, SQL_ID ScopeClassId, PNTSECURITY_DESCRIPTOR *ppSD, DWORD &dwSDLength); HRESULT GetInheritedObjectSecurity(CSQLConnection *pConn, SQL_ID ObjectId, SQL_ID ClassId, SQL_ID ScopeId, SQL_ID ScopeClassId, PNTSECURITY_DESCRIPTOR *ppSD, DWORD &dwSDLength); HRESULT GetInheritedClassSecurity(CSQLConnection *pConn, SQL_ID ClassId, SQL_ID ScopeId, SQL_ID ScopeClassId, PNTSECURITY_DESCRIPTOR *ppSD, DWORD &dwSDLength); HRESULT GetInheritedInstanceSecurity(CSQLConnection *pConn, SQL_ID ObjectId, SQL_ID ClassId, SQL_ID ScopeId, SQL_ID ScopeClassId, PNTSECURITY_DESCRIPTOR *ppSD, DWORD &dwSDLength); HRESULT GetInheritedContainerSecurity(CSQLConnection *pConn, SQL_ID ClassId, SQL_ID ScopeId, SQL_ID ScopeClassId, PNTSECURITY_DESCRIPTOR *ppSD, DWORD &dwSDLength); HRESULT GetObjectSecurity (CSQLConnection *pConn, SQL_ID dObjectId, PNTSECURITY_DESCRIPTOR *pSD, DWORD dwSDLength, DWORD dwFlags, BOOL &bHasDacl); HRESULT PutClass( CSQLConnection *pConn,SQL_ID dScopeID,LPCWSTR lpScopePath,CWbemClassObjectProps *pProps, IWbemClassObject *pObj,DWORD dwFlags, SQL_ID &dObjectId,_bstr_t &sObjectPath, bool &bChg, BOOL bIgnoreDefaults = FALSE); HRESULT PutInstance( CSQLConnection *pConn,IWmiDbHandle *pScope, SQL_ID dScopeID,LPCWSTR lpScopePath,CWbemClassObjectProps *pProps, IWbemClassObject *pObj,DWORD dwFlags,SQL_ID &dObjectId,SQL_ID &dClassId, _bstr_t &sObjectPath, bool &bChg); // These three functions will only generate sp_InsertClassData procs HRESULT InsertPropertyDef(CSQLConnection *pConn, IWbemClassObject *pObj, SQL_ID dScopeId, SQL_ID dObjectId, LPWSTR lpPropName, VARIANT vDefault, CIMTYPE cimtype, long lPropFlags,DWORD dRefId, Properties &props); HRESULT InsertQualifier(CSQLConnection *pConn,IWmiDbHandle *pScope, SQL_ID dObjectId, LPWSTR lpQualifierName, VARIANT vValue, long lQfrFlags,DWORD dwFlags, DWORD PropID, Properties &props); HRESULT InsertQualifiers (CSQLConnection *pConn,IWmiDbHandle *pScope, SQL_ID dObjectId, DWORD PropID, DWORD Flags, IWbemQualifierSet *pQS, Properties &props); HRESULT InsertArray(CSQLConnection *pConn,IWmiDbHandle *pScope, SQL_ID dObjectId, SQL_ID dClassId, DWORD dwPropertyID, VARIANT &vDefault, long lFlavor=0, DWORD dwRefID = 0, LPCWSTR lpObjectKey = NULL, LPCWSTR lpObjectPath = NULL, SQL_ID dScope = 0, CIMTYPE ct = 0); HRESULT InsertPropertyValues (CSQLConnection *pConn, IWmiDbHandle *pScope, LPWSTR lpPath,SQL_ID &dObjectId,SQL_ID dClassId,SQL_ID dScopeId, DWORD dwFlags,CWbemClassObjectProps *pProps, IWbemClassObject *pObj); HRESULT FormatBatchInsQfrs (CSQLConnection *pConn,IWmiDbHandle *pScope, SQL_ID dObjectId, SQL_ID dClassId, DWORD dPropID, IWbemQualifierSet *pQS, int &iPos, InsertQualifierValues **ppVals, Properties &props, int &iNumProps); HRESULT FormatBatchInsQfrValues(CSQLConnection *pConn,IWmiDbHandle *pScope, SQL_ID dObjectId, DWORD dwQfrID, VARIANT &vTemp, long lFlavor, InsertQualifierValues *pVals, Properties &props, int &iPos, DWORD PropID); HRESULT SetKeyhole (CSQLConnection *pConn, IWbemClassObject *pObj, DWORD dwKeyholePropID, LPWSTR sKeyholeProp, LPCWSTR lpScopePath, _bstr_t &sPath); HRESULT SetUnkeyedPath(CSQLConnection *pConn, IWbemClassObject *pObj, SQL_ID dClassId, _bstr_t &sObjPath); HRESULT InsertQualifierValues (CSQLConnection *pConn, SQL_ID dObjectId,IWbemClassObject *pObj,Properties &props); HRESULT NormalizeObjectPathGet (IWmiDbHandle __RPC_FAR *pScope, IWbemPath __RPC_FAR *pPath, LPWSTR * lpNewPath, BOOL *bDefault = NULL, SQL_ID *dClassId = NULL, SQL_ID *dScopeId = NULL , CSQLConnection *pConn = NULL); HRESULT NormalizeObjectPath(IWmiDbHandle __RPC_FAR *pScope, LPCWSTR lpPath, LPWSTR * lpNewPath, BOOL bNamespace=FALSE, CWbemClassObjectProps **ppProps=NULL, BOOL *bDefault = NULL, CSQLConnection *pConn = NULL, BOOL bNoTrunc = FALSE); HRESULT NormalizeObjectPath(IWbemClassObject __RPC_FAR *pScope, IWmiDbHandle *pScope2, LPCWSTR lpPath, LPWSTR * lpNewPath, BOOL bNamespace=FALSE, CWbemClassObjectProps **ppProps=NULL, BOOL *bDefault = NULL, BOOL bNoTrunc = FALSE); HRESULT VerifyObjectLock (SQL_ID ObjectId, DWORD dwLockType, DWORD dwVersion); BOOL IsDistributed() { return m_bIsDistributed;}; HRESULT IssueDeletionEvents (CSQLConnection *pConn, SQL_ID dObjectId, SQL_ID dClassId, SQL_ID dScopeId, IWbemClassObject *pObj); HRESULT AddTransLock(SQL_ID dObjectId, DWORD dwHandleType); HRESULT CleanTransLocks(); BOOL LockExists (SQL_ID dObjId); HRESULT UpdateHierarchy(CSQLConnection *pConn, SQL_ID dClassId, DWORD dwFlags, LPCWSTR lpScopePath, CWbemClassObjectProps *pProps, _IWmiObject *pObj); HRESULT UnlockDynasties(BOOL bDelete = FALSE); HRESULT DeleteRows(IWmiDbHandle *pScope, IWmiDbIterator *pIterator, REFIID iid); DWORD AddRef_Lock(); DWORD Release_Lock(); ULONG m_uRefCount; IWmiDbController *m_pController; IMalloc *m_pIMalloc; _bstr_t m_sNamespacePath; _bstr_t m_sMachineName; BOOL m_bInUse; DWORD m_dwLocale; BOOL m_bIsDistributed; _bstr_t m_sGUID; // GUID of the transaction. SessionLocks m_TransLocks; SessionDynasties m_Dynasties; RefCount m_ThreadRefCount; }; #endif