/*++ Copyright (C) 1997-2001 Microsoft Corporation Module Name: PROVREG.H Abstract: Defines the classes for supporting the registry provider. History: a-davj 04-Mar-97 Created. --*/ #ifndef _PROVREG_H_ #define _PROVREG_H_ #include "regprov.h" #include "ntcnfg.h" //#include #include "impdyn.h" #include "cfdyn.h" // define for calling dmreg indirectly typedef LONG (PASCAL * POPEN)(HKEY hKey, LPCTSTR lpszSubKey, DWORD dwInstanceIndex, DWORD dwReserved, REGSAM samDesired, PHKEY phkResult); typedef LONG (PASCAL * PQUERYVALUE)(HKEY hKey, LPTSTR lpszValueName, LPDWORD lpdwReserved, LPDWORD lpdwType, LPBYTE lpbData, LPDWORD lpcbData); typedef LONG (PASCAL * PCLOSE)(HKEY hKey); typedef LONG (PASCAL * PSETVALUE)(HKEY hKey, LPCTSTR lpValueName, DWORD Reserved, DWORD dwType, CONST BYTE *lpData, DWORD cbDat); typedef LONG (PASCAL *PENUMKEY)( HKEY hKey, DWORD iSubkey, LPTSTR lpszName, LPDWORD lpcchName, LPDWORD lpdwReserved, LPTSTR lpszClass, LPDWORD lpcchClass, PFILETIME lpftLastWrite); //*************************************************************************** // // CLASS NAME: // // CEnumRegInfo // // DESCRIPTION: // // A collection used to hold the instance keys so as to support enumeration. // //*************************************************************************** class CEnumRegInfo : public CEnumInfo{ public: CEnumRegInfo(HKEY hKey, HKEY hRemoteKey,PCLOSE pClose); ~CEnumRegInfo(); HKEY GetKey(void){return m_hKey;}; HKEY GetRemoteKey(void){return m_hRemoteKey;}; private: HKEY m_hKey; HKEY m_hRemoteKey; PCLOSE m_pClose; }; //*************************************************************************** // // CLASS NAME: // // CImpReg // // DESCRIPTION: // // Support the registry as an instance provider. // //*************************************************************************** class CImpReg : public CImpDyn { public: CImpReg(); ~CImpReg(); int iGetMinTokens(void){return 2;}; SCODE RefreshProperty(long lFlags, IWbemClassObject FAR * pClassInt, BSTR PropName,CProvObj & ProvObj,CObject * pPackage, CVariant * pVar, BOOL bTesterDetails); SCODE UpdateProperty(long lFlags, IWbemClassObject FAR * pClassInt, BSTR PropName,CProvObj & ProvObj,CObject * pPackage, CVariant * pVar); SCODE StartBatch(long lFlags, IWbemClassObject FAR * pClassInt,CObject **pObj,BOOL bGet); void EndBatch(long lFlags, IWbemClassObject FAR * pClassInt,CObject *pObj,BOOL bGet); SCODE MakeEnum(IWbemClassObject * pClass, CProvObj & ProvObj, CEnumInfo ** ppInfo); SCODE GetKey(CEnumInfo * pInfo, int iIndex, LPWSTR * ppKey); void Free(int iStart,CHandleCache * pCache); int GetRoot(HKEY * pKey,CProvObj &Path,const TCHAR * pMachine, CHandleCache * pCache,int & iNumToSkip); SCODE ConvertSetData(CVariant & cVar, void **ppData, DWORD * pdwRegType, DWORD * pdwBufferSize); SCODE ReadRegData(HKEY hKey, const TCHAR * pName,DWORD & dwRegType, DWORD & dwSize, void ** pData,CHandleCache * pCache); int OpenKeyForWritting(HKEY hCurr, LPTSTR pName, HKEY * pNew,CHandleCache * pCache); int iLookUpInt(const TCHAR * tpTest); int iLookUpOffset(const TCHAR * tpTest,int & iType,int & iTypeSize); BOOL bGetOffsetData(DWORD dwReg,CProvObj & ProvObj, int & iIntType, int & iBus, int & iPartial,int & iDataOffset, int & iDataType, int & iSourceSize,DWORD dwArray); PCM_PARTIAL_RESOURCE_DESCRIPTOR GetNextPartial(PCM_PARTIAL_RESOURCE_DESCRIPTOR pCurr); PCM_FULL_RESOURCE_DESCRIPTOR GetNextFull(PCM_FULL_RESOURCE_DESCRIPTOR pCurr); SCODE ConvertGetDataFromDesc(CVariant & cVar,void * pData,DWORD dwRegType,DWORD dwBufferSize,CProvObj & ProvObj); SCODE ConvertGetDataFromSimple(CVariant & cVar, void * pData,DWORD dwRegType,DWORD dwBufferSize, IWbemClassObject FAR * pClassInt, BSTR PropName); SCODE MethodAsync(BSTR ObjectPath, BSTR MethodName, long lFlags, IWbemContext* pCtx, IWbemClassObject* pInParams, IWbemObjectSink* pSink); bool NeedsEscapes(){return true;}; // so far, on reg prov needs this private: HINSTANCE hDMRegLib; POPEN pOpen; PCLOSE pClose; PQUERYVALUE pQueryValue; PSETVALUE pSetValue; PENUMKEY pEnumKey; HANDLE m_hToken; HKEY m_hRoot; bool m_bLoadedProfile; }; //*************************************************************************** // // CLASS NAME: // // CCFReg // // DESCRIPTION: // // class factory for CLocatorReg // //*************************************************************************** class CCFReg : public CCFDyn { public: IUnknown * CreateImpObj() {return (IWbemServices*) new CImpReg;}; } ; //*************************************************************************** // // CLASS NAME: // // CImpRegProp // // DESCRIPTION: // // Support registry property provider // //*************************************************************************** class CImpRegProp : public CImpDynProp { public: CImpRegProp(); ~CImpRegProp(); bool NeedsEscapes(){return true;}; // so far, on reg prov needs this }; //*************************************************************************** // // CLASS NAME: // // CCFRegProp // // DESCRIPTION: // // Class factory for CImpRegProp // //*************************************************************************** class CCFRegProp : public CCFDyn { public: IUnknown * CreateImpObj() {return new CImpRegProp();}; } ; #endif //_PROVREG_H_