windows-nt/Source/XPSP1/NT/base/fs/utils/ureg/inc/regkey.hxx
2020-09-26 16:20:57 +08:00

817 lines
10 KiB
C++
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*++
Copyright (c) 1992-2000 Microsoft Corporation
Module Name:
regkey.hxx
Abstract:
This module contains the declarations for the REGISTRY_KEY_INFO class.
REGISTRY_KEY_INFO is class that contains all the information of a
registry key, sucha as:
-Key Name
-Title Index
-Class
-Security Attribute
-Last Write Time
-Number of Sub-keys
-Number of Value Entries
A REGISTRY_KEY_INFO object is reinitializable.
Author:
Jaime Sasson (jaimes) 01-Mar-1992
Environment:
Ulib, User Mode
--*/
#if !defined( _REGISTRY_KEY_INFO_ )
#define _REGISTRY_KEY_INFO_
#include "ulib.hxx"
#include "wstring.hxx"
#if !defined( _AUTOCHECK_ )
#include "timeinfo.hxx"
#endif
DECLARE_CLASS( REGISTRY );
DECLARE_CLASS( REGISTRY_KEY_INFO );
#if defined( _AUTOCHECK_ )
#define PSECURITY_ATTRIBUTES PVOID
#endif
class REGISTRY_KEY_INFO : public OBJECT {
FRIEND class REGISTRY;
public:
DECLARE_CONSTRUCTOR( REGISTRY_KEY_INFO );
DECLARE_CAST_MEMBER_FUNCTION( REGISTRY_KEY_INFO );
VIRTUAL
~REGISTRY_KEY_INFO(
);
NONVIRTUAL
BOOLEAN
Initialize(
IN PCWSTRING KeyName,
IN PCWSTRING ParentName,
IN ULONG TitleIndex,
IN PCWSTRING Class,
IN PSECURITY_ATTRIBUTES SecurityAttributes DEFAULT NULL
);
NONVIRTUAL
PCWSTRING
GetClass(
) CONST;
#if !defined( _AUTOCHECK_ )
NONVIRTUAL
PCTIMEINFO
GetLastWriteTime(
) CONST;
#endif
NONVIRTUAL
PCWSTRING
GetName(
) CONST;
NONVIRTUAL
ULONG
GetNumberOfSubKeys(
) CONST;
NONVIRTUAL
ULONG
GetNumberOfValues(
) CONST;
NONVIRTUAL
PCWSTRING
GetParentName(
) CONST;
#if !defined( _AUTOCHECK )
NONVIRTUAL
PSECURITY_ATTRIBUTES
GetSecurityAttributes(
) CONST;
#endif
NONVIRTUAL
ULONG
GetTitleIndex(
) CONST;
NONVIRTUAL
BOOLEAN
IsKeyInitialized(
) CONST;
#if DBG
NONVIRTUAL
VOID
DbgPrintKeyInfo(
);
#endif // DBG
private:
NONVIRTUAL // Only REGISTRY can access it
BOOLEAN
Initialize(
);
NONVIRTUAL
VOID
Construct(
);
NONVIRTUAL
VOID
Destroy(
);
NONVIRTUAL
BOOLEAN
PutClass(
IN PCWSTRING Class
);
#if !defined( _AUTOCHECK_ )
NONVIRTUAL
VOID
PutLastWriteTime(
IN PCTIMEINFO LastWriteTime
);
#endif
NONVIRTUAL
BOOLEAN
PutName(
IN PCWSTRING Name
);
NONVIRTUAL
BOOLEAN
PutParentName(
IN PCWSTRING ParentName
);
#if !defined( _AUTOCHECK )
NONVIRTUAL
BOOLEAN
PutSecurityAttributes(
IN PSECURITY_ATTRIBUTES SecurityAttributes
);
#endif
#if defined( _AUTOCHECK_ )
NONVIRTUAL
VOID
SetLastWriteTime(
IN TIME LastWriteTime
);
#endif
NONVIRTUAL
VOID
SetKeyInitializedFlag(
IN BOOLEAN Initialized
);
NONVIRTUAL
VOID
SetNumberOfSubKeys(
IN ULONG NumberOfSubKeys
);
NONVIRTUAL
VOID
SetNumberOfValues(
IN ULONG NumberOfValues
);
NONVIRTUAL
VOID
SetTitleIndex(
IN ULONG TitleIndex
);
DSTRING _Name;
DSTRING _ParentName;
ULONG _TitleIndex;
DSTRING _Class;
ULONG _NumberOfSubKeys;
ULONG _NumberOfValues;
BOOLEAN _KeyIsCompletelyInitialized;
#if defined( _AUTOCHECK_ )
TIME _LastWriteTime;
#else
TIMEINFO _LastWriteTime;
SECURITY_ATTRIBUTES _SecurityAttributes;
#endif
};
INLINE
PCWSTRING
REGISTRY_KEY_INFO::GetClass(
) CONST
/*++
Routine Description:
Return the class of a key.
Arguments:
None.
Return Value:
PCWSTRING - Pointer to a WSTRING object that contains the key class.
--*/
{
return( &_Class );
}
#if !defined( _AUTOCHECK_ )
INLINE
PCTIMEINFO
REGISTRY_KEY_INFO::GetLastWriteTime(
) CONST
/*++
Routine Description:
Return the Last Write Time of a key.
Arguments:
None.
Return Value:
PCTIMEINFO - Pointer to a TIMEINFO object that contains the Last Write Time
of the key.
--*/
{
return( &_LastWriteTime );
}
#endif
INLINE
PCWSTRING
REGISTRY_KEY_INFO::GetName(
) CONST
/*++
Routine Description:
Return the name of a key (relative to its parent).
Arguments:
None.
Return Value:
PCWSTRING - Pointer to a WSTRING object that contains the key name.
--*/
{
return( &_Name );
}
INLINE
PCWSTRING
REGISTRY_KEY_INFO::GetParentName(
) CONST
/*++
Routine Description:
Return the name of parent of this key ( full name ).
Arguments:
None.
Return Value:
PCWSTRING - Pointer to a WSTRING object that contains the parent's name.
--*/
{
return( &_ParentName );
}
INLINE
ULONG
REGISTRY_KEY_INFO::GetNumberOfSubKeys(
) CONST
/*++
Routine Description:
Return the number of subkeys in the key.
Arguments:
None.
Return Value:
ULONG - The number of subkeys.
--*/
{
return( _NumberOfSubKeys );
}
INLINE
ULONG
REGISTRY_KEY_INFO::GetNumberOfValues(
) CONST
/*++
Routine Description:
Return the number of value entries in the key.
Arguments:
None.
Return Value:
ULONG - The number of value entries.
--*/
{
return( _NumberOfValues );
}
#if !defined( _AUTOCHECK_ )
INLINE
PSECURITY_ATTRIBUTES
REGISTRY_KEY_INFO::GetSecurityAttributes(
) CONST
/*++
Routine Description:
Return the security attributes of the key.
Arguments:
None.
Return Value:
PVOID - Pointer to the security attribute
--*/
{
return( (PSECURITY_ATTRIBUTES)&_SecurityAttributes );
}
#endif
INLINE
ULONG
REGISTRY_KEY_INFO::GetTitleIndex(
) CONST
/*++
Routine Description:
Return the title index of the key.
Arguments:
None.
Return Value:
ULONG - The title index.
--*/
{
return( _TitleIndex );
}
INLINE
BOOLEAN
REGISTRY_KEY_INFO::IsKeyInitialized(
) CONST
/*++
Routine Description:
Inform the caller if the object is completely initialized.
This object will be completly initialized only if the registry
class was able to query the key to retrieve its calss and last
write time.
Arguments:
None.
Return Value:
BOOLEAN - Returns TRUE if the key is initialized, or FALSE otherwise.
--*/
{
return( _KeyIsCompletelyInitialized );
}
INLINE
BOOLEAN
REGISTRY_KEY_INFO::PutClass(
IN PCWSTRING Class
)
/*++
Routine Description:
Initialize the variable _Class.
Arguments:
Class - Pointer to a WSTRING object that contains the key class.
Return Value:
None.
--*/
{
DebugPtrAssert( Class );
return( _Class.Initialize( Class ) );
}
#if !defined( _AUTOCHECK_ )
INLINE
VOID
REGISTRY_KEY_INFO::PutLastWriteTime(
IN PCTIMEINFO LastWriteTime
)
/*++
Routine Description:
Initialize the variable _LastWriteTime.
Arguments:
LastWriteTime - Pointer to a TIMEINFO object that contains the
LastWriteTime of the key.
Return Value:
None.
--*/
{
DebugPtrAssert( LastWriteTime );
_LastWriteTime.Initialize( LastWriteTime );
}
#endif
#if defined( _AUTOCHECK_ )
INLINE
VOID
REGISTRY_KEY_INFO::SetLastWriteTime(
IN TIME LastWriteTime
)
/*++
Routine Description:
Initialize the variable _LastWriteTime.
Arguments:
LastWriteTime - Pointer to a TIMEINFO object that contains the
LastWriteTime of the key.
Return Value:
None.
--*/
{
_LastWriteTime = LastWriteTime;
}
#endif
INLINE
BOOLEAN
REGISTRY_KEY_INFO::PutName(
IN PCWSTRING Name
)
/*++
Routine Description:
Initialize the key name.
Arguments:
Name - Pointer to a WSTRING object that contains the key name.
Return Value:
None.
--*/
{
DebugPtrAssert( Name );
return( _Name.Initialize( Name ) );
}
INLINE
BOOLEAN
REGISTRY_KEY_INFO::PutParentName(
IN PCWSTRING ParentName
)
/*++
Routine Description:
Initialize the parent name.
Arguments:
Name - Pointer to a WSTRING object that contains the parent name.
Return Value:
None.
--*/
{
DebugPtrAssert( ParentName );
return( _ParentName.Initialize( ParentName ) );
}
INLINE
VOID
REGISTRY_KEY_INFO::SetKeyInitializedFlag(
IN BOOLEAN Initialized
)
/*++
Routine Description:
Initializes the flag that indicates whether the key is completely
initialized. That is, the registry class was able to query the value,
and its last write time is initialized.
Arguments:
Initialized - A flag that indicates whether the key is completely
initialized.
Return Value:
None.
--*/
{
_KeyIsCompletelyInitialized = Initialized;
}
INLINE
VOID
REGISTRY_KEY_INFO::SetNumberOfSubKeys(
IN ULONG NumberOfSubKeys
)
/*++
Routine Description:
Initialize the variable NumberOfSubKeys.
Arguments:
NumberOfSubkeys - The number of subkeys.
Return Value:
None.
--*/
{
_NumberOfSubKeys = NumberOfSubKeys;
}
INLINE
VOID
REGISTRY_KEY_INFO::SetNumberOfValues(
IN ULONG NumberOfValues
)
/*++
Routine Description:
Initialize the variable _NumberOfValues.
Arguments:
NumberOfValues - The number of value entries in the key.
Return Value:
None.
--*/
{
_NumberOfValues = NumberOfValues;
}
INLINE
VOID
REGISTRY_KEY_INFO::SetTitleIndex(
IN ULONG TitleIndex
)
/*++
Routine Description:
Initialize the variable _TitleIndex.
Arguments:
TitleIndex - Title index of the key.
Return Value:
None.
--*/
{
_TitleIndex = TitleIndex;
}
#endif // _REGISTRY_KEY_INFO_