You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
176 lines
6.2 KiB
176 lines
6.2 KiB
#ifndef __REGKEY__H__
|
|
#define __REGKEY__H__
|
|
#include "cstr.h"
|
|
|
|
#define PACKAGE_NOT_FOUND HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND)
|
|
|
|
namespace AMC
|
|
{
|
|
|
|
//____________________________________________________________________________
|
|
//
|
|
// Class: CRegKey
|
|
//
|
|
// Purpose: A wrapper around the RegXXX APIs. Most of the RegXXX APIs
|
|
// have been wrapped in this class.
|
|
//
|
|
// The RegXXX APIs NOT wrapped in this class are:
|
|
// RegLoadKey()
|
|
// RegNotifyChangeKeyValue()
|
|
// RegReplaceKey()
|
|
// RegUnLoadKey()
|
|
//
|
|
// History: 5/22/1996 RaviR Created
|
|
//
|
|
// Notes: This class uses C++ exception handling mechanism to throw
|
|
// most of the errors returned by the RegXXX APIs. It can throw
|
|
// CMemoryException
|
|
// COleException
|
|
//
|
|
// Method RegXXX API Comment
|
|
// ----------- ---------------- -------------------------
|
|
//
|
|
// CreateKeyEx RegCreateKeyEx By default creates a non
|
|
// volatile key, with all access
|
|
//
|
|
// OpenKeyEx RegOpenKeyEx By default opens key with all access.
|
|
// Returns FALSE if specified key not
|
|
// present.
|
|
//
|
|
// ConnectRegistry RegConnectRegistry By default connects to the given
|
|
// computer's HKEY_LOCAL_MACHINE.
|
|
//
|
|
// CloseKey RegCloseKey -
|
|
//
|
|
// DeleteKey - Delete all the keys and subkeys,
|
|
// using RegDeleteKey.
|
|
//
|
|
// SetValueEx RegSetValueEx Sets any type of data.
|
|
// SetString - Sets string type data.
|
|
// SetDword - Sets DWORD type data.
|
|
//
|
|
// QueryValueEx RegQueryValueEx Query's for any type of data.
|
|
// QueryString - Query's for string type data.
|
|
// QueryDword - Query's for DWORD type data.
|
|
//
|
|
// EnumKeyEx RegEnumKeyEx Returns FALSE if no more items present.
|
|
//
|
|
// EnumValue RegEnumValue Returns ERROR_NO_MORE_ITEMS if no more
|
|
// values present, or ERROR_MORE_DATA if
|
|
// provided buffer is insufficient.
|
|
//
|
|
// GetKeySecurity RegGetKeySecurity Returns FALSE on insufficent buffer.
|
|
//
|
|
// SetKeySecurity RegSetKeySecurity -
|
|
//
|
|
// SaveKey RegSaveKey -
|
|
//
|
|
// RestoreKey RegRestoreKey -
|
|
//
|
|
//____________________________________________________________________________
|
|
//
|
|
|
|
class CRegKey
|
|
{
|
|
public:
|
|
// Constructor & Destructor
|
|
CRegKey(HKEY hKey = NULL);
|
|
~CRegKey(void);
|
|
|
|
BOOL IsNull() { return (m_hKey == NULL); }
|
|
|
|
// Attributes
|
|
operator HKEY() { ASSERT(m_hKey); return m_hKey; }
|
|
LONG GetLastError() { return m_lastError; }
|
|
|
|
// Operations
|
|
// Attach/Detach
|
|
HKEY AttachKey(HKEY hKey);
|
|
HKEY DetachKey(void) { return AttachKey(NULL); }
|
|
|
|
// Open & Create Operations
|
|
void CreateKeyEx(
|
|
HKEY hKeyAncestor,
|
|
LPCTSTR lpszKeyName,
|
|
REGSAM security = KEY_ALL_ACCESS,
|
|
DWORD * pdwDisposition = NULL,
|
|
DWORD dwOption = REG_OPTION_NON_VOLATILE,
|
|
LPSECURITY_ATTRIBUTES pSecurityAttributes = NULL);
|
|
|
|
BOOL OpenKeyEx(
|
|
HKEY hKey,
|
|
LPCTSTR lpszKeyName = NULL,
|
|
REGSAM security = KEY_ALL_ACCESS);
|
|
|
|
// Connect to another machine
|
|
void ConnectRegistry(LPTSTR pszComputerName,
|
|
HKEY hKey = HKEY_LOCAL_MACHINE);
|
|
|
|
// Close & Delete Operations
|
|
void CloseKey(void);
|
|
|
|
void DeleteKey(LPCTSTR lpszKeyName);
|
|
void DeleteValue(LPCTSTR lpszValueName);
|
|
|
|
// Flush operation
|
|
void FlushKey();
|
|
|
|
// Main Access Operations
|
|
void SetValueEx(LPCTSTR lpszValueName, DWORD dwType,
|
|
const void * pData, DWORD nLen);
|
|
void QueryValueEx(LPCTSTR lpszValueName, LPDWORD pType,
|
|
PVOID pData, LPDWORD pLen);
|
|
BOOL IsValuePresent(LPCTSTR lpszValueName);
|
|
|
|
// Additional string access Operations
|
|
void SetString(LPCTSTR lpszValueName, LPCTSTR lpszString);
|
|
void SetString(LPCTSTR lpszValueName, CStr& str);
|
|
|
|
BOOL QueryString(LPCTSTR lpszValueName, LPTSTR pBuffer,
|
|
DWORD *pdwBufferByteLen, DWORD *pdwType = NULL);
|
|
void QueryString(LPCTSTR lpszValueName, LPTSTR * ppStrValue,
|
|
DWORD * pdwType = NULL);
|
|
void QueryString(LPCTSTR lpszValueName, CStr& str,
|
|
DWORD * pdwType = NULL);
|
|
|
|
// Additional DWORD access Operations
|
|
void SetDword(LPCTSTR lpszValueName, DWORD dwData);
|
|
void QueryDword(LPCTSTR lpszValueName, LPDWORD pdwData);
|
|
|
|
// Additional GUID access Operations
|
|
void SetGUID(LPCTSTR lpszValueName, const GUID& guid);
|
|
void QueryGUID(LPCTSTR lpszValueName, GUID* pguid);
|
|
|
|
// Iteration Operations
|
|
BOOL EnumKeyEx(DWORD iSubkey, LPTSTR lpszName, LPDWORD lpcchName,
|
|
PFILETIME lpszLastModified = NULL);
|
|
|
|
HRESULT EnumValue(DWORD iValue, LPTSTR lpszValue, LPDWORD lpcchValue,
|
|
LPDWORD lpdwType = NULL, LPBYTE lpbData = NULL,
|
|
LPDWORD lpcbData = NULL);
|
|
|
|
// Key Security access
|
|
BOOL GetKeySecurity(SECURITY_INFORMATION SecInf,
|
|
PSECURITY_DESCRIPTOR pSecDesc, LPDWORD lpcbSecDesc);
|
|
void SetKeySecurity(SECURITY_INFORMATION SecInf,
|
|
PSECURITY_DESCRIPTOR pSecDesc);
|
|
|
|
// Save/Restore to/from a file
|
|
void SaveKey(LPCTSTR lpszFile, LPSECURITY_ATTRIBUTES lpsa = NULL);
|
|
void RestoreKey(LPCTSTR lpszFile, DWORD fdw = 0);
|
|
|
|
|
|
protected:
|
|
|
|
// Data
|
|
HKEY m_hKey;
|
|
LONG m_lastError; // error code from last function call
|
|
|
|
// implementation helpers
|
|
static LONG NTRegDeleteKey(HKEY hStartKey, LPCTSTR pKeyName);
|
|
|
|
}; // class CRegKey
|
|
|
|
} // AMC namespace
|
|
|
|
#endif // __REGKEY__H__
|