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.
135 lines
3.9 KiB
135 lines
3.9 KiB
//+-------------------------------------------------------------------------
|
|
//
|
|
// Microsoft Windows
|
|
// Copyright (C) Microsoft Corporation, 1992 - 1998.
|
|
//
|
|
// File: RegAcc.hxx
|
|
//
|
|
// Contents: 'Simple' registry access
|
|
//
|
|
// History: 21-Dec-93 KyleP Created
|
|
//
|
|
//--------------------------------------------------------------------------
|
|
|
|
#pragma once
|
|
|
|
//+-------------------------------------------------------------------------
|
|
//
|
|
// Function: Range
|
|
//
|
|
// Synopsis: Enforces bounds on a value
|
|
//
|
|
// History: 12-Oct-96 dlee created
|
|
//
|
|
//--------------------------------------------------------------------------
|
|
|
|
template<class T> T Range(
|
|
T tDefault,
|
|
T tMin,
|
|
T tMax )
|
|
{
|
|
return __min( __max( tDefault, tMin ), tMax );
|
|
} //Range
|
|
|
|
//+-------------------------------------------------------------------------
|
|
//
|
|
// Class: CRegCallBack
|
|
//
|
|
// Purpose: CallBack class during enumeration
|
|
//
|
|
// History: 29-Aug-94 SitaramR Created
|
|
//
|
|
//
|
|
//--------------------------------------------------------------------------
|
|
|
|
class CRegCallBack
|
|
{
|
|
|
|
public:
|
|
virtual NTSTATUS CallBack( WCHAR *pValueName, ULONG uValueType,
|
|
VOID *pValueData, ULONG uValueLength) = 0;
|
|
virtual ~CRegCallBack() {}
|
|
};
|
|
|
|
//+-------------------------------------------------------------------------
|
|
//
|
|
// Class: CRegAccess
|
|
//
|
|
// Purpose: 'Simple' registry access
|
|
//
|
|
// History: 21-Dec-93 KyleP Created
|
|
// 12-Aug-98 KLam Added DoesKeyExist
|
|
// 19-Aug-98 KLam Removed INHERIT_UNWIND & DECLARE_UNWIND
|
|
//
|
|
// Notes: This class provides read-only access to the registry. It
|
|
// will work in both kernel and user mode.
|
|
//
|
|
//--------------------------------------------------------------------------
|
|
|
|
class CRegAccess
|
|
{
|
|
|
|
public:
|
|
|
|
CRegAccess( ULONG ulRelative, WCHAR const * pwcsRegPath );
|
|
|
|
~CRegAccess()
|
|
{
|
|
// CRegAccess is a global object, so this destructor can be called
|
|
// potentially before any calls to operator new. Rather than
|
|
// waste cycles in every delete, waste them here by checking for 0.
|
|
|
|
if ( 0 != _wcsPath )
|
|
delete [] _wcsPath;
|
|
}
|
|
|
|
void Get( WCHAR const * pwcsValue, WCHAR * wcsVal, unsigned cc );
|
|
ULONG Get( WCHAR const * pwcsValue );
|
|
|
|
ULONG Read( WCHAR const * wcsKey, ULONG ulDefaultValue);
|
|
ULONG Read( WCHAR const * wcsKey, ULONG ulDefault,
|
|
ULONG ulMin, ULONG ulMax )
|
|
{
|
|
return Range( Read( wcsKey, ulDefault ), ulMin, ulMax );
|
|
}
|
|
|
|
WCHAR * Read( WCHAR const * wcsKey, WCHAR const * pwcsDefaultValue);
|
|
|
|
void EnumerateValues( WCHAR *wszValue, CRegCallBack& regCallback );
|
|
|
|
// BOOL DoesKeyExist( WCHAR const * wcsKey );
|
|
|
|
private:
|
|
|
|
static NTSTATUS CallBack( WCHAR *pValueName, ULONG uValueType,
|
|
void *pValueData, ULONG uValueLength,
|
|
void *pContext, void *pEntryContext );
|
|
|
|
static NTSTATUS CallBackDWORD( WCHAR *pValueName, ULONG uValueType,
|
|
void *pValueData, ULONG uValueLength,
|
|
void *pContext, void *pEntryContext );
|
|
|
|
void SetName( WCHAR const * pwc ) { _regtab[0].Name = (WCHAR *)pwc; }
|
|
|
|
DWORD ReadDWORD( WCHAR const * wcsKey, ULONG *pDefaultValue );
|
|
|
|
void SetEntryContext( void * p)
|
|
{
|
|
if ( p == 0 )
|
|
{
|
|
_regtab[0].EntryContext = 0;
|
|
_regtab[0].Flags = RTL_QUERY_REGISTRY_REQUIRED;
|
|
}
|
|
else
|
|
{
|
|
_regtab[0].EntryContext = p;
|
|
_regtab[0].Flags = RTL_QUERY_REGISTRY_DIRECT | RTL_QUERY_REGISTRY_REQUIRED;
|
|
}
|
|
}
|
|
|
|
ULONG _ulRelative;
|
|
WCHAR _wcsPathBuf[100];
|
|
WCHAR * _wcsPath;
|
|
RTL_QUERY_REGISTRY_TABLE _regtab[2]; // used for strings & enumeration
|
|
};
|
|
|