mirror of https://github.com/tongzx/nt5src
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
204 lines
5.5 KiB
204 lines
5.5 KiB
//+---------------------------------------------------------------------------
|
|
//
|
|
// 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 ; }
|
|
};
|
|
|