windows-nt/Source/XPSP1/NT/net/config/inc/kkreg.h
2020-09-26 16:20:57 +08:00

205 lines
5.5 KiB
C++

//+---------------------------------------------------------------------------
//
// 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 ; }
};