31 _T(
"HKEY_CLASSES_ROOT"),
32 _T(
"HKEY_CURRENT_USER"),
33 _T(
"HKEY_LOCAL_MACHINE"),
35 _T(
"HKEY_PERFORMANCE_DATA"),
36 _T(
"HKEY_CURRENT_CONFIG"),
54 if ((pszMachineName)&&
55 ((
_tcslen(pszMachineName) < 3)||
56 (pszMachineName[0] !=
_T(
'\\'))||
57 (pszMachineName[1] !=
_T(
'\\'))
97 if (!pszKeyName || !
hKey)
170 if ((
_tcsicmp(pszSubkeyName,
_T(
"HKCR")) == 0)||
171 (
_tcsicmp(pszSubkeyName,
_T(
"HKEY_CLASSES_ROOT")) == 0))
180 else if ((
_tcsicmp(pszSubkeyName,
_T(
"HKCU")) == 0)||
181 (
_tcsicmp(pszSubkeyName,
_T(
"HKEY_CURRENT_USER")) == 0))
190 else if ((
_tcsicmp(pszSubkeyName,
_T(
"HKLM")) == 0)||
191 (
_tcsicmp(pszSubkeyName,
_T(
"HKEY_LOCAL_MACHINE")) == 0))
200 else if ((
_tcsicmp(pszSubkeyName,
_T(
"HKU")) == 0)||
201 (
_tcsicmp(pszSubkeyName,
_T(
"HKEY_USERS")) == 0))
210 else if ((
_tcsicmp(pszSubkeyName,
_T(
"HKPD")) == 0)||
211 (
_tcsicmp(pszSubkeyName,
_T(
"HKEY_PERFORMANCE_DATA")) == 0))
220 else if ((
_tcsicmp(pszSubkeyName,
_T(
"HKDD")) == 0)||
221 (
_tcsicmp(pszSubkeyName,
_T(
"HKEY_DYN_DATA")) == 0))
230 else if ((
_tcsicmp(pszSubkeyName,
_T(
"HKCC")) == 0)||
231 (
_tcsicmp(pszSubkeyName,
_T(
"HKEY_CURRENT_CONFIG")) == 0))
243 if (*
pch !=
_T(
'\\'))
276 if (!pszSubkeyFullName)
282 _tcscpy(pszSubkeyFullName,pszKeyName);
283 _tcscat(pszSubkeyFullName,pszSubkeyName);
285 delete[] pszSubkeyName;
304 rdwMaxSubkeyNameLength = 0;
305 for(
int i = 0;
i < 7 ;
i++)
308 if (rdwMaxSubkeyNameLength <
l)
309 rdwMaxSubkeyNameLength =
l;
312 rdwMaxSubkeyNameLength++;
319 nRet =
RegQueryInfoKey(
m_hKey,
NULL,
NULL,
NULL,
NULL,&rdwMaxSubkeyNameLength,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL);
321 rdwMaxSubkeyNameLength = (nRet ==
ERROR_SUCCESS)?(rdwMaxSubkeyNameLength+1):0;
365 *pdwActualSize = dwActualSize;
377 return RegQueryInfoKeyW(
m_hKey,
NULL,
NULL,
NULL,&rdwSubkeyCount,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL);
382 return RegQueryInfoKeyW(
m_hKey,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,&rdwMaxValueDataBuferSize,
NULL,
NULL);
387 rdwMaxValueNameBuferSize = 0;
392 LONG nError =
RegQueryInfoKeyW(
m_hKey,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,&rdwMaxValueNameBuferSize,
NULL,
NULL,
NULL);
394 rdwMaxValueNameBuferSize++;
399 DWORD dwValueNameBufferSize,
400 BYTE *pbValueDataBuffer,
401 DWORD dwValueDataBufferSize,
426 &dwValueNameBufferSize,
430 &dwValueDataBufferSize);
432 if (pdwNameActualSize)
433 *pdwNameActualSize = dwValueNameBufferSize;
435 if (pdwDataActualSize)
436 *pdwDataActualSize = dwValueDataBufferSize;
447 return RegQueryInfoKeyW(
m_hKey,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,&rdwValueCount,
NULL,
NULL,
NULL,
NULL);
451 BYTE *pbValueDataBuffer,
452 DWORD dwValueDataBufferSize,
453 DWORD *pdwValueDataActualSize)
455 DWORD dwBufferSize = dwValueDataBufferSize;
460 *pdwValueDataActualSize = dwBufferSize;
470 return _T(
"REG_NONE");
474 return _T(
"REG_EXPAND_SZ");
476 return _T(
"REG_BINARY");
478 return _T(
"REG_DWORD_LITTLE_ENDIAN");
480 return _T(
"REG_DWORD_BIG_ENDIAN");
482 return _T(
"REG_LINK");
484 return _T(
"REG_MULTI_SZ");
486 return _T(
"REG_RESOURCE_LIST");
488 return _T(
"REG_FULL_RESOURCE_DESCRIPTOR");
490 return _T(
"REG_RESOURCE_REQUIREMENTS_LIST");
492 return _T(
"Unkown Type");
502 const TCHAR *pszSubkeyName,
529 LONG nError =
RegQueryInfoKeyW(
m_hKey,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,&ft);
544 return _T(
"(Cannot get time last write time)");
LONG GetNextValue(DWORD *pdwNameActualSize=NULL, DWORD *pdwDataActualSize=NULL)
HRESULT Init(HKEY hKey, const TCHAR *pszPath, const TCHAR *pszKeyName, REGSAM CurrentAccess)
LONG DeleteValue(const TCHAR *pszValueName)
DWORD GetValue(TCHAR *pchValueName, DWORD *pdwType, LPBYTE lpValueDataBuffer, DWORD *pdwValueDataSize)
#define ERROR_INTERNAL_ERROR
#define ERROR_NO_MORE_ITEMS
const TCHAR * GetLastWriteTime()
ACPI_SIZE strlen(const char *String)
IN BOOLEAN OUT PSTR Buffer
static BOOL IsHive(HKEY hKey)
#define HKEY_CURRENT_USER
_TCHAR * _tcsncpy(_TCHAR *dst, const _TCHAR *src, size_t n)
DWORD m_dwSubkeyNameBufferSize
const TCHAR * GetKeyName()
LONG SetValue(LPCTSTR pszValueName, DWORD dwType, BYTE *lpData, DWORD dwDataSize)
_TCHAR * _tcscpy(_TCHAR *to, const _TCHAR *from)
LONG GetValueCount(DWORD &rdwValueCount)
void InitValueEnumeration(TCHAR *pszValueNameBuffer, DWORD dwValueNameBufferSize, BYTE *pbValueDataBuffer, DWORD dwValueDataBufferSize, DWORD *pdwType)
#define REG_OPENED_EXISTING_KEY
HRESULT InitRoot(const TCHAR *pszMachineName=NULL)
LONG GetSubkeyNameMaxLength(DWORD &rdwMaxSubkeyNameLength)
#define HKEY_CURRENT_CONFIG
BOOL WINAPI FileTimeToLocalFileTime(IN CONST FILETIME *lpFileTime, OUT LPFILETIME lpLocalFileTime)
#define REG_RESOURCE_REQUIREMENTS_LIST
LONG GetMaxValueDataSize(DWORD &rdwMaxValueDataBufferSize)
LONG WINAPI RegCloseKey(HKEY hKey)
LONG OpenSubkey(REGSAM samDesired, const TCHAR *pszSubkeyName, HKEY &rhKey)
DWORD m_dwCurrentSubKeyIndex
DWORD SECURITY_INFORMATION
BYTE * m_pbValueDataBuffer
size_t __cdecl _tcslen(const _TCHAR *str)
_Must_inspect_result_ _In_ PFILE_OBJECT _In_ SECURITY_INFORMATION SecurityInformation
#define REG_RESOURCE_LIST
#define REG_FULL_RESOURCE_DESCRIPTOR
#define ERROR_FILE_NOT_FOUND
LONG GetMaxValueNameLength(DWORD &rdwMaxValueNameBufferSize)
DWORD m_dwCurrentValueIndex
#define REG_OPTION_NON_VOLATILE
BOOL WINAPI FileTimeToSystemTime(IN CONST FILETIME *lpFileTime, OUT LPSYSTEMTIME lpSystemTime)
LONG DeleteSubkey(const TCHAR *pszPatternSubkeyName)
LONG WINAPI RegGetKeySecurity(HKEY hKey, SECURITY_INFORMATION SecurityInformation, PSECURITY_DESCRIPTOR pSecurityDescriptor, LPDWORD lpcbSecurityDescriptor)
DWORD m_dwValueDataBufferSize
#define RegConnectRegistry
LONG GetSecurityDescriptor(SECURITY_INFORMATION SecurityInformation, PSECURITY_DESCRIPTOR pSecurityDescriptor, LPDWORD lpcbSecurityDescriptor)
LONG WINAPI RegQueryInfoKeyW(HKEY hKey, LPWSTR lpClass, LPDWORD lpcClass, LPDWORD lpReserved, LPDWORD lpcSubKeys, LPDWORD lpcMaxSubKeyLen, LPDWORD lpcMaxClassLen, LPDWORD lpcValues, LPDWORD lpcMaxValueNameLen, LPDWORD lpcMaxValueLen, LPDWORD lpcbSecurityDescriptor, PFILETIME lpftLastWriteTime)
TCHAR * m_pszValueNameBuffer
LONG GetNextSubkeyName(DWORD *pdwActualSize=NULL)
#define REG_DWORD_LITTLE_ENDIAN
LONG CreateSubkey(REGSAM samDesired, const TCHAR *pszKeyName, HKEY &rhKey, BOOL *pblnOpened=NULL, BOOL blnVolatile=FALSE)
#define REG_DWORD_BIG_ENDIAN
static const TCHAR * g_ppszHiveNames[]
TCHAR * m_pchSubkeyNameBuffer
DWORD m_dwValueNameBufferSize
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
void InitSubkeyEnumeration(TCHAR *pchSubkeyNameBuffer, DWORD dwBufferSize)
static const TCHAR * GetValueTypeName(DWORD dwType)
_TCHAR * _tcscat(_TCHAR *s, const _TCHAR *append)
LONG GetDefaultValue(DWORD *pdwType, BYTE *pbValueDataBuffer, DWORD dwValueDataBufferSize, DWORD *pdwValueDataActualSize)
LONG GetSecurityDescriptorLength(DWORD *pdwSecurityDescriptor)
#define HKEY_CLASSES_ROOT
#define HKEY_PERFORMANCE_DATA
#define REG_OPTION_VOLATILE
LONG GetSubkeyCount(DWORD &rdwSubkeyCount)
#define HKEY_LOCAL_MACHINE