17 #ifndef HKEY_LOCAL_MACHINE
18 #define HKEY_LOCAL_MACHINE ((HKEY)(ULONG_PTR)((LONG)0x80000002))
20 #ifndef HKEY_CURRENT_USER
21 #define HKEY_CURRENT_USER ((HKEY)(ULONG_PTR)((LONG)0x80000001))
43 bool isEndMarker() const noexcept
47 bool isRegValue() const noexcept
50 return m_pszKeyName !=
nullptr;
55 :
public cHandlePtr < HKEY >
62 typedef cHandlePtr<HKEY> SUPER_t;
65 cRegKey(HKEY hKey = HKEY_LOCAL_MACHINE) noexcept
66 : cHandlePtr<HKEY>(hKey)
75 HKEY get_HKey() const noexcept
80 static inline bool IsKeyBase(HKEY hKey) noexcept
84 return (((
size_t)hKey) & ((
size_t)HKEY_CLASSES_ROOT)) == ((size_t)HKEY_CLASSES_ROOT);
86 bool isKeyBase() const noexcept
90 return IsKeyBase(get_HKey());
93 bool isKeyOpen() const noexcept
98 return SUPER_t::isValidHandle();
101 void Attach(HKEY hKey)
103 SUPER_t::AttachHandle(hKey);
105 HKEY Detach() noexcept
109 ref_Handle() = HKEY_LOCAL_MACHINE;
113 HRESULT Open(HKEY hKeyBase,
const FILECHAR_t* pszSubKey, REGSAM samDesired = KEY_READ)
122 const LSTATUS lRet =
_FNF(::RegOpenKeyEx)(hKeyBase, pszSubKey, 0, samDesired, &ref_Handle());
130 return Open(get_HKey(), pszSubKey, samDesired);
135 const LSTATUS lRet = ::RegFlushKey(get_Handle());
146 const LSTATUS lRet =
_FNF(::RegDeleteKey)(get_HKey(), pszSubKey);
150 HRESULT EnumKey(DWORD dwIndex, OUT
FILECHAR_t* pszNameRet, DWORD& dwSizeName) noexcept
157 const LSTATUS lRet =
_FNF(::RegEnumKeyEx)(get_HKey(), dwIndex, pszNameRet, &dwSizeName,
158 nullptr,
nullptr,
nullptr,
nullptr);
164 HRESULT EnumValue(DWORD dwIndex,
FILECHAR_t* pszNameRet, DWORD& dwSizeName, DWORD* pdwTypeRet =
nullptr,
void* pDataRet =
nullptr, DWORD* pdwSizeData =
nullptr) noexcept
170 const LSTATUS lRet =
_FNF(::RegEnumValue)(get_HKey(), dwIndex, pszNameRet, &dwSizeName,
nullptr,
171 pdwTypeRet, (LPBYTE)pDataRet, pdwSizeData);
177 const LSTATUS lRet =
_FNF(::RegDeleteValue)(get_HKey(), pszSubKey);
180 HRESULT SetValue(
const FILECHAR_t* pszValueName, DWORD dwType,
const void* pData, DWORD dwDataSize) noexcept
187 const LSTATUS lRet =
_FNF(::RegSetValueEx)(get_HKey(), pszValueName,
188 0, dwType, (LPBYTE)pData, dwDataSize);
192 HRESULT QueryValue(
const FILECHAR_t* pszValueName, OUT DWORD& rdwType, OUT
void* pData, OUT DWORD& rdwDataSize) noexcept
201 const LSTATUS lRet =
_FNF(::RegQueryValueEx)(get_HKey(), pszValueName,
nullptr, &rdwType, (LPBYTE)pData, &rdwDataSize);
210 ASSERT(lpszValueName !=
nullptr);
211 return SetValue(lpszValueName, REG_DWORD, &dwValue,
sizeof(DWORD));
218 const HRESULT hRes = Open(hKeyBase, pszSubKey, KEY_QUERY_VALUE);
221 DWORD dwType = REG_SZ;
222 return QueryValue(
nullptr, dwType, pData, OUT dwDataSize);
229 if (cRegKey::IsKeyBase(h))
#define _FNF(c)
_WIN32 name has a A or W for UTF8 or UNICODE
Definition: FileName.h:24
#define FAILED(x)
Definition: HResult.h:30
#define _MAX_PATH
Definition: SysTypes.h:423
INT32 HRESULT
_WIN32 style error codes. INT32
Definition: SysTypes.h:465
#define ASSERT(exp)
Definition: cDebugAssert.h:87
#define HANDLEPTR_NULL
NOT the same as an OS HANDLE, Not an int in Linux. Always void* based.
Definition: cHandlePtr.h:17
static HRESULT FromWin32(DWORD dwWin32Code) noexcept
Definition: HResult.h:198
void CloseHandle()
Definition: cHandlePtr.h:79
< The main namespace for all Core functions.
Definition: GrayCore.cpp:14
LONG LSTATUS
AKA error_status_t. FACILITY_WIN32 codes returned from RegCreateKeyEx() etc. Maybe NOT GetLastError()...
Definition: HResult.h:74
char FILECHAR_t
a UTF8 char in a file name. like TCHAR
Definition: FileName.h:22