Source code of Windows XP (NT5)
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.
 
 
 
 
 
 

394 lines
5.0 KiB

/*++
Copyright (c) 1991-2000 Microsoft Corporation
Module Name:
regvalue.hxx
Abstract:
This module contains the declarations for the REGISTRY_VALUE_ENTRY class.
This class models a value entry of a registry key.
It contains:
-value name
-title index
-data type
-buffer that contains the data in a value entry
Author:
Jaime Sasson (jaimes) 06-Aug-1991
Environment:
Ulib, User Mode
--*/
#if !defined( _REGISTRY_VALUE_ENTRY_ )
#define _REGISTRY_VALUE_ENTRY_
#include "ulib.hxx"
#include "wstring.hxx"
//
// Declare primitive value types.
//
typedef enum _REG_TYPE {
TYPE_REG_NONE = REG_NONE,
TYPE_REG_SZ = REG_SZ,
TYPE_REG_EXPAND_SZ = REG_EXPAND_SZ,
TYPE_REG_BINARY = REG_BINARY,
TYPE_REG_DWORD = REG_DWORD,
TYPE_REG_MULTI_SZ = REG_MULTI_SZ,
TYPE_REG_RESOURCE_LIST= REG_RESOURCE_LIST,
TYPE_REG_FULL_RESOURCE_DESCRIPTOR= REG_FULL_RESOURCE_DESCRIPTOR,
TYPE_REG_RESOURCE_REQUIREMENTS_LIST= REG_RESOURCE_REQUIREMENTS_LIST,
TYPE_UNKNOWN
} REG_TYPE;
DECLARE_CLASS( REGISTRY );
DECLARE_CLASS( REGISTRY_VALUE_ENTRY );
class REGISTRY_VALUE_ENTRY : public OBJECT {
FRIEND class REGISTRY;
public:
DECLARE_CONSTRUCTOR( REGISTRY_VALUE_ENTRY );
DECLARE_CAST_MEMBER_FUNCTION( REGISTRY_VALUE_ENTRY );
VIRTUAL
~REGISTRY_VALUE_ENTRY(
);
NONVIRTUAL
BOOLEAN
Initialize(
IN PCWSTRING ValueName,
IN ULONG TitleIndex,
IN REG_TYPE Type,
IN PCBYTE Data DEFAULT NULL,
IN ULONG Size DEFAULT 0
);
NONVIRTUAL
ULONG
GetData(
OUT PCBYTE* Data
) CONST;
NONVIRTUAL
PCWSTRING
GetName(
) CONST;
NONVIRTUAL
ULONG
GetTitleIndex(
) CONST;
NONVIRTUAL
REG_TYPE
GetType(
) CONST;
NONVIRTUAL
BOOLEAN
PutData(
IN PCBYTE Data,
IN ULONG DataSize
);
#if DBG
NONVIRTUAL
VOID
DbgPrintValueEntry(
);
#endif
private:
NONVIRTUAL
BOOLEAN
Initialize(
);
NONVIRTUAL
VOID
Construct(
);
NONVIRTUAL
VOID
Destroy(
);
NONVIRTUAL
VOID
SetTitleIndex(
IN ULONG TitleIndex
);
NONVIRTUAL
VOID
SetType(
IN REG_TYPE Type
);
NONVIRTUAL
BOOLEAN
PutName(
IN PCWSTRING ValueName
);
DSTRING _Name;
ULONG _TitleIndex;
REG_TYPE _Type;
PBYTE _Data;
ULONG _Size;
};
INLINE
ULONG
REGISTRY_VALUE_ENTRY::GetData(
OUT PCBYTE* Data
) CONST
/*++
Routine Description:
Return the buffer that contains the data stored in the value entry.
Arguments:
Data - Variable that will contain the pointer to the buffer that
contains the data.
Return Value:
ULONG - Number of bytes in the buffer (Data size)
--*/
{
*Data = _Data;
return( _Size );
}
INLINE
PCWSTRING
REGISTRY_VALUE_ENTRY::GetName(
) CONST
/*++
Routine Description:
Return a pointer to a WSTRING object that contains the value name.
Arguments:
None.
Return Value:
The value name.
--*/
{
return( &_Name );
}
INLINE
ULONG
REGISTRY_VALUE_ENTRY::GetTitleIndex(
) CONST
/*++
Routine Description:
Return the title index of this value.
Arguments:
None.
Return Value:
ULONG - The title index.
--*/
{
return( _TitleIndex );
}
INLINE
REG_TYPE
REGISTRY_VALUE_ENTRY::GetType(
) CONST
/*++
Routine Description:
Return the type of data stored in this object.
Arguments:
None.
Return Value:
REG_TYPE - The data type.
--*/
{
return( _Type );
}
INLINE
BOOLEAN
REGISTRY_VALUE_ENTRY::PutName(
IN PCWSTRING ValueName
)
/*++
Routine Description:
Initialize the variable _Name.
Arguments:
ValueName - Pointer to a WSTRING object that contains the value name.
Return Value:
None.
--*/
{
DebugPtrAssert( ValueName );
return( _Name.Initialize( ValueName ) );
}
INLINE
VOID
REGISTRY_VALUE_ENTRY::SetTitleIndex(
IN ULONG TitleIndex
)
/*++
Routine Description:
Initialize the variable _TitleIndex.
Arguments:
TitleIndex - The title index.
Return Value:
None.
--*/
{
_TitleIndex = TitleIndex;
}
INLINE
VOID
REGISTRY_VALUE_ENTRY::SetType(
IN REG_TYPE Type
)
/*++
Routine Description:
Initialize the variable _Type.
Arguments:
Type - The type of data.
Return Value:
None.
--*/
{
_Type = Type;
}
#endif // _REGISTRY_VALUE_ENTRY_