ExtRegistry.h
上传用户:sesekoo
上传日期:2020-07-18
资源大小:21543k
文件大小:16k
- // This is part of the Professional User Interface Suite library.
- // Copyright (C) 2001-2009 FOSS Software, Inc.
- // All rights reserved.
- //
- // http://www.prof-uis.com
- // mailto:support@prof-uis.com
- //
- // This source code can be used, modified and redistributed
- // under the terms of the license agreement that is included
- // in the Professional User Interface Suite package.
- //
- // Warranties and Disclaimers:
- // THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND
- // INCLUDING, BUT NOT LIMITED TO, WARRANTIES OF MERCHANTABILITY,
- // FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
- // IN NO EVENT WILL FOSS SOFTWARE INC. BE LIABLE FOR ANY DIRECT,
- // INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES,
- // INCLUDING DAMAGES FOR LOSS OF PROFITS, LOSS OR INACCURACY OF DATA,
- // INCURRED BY ANY PERSON FROM SUCH PERSON'S USAGE OF THIS SOFTWARE
- // EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- #if (!defined __EXT_REGISTRY_H)
- #define __EXT_REGISTRY_H
- #if (!defined __EXT_MFC_DEF_H)
- #include <ExtMfcDef.h>
- #endif // __EXT_MFC_DEF_H
- class __PROF_UIS_API CExtRegistry
- {
- public:
- HKEY hKey;
- CExtRegistry()
- {
- Open();
- }
- virtual ~CExtRegistry()
- {
- Close();
- }
- static HKEY RegOpen(
- HKEY hKey,
- __EXT_MFC_SAFE_LPCTSTR pszSubKey,
- DWORD dwRights
- )
- {
- HKEY hSubKey;
- if( RegOpenKeyEx(
- hKey,
- pszSubKey,
- 0,
- dwRights,
- &hSubKey
- ) == ERROR_SUCCESS
- )
- {
- return hSubKey;
- }
- return NULL;
- }
- static void RegClose(HKEY hKey)
- {
- if( hKey )
- RegCloseKey( hKey );
- }
- static HKEY RegConnect(
- HKEY hKey,
- __EXT_MFC_SAFE_LPCTSTR pszRemote
- )
- {
- HKEY hSubKey;
- if( RegConnectRegistry(
- pszRemote,
- hKey,
- &hSubKey
- ) == ERROR_SUCCESS
- )
- {
- return hSubKey;
- }
- return NULL;
- }
- static HKEY RegCreate(
- HKEY hKey,
- __EXT_MFC_SAFE_LPCTSTR pszSubKey,
- DWORD dwRights
- )
- {
- HKEY hSubKey;
- DWORD dwDisposition;
- if( RegCreateKeyEx(
- hKey,
- pszSubKey,
- 0,
- LPTSTR(NULL),
- REG_OPTION_NON_VOLATILE,
- dwRights,
- NULL,
- &hSubKey,
- &dwDisposition
- ) == ERROR_SUCCESS
- )
- {
- return hSubKey;
- }
- return NULL;
- }
- HKEY Connect(
- HKEY hNewKey,
- __EXT_MFC_SAFE_LPCTSTR pszRemote
- )
- {
- return
- hKey = RegConnect(hNewKey, pszRemote);
- }
- HKEY Create(
- HKEY hNewKey,
- __EXT_MFC_SAFE_LPCTSTR pszSubKey,
- DWORD dwRights
- )
- {
- return
- hKey = RegCreate(hNewKey, pszSubKey, dwRights);
- }
- HKEY Open(
- HKEY hNewKey = NULL
- )
- {
- return hKey = hNewKey;
- }
- HKEY Open(
- HKEY hNewKey,
- __EXT_MFC_SAFE_LPCTSTR pszSubKey,
- DWORD dwRights
- )
- {
- return hKey =
- RegOpen(hNewKey, pszSubKey, dwRights);
- }
- void Close()
- {
- if( hKey != NULL )
- {
- RegClose(hKey);
- hKey = NULL;
- }
- }
- static bool RegLoadString(
- HKEY hKey,
- __EXT_MFC_SAFE_LPCTSTR pszSubKey,
- __EXT_MFC_SAFE_LPCTSTR pszValName,
- __EXT_MFC_SAFE_LPCTSTR pszString, DWORD dwLength
- )
- {
- ASSERT( LPCTSTR(pszString) != NULL );
- dwLength *= sizeof(TCHAR);
- HKEY hSubKey = pszSubKey ? RegOpen (hKey, pszSubKey, KEY_READ) : hKey;
- if( hSubKey )
- {
- DWORD dwType, dwRealLength;
- if( RegQueryValueEx(
- hSubKey, pszValName, 0, &dwType,
- NULL, &dwRealLength
- ) == ERROR_SUCCESS
- )
- {
- if( (dwType == REG_SZ
- || dwType == REG_EXPAND_SZ
- || dwType == REG_LINK
- || dwType == REG_MULTI_SZ
- )
- &&
- dwLength >= dwRealLength
- )
- {
- if( RegQueryValueEx(
- hSubKey, LPCTSTR(pszValName), 0, NULL,
- (LPBYTE) (LPCTSTR) pszString, &dwRealLength
- ) == ERROR_SUCCESS
- )
- {
- if( hSubKey != hKey )
- RegClose( hSubKey );
- return true;
- }
- }
- }
- if( hSubKey != hKey )
- RegClose( hSubKey );
- }
- return false;
- }
- static bool RegLoadNewString(
- HKEY hKey,
- __EXT_MFC_SAFE_LPCTSTR pszSubKey, __EXT_MFC_SAFE_LPCTSTR pszValName,
- __EXT_MFC_SAFE_LPCTSTR *pszString, DWORD *pdwLength
- )
- {
- ASSERT(pszString);
- HKEY hSubKey =
- pszSubKey ?
- RegOpen(hKey, pszSubKey, KEY_READ) : hKey;
- if( hSubKey )
- {
- DWORD dwType, dwRealLength;
- if (RegQueryValueEx( hSubKey, LPCTSTR(pszValName), 0, &dwType, NULL, &dwRealLength) == ERROR_SUCCESS)
- {
- if( dwType == REG_SZ
- || dwType == REG_EXPAND_SZ
- || dwType == REG_LINK
- || dwType == REG_MULTI_SZ
- )
- {
- __EXT_MFC_SAFE_LPCTSTR pszNewString = (LPCTSTR)
- ::malloc( dwRealLength*sizeof(TCHAR) );
- if( pszNewString )
- {
- if( RegQueryValueEx(
- hSubKey, LPCTSTR(pszValName),
- 0, NULL,
- (LPBYTE) (LPCTSTR) pszNewString,
- &dwRealLength
- ) == ERROR_SUCCESS
- )
- {
- *pszString = pszNewString;
- if( pdwLength )
- {
- *pdwLength = dwRealLength;
- }
- if( hSubKey != hKey )
- RegClose( hSubKey );
- dwRealLength /= sizeof(TCHAR);
- return true;
- }
- ::free( (LPVOID) (LPCTSTR) pszNewString );
- }
- }
- }
- if( hSubKey != hKey )
- RegClose( hSubKey );
- }
- return false;
- }
- static bool RegSaveString(
- HKEY hKey,
- __EXT_MFC_SAFE_LPCTSTR pszSubKey, __EXT_MFC_SAFE_LPCTSTR pszValName,
- __EXT_MFC_SAFE_LPCTSTR pszString
- )
- {
- HKEY hSubKey =
- pszSubKey ?
- RegCreate(hKey, pszSubKey, KEY_WRITE) : hKey;
- if( hSubKey )
- {
- if( RegSetValueEx(
- hSubKey,
- pszValName, 0, REG_SZ,
- (LPBYTE) (LPCTSTR) pszString,
- (int(_tcslen(pszString)) + 1)*sizeof(TCHAR)
- ) == ERROR_SUCCESS
- )
- {
- if( hSubKey != hKey )
- RegClose( hSubKey );
- return true;
- }
- if( hSubKey != hKey )
- RegClose( hSubKey );
- }
- return false;
- }
- bool LoadNewString(__EXT_MFC_SAFE_LPCTSTR pszValName, __EXT_MFC_SAFE_LPCTSTR *pszString, DWORD *pdwLength)
- {
- return RegLoadNewString(hKey, LPCTSTR(NULL), LPCTSTR(pszValName), pszString, pdwLength);
- }
- bool LoadNewString(__EXT_MFC_SAFE_LPCTSTR pszSubKey, __EXT_MFC_SAFE_LPCTSTR pszValName, __EXT_MFC_SAFE_LPCTSTR *pszString, DWORD *pdwLength)
- {
- return RegLoadNewString(hKey, pszSubKey, pszValName, pszString, pdwLength);
- }
- bool LoadString(__EXT_MFC_SAFE_LPCTSTR pszSubKey, __EXT_MFC_SAFE_LPCTSTR pszValName, __EXT_MFC_SAFE_LPCTSTR pszString, DWORD dwLength)
- {
- return RegLoadString(hKey, pszSubKey, pszValName, pszString, dwLength);
- }
- bool LoadString(__EXT_MFC_SAFE_LPCTSTR pszValName, __EXT_MFC_SAFE_LPCTSTR pszString, DWORD dwLength)
- {
- return RegLoadString(hKey, LPCTSTR(NULL), LPCTSTR(pszValName), pszString, dwLength);
- }
- bool SaveString(__EXT_MFC_SAFE_LPCTSTR pszValName, __EXT_MFC_SAFE_LPCTSTR pszString)
- {
- return RegSaveString(hKey, NULL, pszValName, pszString);
- }
- bool SaveString(__EXT_MFC_SAFE_LPCTSTR pszSubKey, __EXT_MFC_SAFE_LPCTSTR pszValName, __EXT_MFC_SAFE_LPCTSTR pszString)
- {
- return RegSaveString(hKey, pszSubKey, pszValName, pszString);
- }
- static bool RegLoadNumber(
- HKEY hKey,
- __EXT_MFC_SAFE_LPCTSTR pszSubKey,
- __EXT_MFC_SAFE_LPCTSTR pszValName,
- DWORD *pdwNumber
- )
- {
- ASSERT(pdwNumber);
- HKEY hSubKey =
- pszSubKey ?
- RegOpen(hKey, pszSubKey, KEY_READ) : hKey;
- if (hSubKey)
- {
- DWORD dwType, dwSize;
- if( RegQueryValueEx(
- hSubKey, LPCTSTR(pszValName), 0, &dwType,
- NULL, &dwSize
- ) == ERROR_SUCCESS
- )
- {
- if( dwType == REG_DWORD )
- {
- ASSERT(dwSize == sizeof (DWORD));
- if( RegQueryValueEx(
- hSubKey, LPCTSTR(pszValName), 0, NULL,
- (LPBYTE) pdwNumber, &dwSize
- ) == ERROR_SUCCESS
- )
- {
- ASSERT(dwSize == sizeof (DWORD));
- if( hSubKey != hKey )
- RegClose( hSubKey );
- return true;
- }
- }
- }
- if( hSubKey != hKey )
- RegClose( hSubKey );
- }
- return false;
- }
- static bool RegSaveNumber(
- HKEY hKey,
- __EXT_MFC_SAFE_LPCTSTR pszSubKey,
- __EXT_MFC_SAFE_LPCTSTR pszValName,
- DWORD dwNumber
- )
- {
- HKEY hSubKey =
- pszSubKey ?
- RegCreate(hKey, pszSubKey, KEY_WRITE) : hKey;
- if( hSubKey )
- {
- if( RegSetValueEx(
- hSubKey, pszValName, 0, REG_DWORD,
- (LPBYTE) &dwNumber, sizeof (DWORD)
- ) == ERROR_SUCCESS
- )
- {
- if( hSubKey != hKey )
- RegClose( hSubKey );
- return true;
- }
- if( hSubKey != hKey )
- RegClose( hSubKey );
- }
- return false;
- }
- bool LoadNumber(__EXT_MFC_SAFE_LPCTSTR pszValName, DWORD *pdwNumber)
- {
- return RegLoadNumber(hKey, LPCTSTR(NULL), LPCTSTR(pszValName), pdwNumber);
- }
- bool LoadNumber(__EXT_MFC_SAFE_LPCTSTR pszSubKey, __EXT_MFC_SAFE_LPCTSTR pszValName, DWORD *pdwNumber)
- {
- return RegLoadNumber(hKey, LPCTSTR(pszSubKey), LPCTSTR(pszValName), pdwNumber);
- }
- bool SaveNumber(__EXT_MFC_SAFE_LPCTSTR pszValName, DWORD dwNumber)
- {
- return RegSaveNumber(hKey, LPCTSTR(NULL), LPCTSTR(pszValName), dwNumber);
- }
- bool SaveNumber(__EXT_MFC_SAFE_LPCTSTR pszSubKey, __EXT_MFC_SAFE_LPCTSTR pszValName, DWORD dwNumber)
- {
- return RegSaveNumber(hKey, LPCTSTR(pszSubKey), LPCTSTR(pszValName), dwNumber);
- }
- static bool RegLoadBinary(
- HKEY hKey,
- __EXT_MFC_SAFE_LPCTSTR pszSubKey,
- __EXT_MFC_SAFE_LPCTSTR pszValName,
- LPBYTE pbyteData,
- DWORD dwSize
- )
- {
- ASSERT(pbyteData);
- HKEY hSubKey =
- pszSubKey ?
- RegOpen(hKey, LPCTSTR(pszSubKey), KEY_READ) : hKey;
- if( hSubKey )
- {
- DWORD dwType, dwRealSize;
- if( RegQueryValueEx(
- hSubKey, LPCTSTR(pszValName), 0, &dwType, NULL,
- &dwRealSize
- ) == ERROR_SUCCESS
- )
- {
- if( dwType == REG_BINARY
- && dwSize >= dwRealSize
- )
- {
- if( RegQueryValueEx(
- hSubKey, LPCTSTR(pszValName), 0, NULL,
- pbyteData, &dwRealSize
- ) == ERROR_SUCCESS
- )
- {
- if( hSubKey != hKey )
- RegClose( hSubKey );
- return true;
- }
- }
- }
- if( hSubKey != hKey )
- RegClose( hSubKey );
- }
- return false;
- }
- static bool RegLoadNewBinary(
- HKEY hKey,
- __EXT_MFC_SAFE_LPCTSTR pszSubKey, __EXT_MFC_SAFE_LPCTSTR pszValName,
- LPBYTE *pbyteData,
- DWORD *pdwSize
- )
- {
- ASSERT(pbyteData);
- HKEY hSubKey =
- pszSubKey ?
- RegOpen(hKey, pszSubKey, KEY_READ) : hKey;
- if( hSubKey )
- {
- DWORD dwType, dwRealSize;
- if( RegQueryValueEx(
- hSubKey, LPCTSTR(pszValName),
- 0, &dwType, NULL,
- &dwRealSize
- ) == ERROR_SUCCESS
- )
- {
- if( dwType == REG_BINARY )
- {
- LPBYTE pbyteNewData = (LPBYTE)
- ::malloc( dwRealSize*sizeof(TCHAR) );
- if( pbyteNewData )
- {
- if( RegQueryValueEx(
- hSubKey, LPCTSTR(pszValName), 0, NULL,
- pbyteNewData, &dwRealSize
- ) == ERROR_SUCCESS
- )
- {
- *pbyteData = pbyteNewData;
- *pdwSize = dwRealSize;
- if( hSubKey != hKey )
- RegClose( hSubKey );
- return true;
- }
- ::free( pbyteNewData );
- }
- }
- }
- if( hSubKey != hKey )
- RegClose( hSubKey );
- }
- return false;
- }
- static bool RegSaveBinary(
- HKEY hKey,
- __EXT_MFC_SAFE_LPCTSTR pszSubKey,
- __EXT_MFC_SAFE_LPCTSTR pszValName,
- const LPBYTE pbyteData,
- DWORD dwSize
- )
- {
- HKEY hSubKey =
- pszSubKey ?
- RegCreate(hKey, pszSubKey, KEY_WRITE) : hKey;
- if( hSubKey )
- {
- if( RegSetValueEx(
- hSubKey, pszValName, 0, REG_BINARY,
- pbyteData, dwSize
- ) == ERROR_SUCCESS
- )
- {
- if( hSubKey != hKey )
- RegClose( hSubKey );
- return true;
- }
- if( hSubKey != hKey )
- RegClose( hSubKey );
- }
- return false;
- }
- bool LoadBinary(
- __EXT_MFC_SAFE_LPCTSTR pszValName,
- LPBYTE pbyteData,
- DWORD dwSize
- )
- {
- return
- RegLoadBinary(
- hKey,
- LPCTSTR(NULL),
- LPCTSTR(pszValName),
- pbyteData,
- dwSize
- );
- }
- bool LoadBinary(
- __EXT_MFC_SAFE_LPCTSTR pszSubKey,
- __EXT_MFC_SAFE_LPCTSTR pszValName,
- LPBYTE pbyteData,
- DWORD dwSize
- )
- {
- return
- RegLoadBinary(
- hKey,
- pszSubKey,
- pszValName,
- pbyteData,
- dwSize
- );
- }
- bool LoadNewBinary(
- __EXT_MFC_SAFE_LPCTSTR pszValName,
- LPBYTE *pbyteData,
- DWORD *pdwSize
- )
- {
- return
- RegLoadNewBinary(
- hKey,
- LPCTSTR(NULL),
- LPCTSTR(pszValName),
- pbyteData,
- pdwSize
- );
- }
- bool LoadNewBinary(
- __EXT_MFC_SAFE_LPCTSTR pszSubKey,
- __EXT_MFC_SAFE_LPCTSTR pszValName,
- LPBYTE *pbyteData,
- DWORD *pdwSize
- )
- {
- return
- RegLoadNewBinary(
- hKey,
- pszSubKey,
- pszValName,
- pbyteData,
- pdwSize
- );
- }
- bool SaveBinary(
- __EXT_MFC_SAFE_LPCTSTR pszValName,
- const LPBYTE pbyteData,
- DWORD dwSize
- )
- {
- return
- RegSaveBinary(
- hKey, LPCTSTR(NULL), LPCTSTR(pszValName),
- pbyteData, dwSize
- );
- }
- bool SaveBinary(
- __EXT_MFC_SAFE_LPCTSTR pszSubKey, __EXT_MFC_SAFE_LPCTSTR pszValName,
- const LPBYTE pbyteData, DWORD dwSize
- )
- {
- return
- RegSaveBinary(
- hKey, pszSubKey, pszValName,
- pbyteData, dwSize
- );
- }
- static bool RegDeleteKey(
- HKEY hKey, __EXT_MFC_SAFE_LPCTSTR pszSubKey, __EXT_MFC_SAFE_LPCTSTR pszValName
- )
- {
- HKEY hSubKey =
- pszSubKey ?
- RegOpen(hKey, pszSubKey, KEY_READ | KEY_WRITE)
- :
- hKey;
- if( hSubKey )
- {
- if( pszValName )
- {
- if( RegDeleteValue(
- hSubKey,
- pszValName
- ) == ERROR_SUCCESS
- )
- {
- if( hSubKey != hKey )
- RegClose( hSubKey );
- return true;
- }
- }
- else
- {
- if( RegDeleteSubKeys(hSubKey) )
- {
- if( hSubKey != hKey )
- RegClose (hSubKey);
- return
- ::RegDeleteKey(
- hKey,
- pszSubKey
- ) == ERROR_SUCCESS;
- }
- }
- if( hSubKey != hKey )
- RegClose( hSubKey );
- }
- return false;
- }
- static bool RegDeleteSubKeys(HKEY hKey)
- {
- DWORD dwSubKeyCnt, dwMaxSubKey;
- if( RegQueryInfoKey(
- hKey,
- NULL,
- NULL,
- 0,
- &dwSubKeyCnt,
- &dwMaxSubKey,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL
- ) == ERROR_SUCCESS
- )
- {
- if( dwSubKeyCnt )
- {
- dwMaxSubKey += 1;
- __EXT_MFC_SAFE_LPTSTR pszKeyName = (LPTSTR)
- ::malloc( dwMaxSubKey*sizeof(TCHAR) );
- if( LPCTSTR(pszKeyName) != NULL )
- {
- do
- {
- if( RegEnumKey(
- hKey,
- --dwSubKeyCnt,
- LPTSTR(pszKeyName),
- dwMaxSubKey
- ) == ERROR_SUCCESS
- )
- {
- HKEY hSubKey =
- RegOpen(
- hKey,
- (LPCTSTR) pszKeyName,
- KEY_READ | KEY_WRITE
- );
- if( hSubKey )
- {
- if( RegDeleteSubKeys(hSubKey) )
- {
- RegClose( hSubKey );
- if( ::RegDeleteKey(
- hKey,
- LPCTSTR(pszKeyName)
- ) != ERROR_SUCCESS
- )
- {
- ::free( (LPVOID) (LPCTSTR) pszKeyName );
- return false;
- }
- }
- else
- {
- RegClose( hSubKey );
- ::free( (LPVOID) (LPCTSTR) pszKeyName );
- return false;
- }
- }
- else
- {
- ::free( (LPVOID) (LPCTSTR) pszKeyName );
- return false;
- }
- }
- else
- {
- ::free( (LPVOID) (LPCTSTR) pszKeyName );
- return false;
- }
- }
- while( dwSubKeyCnt );
- ::free( (LPVOID) (LPCTSTR) pszKeyName );
- }
- else
- {
- return false;
- }
- }
- return true;
- }
- return false;
- }
- bool DeleteKey(__EXT_MFC_SAFE_LPCTSTR pszValName)
- {
- return RegDeleteKey(hKey, LPCTSTR(NULL), LPCTSTR(pszValName));
- }
- bool DeleteKey(
- __EXT_MFC_SAFE_LPCTSTR pszSubKey, __EXT_MFC_SAFE_LPCTSTR pszValName)
- {
- return RegDeleteKey(hKey, pszSubKey, pszValName);
- }
- bool DeleteSubKeys()
- {
- return RegDeleteSubKeys( hKey );
- }
- }; // class CExtRegistry
- #endif // __EXT_REGISTRY_H