windows-nt/Source/XPSP1/NT/shell/shell32/regsuprt.h
2020-09-26 16:20:57 +08:00

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