|
|
/**********************************************************************/ /** Microsoft Windows/NT **/ /** Copyright(c) Microsoft Corporation, 1997 - 1998 **/ /**********************************************************************/
/*
regkey.h
FILE HISTORY: */
#ifndef _TREGKEY_H
#define _TREGKEY_H
#if _MSC_VER >= 1000 // VC 5.0 or later
#pragma once
#endif
//
// Maximum size of a Registry class name
//
#define CREGKEY_MAX_CLASS_NAME MAX_PATH
#ifndef TFS_EXPORT_CLASS
#define TFS_EXPORT_CLASS
#endif
// Convert a CStringList to the REG_MULTI_SZ format
DWORD StrList2MULTI_SZ(CStringList & strList, DWORD * pcbSize, BYTE ** ppbData);
// Convert a REG_MULTI_SZ format to the CStringList
DWORD MULTI_SZ2StrList(LPCTSTR pbMulti_Sz, CStringList & strList);
//
// Wrapper for a Registry key handle.
//
class TFS_EXPORT_CLASS RegKey {
public: //
// Key information return structure
//
typedef struct { TCHAR chBuff [CREGKEY_MAX_CLASS_NAME] ; DWORD dwClassNameSize, // size of the class string
dwNumSubKeys, // number of subkeys
dwMaxSubKey, // longest subkey name length
dwMaxClass, // longest class string length
dwMaxValues, // number of value entries
dwMaxValueName, // longest value name length
dwMaxValueData, // longest value data length
dwSecDesc ; // security descriptor length
FILETIME ftKey ; } CREGKEY_KEY_INFO ;
// Standard constructor
// To get at keys, you will have to open/create the key
RegKey(); ~RegKey ();
DWORD Create(HKEY hKeyParent, LPCTSTR lpszKeyName, DWORD dwOptions = REG_OPTION_NON_VOLATILE, REGSAM samDesired = KEY_ALL_ACCESS, LPSECURITY_ATTRIBUTES lpSecAttr = NULL, LPCTSTR pszServerName = NULL); DWORD Open(HKEY hKeyParent, LPCTSTR pszSubKey, REGSAM samDesired = KEY_ALL_ACCESS, LPCTSTR pszServerName = NULL); DWORD Close(); HKEY Detach(); void Attach(HKEY hKey); DWORD DeleteSubKey(LPCTSTR lpszSubKey); DWORD RecurseDeleteKey(LPCTSTR lpszKey); DWORD DeleteValue(LPCTSTR lpszValue);
// Deletes the subkeys of the current key (does NOT delete the
// current key).
DWORD RecurseDeleteSubKeys(); //
// Allow a RegKey to be used anywhere an HKEY is required.
//
operator HKEY () const { return m_hKey ; }
//
// Fill a key information structure
//
DWORD QueryKeyInfo ( CREGKEY_KEY_INFO * pRegKeyInfo ) ;
DWORD QueryTypeAndSize(LPCTSTR pszValueName, DWORD *pdwType, DWORD *pdwSize);
//
// Overloaded value query members; each returns ERROR_INVALID_PARAMETER
// if data exists but not in correct form to deliver into result object.
//
DWORD QueryValue ( LPCTSTR pchValueName, CString & strResult ) ; DWORD QueryValue ( LPCTSTR pchValueName, CStringList & strList ) ; DWORD QueryValue ( LPCTSTR pchValueName, DWORD & dwResult ) ; DWORD QueryValue ( LPCTSTR pchValueName, CByteArray & abResult ) ; DWORD QueryValue ( LPCTSTR pchValueName, void * pvResult, DWORD cbSize ); DWORD QueryValue ( LPCTSTR pchValueName, LPTSTR pszDestBuffer, DWORD cbSize, BOOL fExpandSz);
DWORD QueryValueExplicit(LPCTSTR pchValueName, DWORD *pdwType, DWORD *pdwSize, LPBYTE *ppbData);
// Overloaded value setting members.
DWORD SetValue ( LPCTSTR pchValueName, LPCTSTR pszValue, BOOL fRegExpand = FALSE) ; DWORD SetValue ( LPCTSTR pchValueName, CStringList & strList ) ; DWORD SetValue ( LPCTSTR pchValueName, DWORD & dwResult ) ; DWORD SetValue ( LPCTSTR pchValueName, CByteArray & abResult ) ; DWORD SetValue ( LPCTSTR pchValueName, void * pvResult, DWORD cbSize );
DWORD SetValueExplicit(LPCTSTR pchValueName, DWORD dwType, DWORD dwSize, LPBYTE pbData); protected: HKEY m_hKey;
// Prepare to read a value by finding the value's size.
DWORD PrepareValue ( LPCTSTR pchValueName, DWORD * pdwType, DWORD * pcbSize, BYTE ** ppbData );
// Convert a CStringList to the REG_MULTI_SZ format
static DWORD FlattenValue ( CStringList & strList, DWORD * pcbSize, BYTE ** ppbData );
// Convert a CByteArray to a REG_BINARY block
static DWORD FlattenValue ( CByteArray & abData, DWORD * pcbSize, BYTE ** ppbData ); };
//
// Iterate the values of a key, return the name and type
// of each.
//
class TFS_EXPORT_CLASS RegValueIterator { protected: RegKey * m_pRegKey; DWORD m_dwIndex ; TCHAR * m_pszBuffer ; DWORD m_cbBuffer ;
public: RegValueIterator(); ~ RegValueIterator () ;
HRESULT Init(RegKey *pRegKey);
//
// Get the name (and optional last write time) of the next key.
//
HRESULT Next ( CString * pstName, DWORD * pdwType ) ;
//
// Reset the iterator
//
void Reset () { m_dwIndex = 0 ; } };
//
// Iterate the sub-key names of a key.
//
class TFS_EXPORT_CLASS RegKeyIterator { public: RegKeyIterator(); ~RegKeyIterator(); HRESULT Init(RegKey *pRegKey);
HRESULT Next(CString *pstName, CTime *pTime = NULL); HRESULT Reset();
protected: RegKey * m_pregkey; DWORD m_dwIndex; TCHAR * m_pszBuffer; DWORD m_cbBuffer; };
#endif _TREGKEY_H
|