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)");
static const TCHAR * g_ppszHiveNames[]
ACPI_SIZE strlen(const char *String)
#define RegCloseKey(hKey)
LONG GetNextValue(DWORD *pdwNameActualSize=NULL, DWORD *pdwDataActualSize=NULL)
LONG GetMaxValueNameLength(DWORD &rdwMaxValueNameBufferSize)
LONG GetSubkeyNameMaxLength(DWORD &rdwMaxSubkeyNameLength)
LONG GetSubkeyCount(DWORD &rdwSubkeyCount)
DWORD m_dwValueNameBufferSize
DWORD m_dwCurrentValueIndex
const TCHAR * GetKeyName()
TCHAR * m_pszValueNameBuffer
DWORD m_dwSubkeyNameBufferSize
LONG GetValueCount(DWORD &rdwValueCount)
LONG GetSecurityDescriptor(SECURITY_INFORMATION SecurityInformation, PSECURITY_DESCRIPTOR pSecurityDescriptor, LPDWORD lpcbSecurityDescriptor)
static const TCHAR * GetValueTypeName(DWORD dwType)
DWORD m_dwValueDataBufferSize
BYTE * m_pbValueDataBuffer
LONG DeleteValue(const TCHAR *pszValueName)
TCHAR * m_pchSubkeyNameBuffer
const TCHAR * GetLastWriteTime()
DWORD GetValue(TCHAR *pchValueName, DWORD *pdwType, LPBYTE lpValueDataBuffer, DWORD *pdwValueDataSize)
void InitValueEnumeration(TCHAR *pszValueNameBuffer, DWORD dwValueNameBufferSize, BYTE *pbValueDataBuffer, DWORD dwValueDataBufferSize, DWORD *pdwType)
LONG OpenSubkey(REGSAM samDesired, const TCHAR *pszSubkeyName, HKEY &rhKey)
LONG GetNextSubkeyName(DWORD *pdwActualSize=NULL)
LONG DeleteSubkey(const TCHAR *pszPatternSubkeyName)
static BOOL IsHive(HKEY hKey)
DWORD m_dwCurrentSubKeyIndex
HRESULT Init(HKEY hKey, const TCHAR *pszPath, const TCHAR *pszKeyName, REGSAM CurrentAccess)
LONG CreateSubkey(REGSAM samDesired, const TCHAR *pszKeyName, HKEY &rhKey, BOOL *pblnOpened=NULL, BOOL blnVolatile=FALSE)
HRESULT InitRoot(const TCHAR *pszMachineName=NULL)
void InitSubkeyEnumeration(TCHAR *pchSubkeyNameBuffer, DWORD dwBufferSize)
LONG GetDefaultValue(DWORD *pdwType, BYTE *pbValueDataBuffer, DWORD dwValueDataBufferSize, DWORD *pdwValueDataActualSize)
LONG GetSecurityDescriptorLength(DWORD *pdwSecurityDescriptor)
LONG GetMaxValueDataSize(DWORD &rdwMaxValueDataBufferSize)
LONG SetValue(LPCTSTR pszValueName, DWORD dwType, BYTE *lpData, DWORD dwDataSize)
LONG WINAPI RegGetKeySecurity(HKEY hKey, 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)
#define ERROR_NO_MORE_ITEMS
BOOL WINAPI FileTimeToSystemTime(IN CONST FILETIME *lpFileTime, OUT LPSYSTEMTIME lpSystemTime)
BOOL WINAPI FileTimeToLocalFileTime(IN CONST FILETIME *lpFileTime, OUT LPFILETIME lpLocalFileTime)
_Must_inspect_result_ _In_ PFILE_OBJECT _In_ SECURITY_INFORMATION SecurityInformation
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
#define ERROR_FILE_NOT_FOUND
DWORD SECURITY_INFORMATION
#define REG_DWORD_LITTLE_ENDIAN
#define REG_OPTION_NON_VOLATILE
#define REG_DWORD_BIG_ENDIAN
#define REG_RESOURCE_LIST
#define REG_RESOURCE_REQUIREMENTS_LIST
#define REG_OPENED_EXISTING_KEY
#define REG_OPTION_VOLATILE
#define REG_FULL_RESOURCE_DESCRIPTOR
#define ERROR_INTERNAL_ERROR
#define HKEY_LOCAL_MACHINE
#define HKEY_CURRENT_CONFIG
#define HKEY_CURRENT_USER
#define RegConnectRegistry
#define HKEY_PERFORMANCE_DATA
#define HKEY_CLASSES_ROOT