90 lines
3 KiB
C
90 lines
3 KiB
C
|
#ifndef __REGSUPRT_H
|
||
|
#define __REGSUPRT_H
|
||
|
|
||
|
#define REG_OPTION_INVALID 0xFFFFFFFF
|
||
|
|
||
|
// MAX_ROOT is the maximum we support for the root
|
||
|
#define MAX_ROOT MAX_PATH
|
||
|
|
||
|
class CRegSupport
|
||
|
{
|
||
|
public:
|
||
|
CRegSupport();
|
||
|
virtual ~CRegSupport();
|
||
|
|
||
|
public:
|
||
|
void RSInitRoot(HKEY hkey, LPCTSTR pszSubKey1, LPCTSTR pszSubKey2,
|
||
|
DWORD dwRootOptions = REG_OPTION_VOLATILE,
|
||
|
DWORD dwDefaultOptions = REG_OPTION_VOLATILE);
|
||
|
|
||
|
virtual BOOL RSValueExist(LPCTSTR pszSubKey, LPCTSTR pszValueName);
|
||
|
virtual BOOL RSSubKeyExist(LPCTSTR pszSubKey);
|
||
|
|
||
|
virtual BOOL RSDeleteValue(LPCTSTR pszSubKey, LPCTSTR pszValueName);
|
||
|
virtual BOOL RSDeleteSubKey(LPCTSTR pszSubKey);
|
||
|
virtual BOOL RSDeleteKey();
|
||
|
|
||
|
virtual HKEY RSDuplicateRootKey();
|
||
|
virtual HKEY RSDuplicateSubKey(LPCTSTR pszSubKey, BOOL fCreate, BOOL fVolatile);
|
||
|
|
||
|
BOOL RSGetTextValue(LPCTSTR pszSubKey, LPCTSTR pszValueName,
|
||
|
LPTSTR pszValue, DWORD* pcchValue);
|
||
|
BOOL RSGetBinaryValue(LPCTSTR pszSubKey, LPCTSTR pszValueName,
|
||
|
PBYTE pb, DWORD* pcb);
|
||
|
BOOL RSGetDWORDValue(LPCTSTR pszSubKey, LPCTSTR pszValueName, DWORD* pdwValue);
|
||
|
|
||
|
BOOL RSSetTextValue(LPCTSTR pszSubKey, LPCTSTR pszValueName, LPCTSTR pszValue,
|
||
|
DWORD dwOptions = REG_OPTION_INVALID);
|
||
|
BOOL RSSetBinaryValue(LPCTSTR pszSubKey, LPCTSTR pszValueName, PBYTE pb, DWORD cb,
|
||
|
DWORD dwOptions = REG_OPTION_INVALID);
|
||
|
BOOL RSSetDWORDValue(LPCTSTR pszSubKey, LPCTSTR pszValueName, DWORD dwValue,
|
||
|
DWORD dwOptions = REG_OPTION_INVALID);
|
||
|
|
||
|
protected:
|
||
|
virtual void _CloseRegSubKey(HKEY hkeyVolumeSubKey);
|
||
|
|
||
|
virtual HKEY _GetRootKey(BOOL fCreate, DWORD dwOptions = REG_OPTION_INVALID);
|
||
|
|
||
|
virtual BOOL _SetGeneric(LPCTSTR pszSubKey, LPCTSTR pszValueName,
|
||
|
PBYTE pb, DWORD cb, DWORD dwType,
|
||
|
DWORD dwOptions);
|
||
|
virtual BOOL _GetGeneric(LPCTSTR pszSubKey, LPCTSTR pszValueName,
|
||
|
PBYTE pb, DWORD* pcb);
|
||
|
|
||
|
HKEY _GetSubKey(LPCTSTR pszSubKey, BOOL fCreate,
|
||
|
DWORD dwOptions = REG_OPTION_INVALID);
|
||
|
|
||
|
static HKEY _RegCreateKeyExHelper(HKEY hkey, LPCTSTR pszSubKey,
|
||
|
DWORD dwOptions);
|
||
|
static HKEY _RegOpenKeyExHelper(HKEY hkey, LPCTSTR pszSubKey);
|
||
|
|
||
|
protected:
|
||
|
virtual BOOL _InitSetRoot(LPCTSTR pszSubKey1, LPCTSTR pszSubKey2);
|
||
|
void _InitCSKeyRoot();
|
||
|
void _EnterCSKeyRoot();
|
||
|
void _LeaveCSKeyRoot();
|
||
|
|
||
|
virtual LPCTSTR _GetRoot(LPTSTR pszRoot, DWORD cchRoot);
|
||
|
|
||
|
protected:
|
||
|
LPCTSTR _pszSubKey1;
|
||
|
LPCTSTR _pszSubKey2;
|
||
|
|
||
|
private:
|
||
|
DWORD _dwRootOptions;
|
||
|
DWORD _dwDefaultOptions;
|
||
|
|
||
|
HKEY _hkeyInit; // HKEY_CURRENT_USER, ...
|
||
|
|
||
|
CRITICAL_SECTION _csKeyRoot;
|
||
|
BOOL _fcsKeyRoot;
|
||
|
|
||
|
#ifdef DEBUG
|
||
|
static UINT _cRefHKEY;
|
||
|
static UINT _cRefExternalHKEY;
|
||
|
|
||
|
BOOL _fInited;
|
||
|
#endif
|
||
|
};
|
||
|
|
||
|
#endif //__REGSUPRT_H
|