|
|
//*** CEMDBLog --
//
#define XXX_CACHE 1 // caching on
class CEMDBLog : public IUASession { public: ULONG AddRef(void) { return InterlockedIncrement(&_cRef); }
ULONG Release(void) { if (InterlockedDecrement(&_cRef)) return _cRef;
delete this; return 0; }
//*** THISCLASS
virtual HRESULT Initialize(HKEY hkey, DWORD grfMode); HRESULT SetRoot(HKEY hkey, DWORD grfMode); HRESULT ChDir(LPCTSTR pszSubKey); // fast versions, no OLESTR nonsense
HRESULT QueryValueStr(LPCTSTR pszName, LPTSTR pszValue, LPDWORD pcbValue); HRESULT SetValueStr(LPCTSTR pszName, LPCTSTR pszValue); HRESULT SetValueStrEx(LPCTSTR pszName, DWORD dwType, LPCTSTR pszValue);
/*virtual HRESULT Initialize(HKEY hk, DWORD grfMode);*/ HRESULT QueryValue(LPCTSTR pszName, BYTE *pbData, LPDWORD pcbData); HRESULT SetValue(LPCTSTR pszName, DWORD dwType, const BYTE *pbData, DWORD cbData); HRESULT DeleteValue(LPCTSTR pszName); HRESULT RmDir(LPCTSTR pszName, BOOL fRecurse);
HKEY GetHkey() { return _hkey; }
// IUASession
virtual void SetSession(UAQUANTUM uaq, BOOL fForce); virtual int GetSessionId();
// THISCLASS
HRESULT GetCount(LPCTSTR pszCmd); HRESULT IncCount(LPCTSTR pszCmd); FILETIME GetFileTime(LPCTSTR pszCmd); HRESULT SetCount(LPCTSTR pszCmd, int cCnt); HRESULT SetFileTime(LPCTSTR pszCmd, const FILETIME *pft); DWORD _SetFlags(DWORD dwMask, DWORD dwFlags); HRESULT GarbageCollect(BOOL fForce);
protected: CEMDBLog(); friend CEMDBLog *CEMDBLog_Create(); friend void CEMDBLog_CleanUp(); friend class CGCTask;
// THISCLASS helpers
HRESULT _GetCountWithDefault(LPCTSTR pszCmd, BOOL fDefault, CUACount *pCnt); HRESULT _GetCountRW(LPCTSTR pszCmd, BOOL fUpdate); static HRESULT s_Read(void *pvBuf, DWORD cbBuf, PNRWINFO prwi); static HRESULT s_Write(void *pvBuf, DWORD cbBuf, PNRWINFO prwi); static HRESULT s_Delete(void *pvBuf, DWORD cbBuf, PNRWINFO prwi); #if XXX_CACHE
typedef enum e_cacheop { CO_READ=0, CO_WRITE=1, CO_DELETE=2, } CACHEOP; HRESULT CacheOp(CACHEOP op, void *pvBuf, DWORD cbBuf, PNRWINFO prwi); #endif
TCHAR *_MayEncrypt(LPCTSTR pszSrcPlain, LPTSTR pszDstEnc, int cchDst); HRESULT IsDead(LPCTSTR pszCmd); HRESULT _GarbageCollectSlow();
static FNNRW3 s_Nrw3Info; #if XXX_CACHE
struct { UINT cbSize; void* pv; } _rgCache[2]; #endif
protected: virtual ~CEMDBLog();
long _cRef; HKEY _hkey; int _grfMode; // read/write (subset of STGM_* values)
BITBOOL _fNoPurge : 1; // 1:...
BITBOOL _fBackup : 1; // 1:simulate delete (debug)
BITBOOL _fNoEncrypt : 1; // 1:...
BITBOOL _fNoDecay : 1; // 1:...
private: };
|