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

227 lines
5.3 KiB
C++

//+-------------------------------------------------------------------------
//
// Microsoft Windows
//
// Copyright (C) Microsoft Corporation, 1997 - 1999
//
// File: registry.h
//
//--------------------------------------------------------------------------
#ifndef _INC_CSCVIEW_REGISTRY_H
#define _INC_CSCVIEW_REGISTRY_H
#ifndef _WINDOWS_
# include <windows.h>
#endif
//
// Represents a single registry key. Provides basic functions for
// opening and closing the key as well as setting and querying for
// values in that key. Closure of the key handle is ensured through
// the destructor.
//
class RegKey
{
public:
//
// Class for iterating values in the key.
//
class ValueIterator
{
public:
explicit ValueIterator(RegKey& key);
HRESULT Next(LPTSTR pszName, UINT cchName, LPDWORD pdwType, LPBYTE pbData, LPDWORD pcbData);
private:
RegKey& m_key;
int m_iValue;
int m_cchValueName;
};
//
// Flags used by QueryInfo().
//
enum
{
QIM_SUBKEYCNT = 0x00000001,
QIM_SUBKEYMAXCHARCNT = 0x00000002,
QIM_CLASSMAXCHARCNT = 0x00000004,
QIM_VALUECNT = 0x00000008,
QIM_VALUENAMEMAXCHARCNT = 0x00000010,
QIM_VALUEMAXBYTECNT = 0x00000020,
QIM_LASTWRITETIME = 0x00000040,
QIM_SECURITYBYTECNT = 0x00000080,
QIM_ALL = 0xFFFFFFFF
};
//
// Data returned by QueryInfo().
//
struct KEYINFO
{
DWORD cSubKeys;
DWORD cchSubKeyMax;
DWORD cchClassMax;
DWORD cValues;
DWORD cchValueNameMax;
DWORD cbValueMax;
DWORD cbSecurityDesc;
FILETIME LastWriteTime;
};
RegKey(void);
RegKey(HKEY hkeyRoot, LPCTSTR pszSubKey);
virtual ~RegKey(void);
operator HKEY(void) const
{ return m_hkey; }
HKEY GetHandle(void) const
{ return m_hkey; }
bool IsOpen(void) const
{ return NULL != m_hkey; }
HRESULT Open(REGSAM samDesired, bool bCreate = false) const;
void Attach(HKEY hkey);
void Detach(void);
void Close(void) const;
LPCTSTR SubKeyName(void) const
{ return m_szSubKey; }
int GetValueBufferSize(
LPCTSTR pszValueName) const;
HRESULT ValueExists(
LPCTSTR pszValueName) const;
//
// Retrieve REG_DWORD
//
HRESULT GetValue(
LPCTSTR pszValueName,
DWORD *pdwDataOut) const;
//
// Retrieve REG_BINARY
//
HRESULT GetValue(
LPCTSTR pszValueName,
LPBYTE pbDataOut,
int cbDataOut) const;
//
// Retrieve REG_SZ
//
HRESULT GetValue(
LPCTSTR pszValueName,
LPTSTR pszData,
UINT cchData) const;
//
// Retrieve REG_MULTI_SZ
//
HRESULT GetValue(
LPCTSTR pszValueName,
HDPA hdpaStringsOut) const;
//
// Set REG_DWORD
//
HRESULT SetValue(
LPCTSTR pszValueName,
DWORD dwData);
//
// Set REG_BINARY
//
HRESULT SetValue(
LPCTSTR pszValueName,
const LPBYTE pbData,
int cbData);
//
// Set REG_SZ
//
HRESULT SetValue(
LPCTSTR pszValueName,
LPCTSTR pszData);
//
// Set REG_MULTI_SZ
//
HRESULT SetValue(
LPCTSTR pszValueName,
HDPA dpaStrings);
HRESULT DeleteValue(
LPCTSTR pszValue);
HRESULT DeleteAllValues(
int *pcNotDeleted);
HRESULT QueryInfo(RegKey::KEYINFO *pInfo, DWORD fMask) const;
RegKey::ValueIterator CreateValueIterator(void)
{ return ValueIterator(*this); }
private:
HKEY m_hkeyRoot;
mutable HKEY m_hkey;
TCHAR m_szSubKey[MAX_PATH];
HRESULT SetValue(
LPCTSTR pszValueName,
DWORD dwValueType,
const LPBYTE pbData,
int cbData);
HRESULT GetValue(
LPCTSTR pszValueName,
DWORD dwTypeExpected,
LPBYTE pbData,
int cbData) const;
LPTSTR CreateDoubleNulTermList(
HDPA hdpaStrings) const;
//
// Prevent copy.
//
RegKey(const RegKey& rhs);
RegKey& operator = (const RegKey& rhs);
};
//
// Use this object when you can't trust HKEY_CURRENT_USER to be correct.
// It uses the new NT5 API RegOpenCurrentUser to open the key.
//
class RegKeyCU
{
public:
RegKeyCU(REGSAM samDesired);
~RegKeyCU(void);
operator HKEY(void) const
{ return m_hkey; }
private:
HKEY m_hkey;
};
LONG
_RegEnumValueExp(
HKEY hKey,
DWORD dwIndex,
LPTSTR lpValueName,
LPDWORD lpcbValueName,
LPDWORD lpReserved,
LPDWORD lpType,
LPBYTE lpData,
LPDWORD lpcbData);
#endif // _INC_CSCVIEW_REGISTRY_H