|
|
//+---------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1997.
//
// File: R E G I S T R Y . H
//
// Contents: Windows NT Registry Access Class
//
// Notes:
//
// Author: kumarp 14 April 97 (09:22:00 pm)
//
// Notes:
// kumarp 1/16/97 most of the code in this file was originally in
// net\ui\rhino\common\classes\common.h
// extracted only that portion related to CRegKey & related classes
// kumarp 3/27/97 the original code used MFC. converted the entire code
// to make it use STL
//----------------------------------------------------------------------------
#pragma once
#include "kkstl.h"
#include "ncreg.h"
//----------------------------------------------------------------------------
// Forward declarations
//----------------------------------------------------------------------------
class CORegKey ; class CORegValueIter ; class CORegKeyIter ;
typedef CORegKey *PCORegKey; //
// Maximum size of a Registry class name
//
#define CORegKEY_MAX_CLASS_NAME MAX_PATH
// ----------------------------------------------------------------------
// Class CORegKey
//
// Inheritance:
// none
//
// Purpose:
// Provides a wrapper for NT registry access functions
//
// Hungarian: rk
// ----------------------------------------------------------------------
class CORegKey { protected: HKEY m_hKey ; DWORD m_dwDisposition ; BOOL m_fInherit;
// Prepare to read a value by finding the value's size.
LONG PrepareValue (PCWSTR pchValueName, DWORD * pdwType, DWORD * pcbSize, BYTE ** ppbData);
// Convert a TStringList to the REG_MULTI_SZ format
static LONG FlattenValue (TStringList & strList, DWORD * pcbSize, BYTE ** ppbData);
// Convert a TByteArray to a REG_BINARY block
static LONG FlattenValue (TByteArray & abData, DWORD * pcbSize, BYTE ** ppbData);
public: //
// Key information return structure
//
typedef struct { WCHAR chBuff [CORegKEY_MAX_CLASS_NAME] ; DWORD dwClassNameSize, dwNumSubKeys, dwMaxSubKey, dwMaxClass, dwMaxValues, dwMaxValueName, dwMaxValueData, dwSecDesc ; FILETIME ftKey ; } CORegKEY_KEY_INFO ;
//
// Standard constructor for an existing key
//
CORegKey (HKEY hKeyBase, PCWSTR pchSubKey = NULL, REGSAM regSam = KEY_READ_WRITE_DELETE, PCWSTR pchServerName = NULL);
//
// Constructor creating a new key.
//
CORegKey (PCWSTR pchSubKey, HKEY hKeyBase, DWORD dwOptions = 0, REGSAM regSam = KEY_READ_WRITE_DELETE, LPSECURITY_ATTRIBUTES pSecAttr = NULL, PCWSTR pchServerName = NULL);
~ CORegKey () ;
//
// Allow a CORegKey to be used anywhere an HKEY is required.
//
operator HKEY () { return m_hKey; }
//
// Also provide a function to get HKEY
//
HKEY HKey() { return m_hKey; }
//
// Fill a key information structure
//
LONG QueryKeyInfo ( CORegKEY_KEY_INFO * pRegKeyInfo ) ;
//
// Overloaded value query members; each returns ERROR_INVALID_PARAMETER
// if data exists but not in correct form to deliver into result object.
//
LONG QueryValue ( PCWSTR pchValueName, tstring & strResult ) ; LONG QueryValue ( PCWSTR pchValueName, TStringList & strList ) ; LONG QueryValue ( PCWSTR pchValueName, DWORD & dwResult ) ; LONG QueryValue ( PCWSTR pchValueName, TByteArray & abResult ) ; LONG QueryValue ( PCWSTR pchValueName, void * pvResult, DWORD cbSize );
// Overloaded value setting members.
LONG SetValue ( PCWSTR pchValueName, tstring & strResult ) ; LONG SetValue ( PCWSTR pchValueName, tstring & strResult , BOOL fRegExpand) ; LONG SetValue ( PCWSTR pchValueName, TStringList & strList ) ; LONG SetValue ( PCWSTR pchValueName, DWORD & dwResult ) ; LONG SetValue ( PCWSTR pchValueName, TByteArray & abResult ) ; LONG SetValue ( PCWSTR pchValueName, void * pvResult, DWORD cbSize );
LONG DeleteValue ( PCWSTR pchValueName ); };
// ----------------------------------------------------------------------
// Class CORegValueIter
//
// Inheritance:
// none
//
// Purpose:
// Iterate the values of a key, return the name and type of each
//
// Hungarian: rki
// ----------------------------------------------------------------------
class CORegValueIter { protected: CORegKey& m_rk_iter ; DWORD m_dw_index ; PWSTR m_p_buffer ; DWORD m_cb_buffer ;
public: CORegValueIter ( CORegKey & regKey ) ; ~ CORegValueIter () ;
//
// Get the name (and optional last write time) of the next key.
//
LONG Next ( tstring * pstrName, DWORD * pdwType ) ;
//
// Reset the iterator
//
void Reset () { m_dw_index = 0 ; } };
// ----------------------------------------------------------------------
// Class CORegKeyIter
//
// Inheritance:
// none
//
// Purpose:
// Iterate the sub-key names of a key.
//
// Hungarian: rki
// ----------------------------------------------------------------------
class CORegKeyIter { protected: CORegKey & m_rk_iter ; DWORD m_dw_index ; PWSTR m_p_buffer ; DWORD m_cb_buffer ;
public: CORegKeyIter (CORegKey & regKey) ; ~CORegKeyIter () ;
LONG Next ( tstring * pstrName );
// Reset the iterator
void Reset () { m_dw_index = 0 ; } };
|