mirror of https://github.com/lianthony/NT4.0
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.
1445 lines
24 KiB
1445 lines
24 KiB
/*++
|
|
|
|
Copyright (c) 1992 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
regedir.hxx
|
|
|
|
Abstract:
|
|
|
|
This module contains the declarations for the REGEDIT_INTERNAL_REGISTRY
|
|
class.
|
|
The REGEDIT_INTERNAL_REGISTRY class manages the structure that represents
|
|
a sub tree of a real registry whose root is a predefined key.
|
|
It provides methods that allow clients to add, delete and change information
|
|
in a registry key.
|
|
|
|
|
|
Author:
|
|
|
|
Jaime Sasson (jaimes) 01-Mar-1992
|
|
|
|
|
|
Environment:
|
|
|
|
Regedit, Ulib, User Mode
|
|
|
|
|
|
--*/
|
|
|
|
|
|
#if !defined( _REGEDIT_INTERNAL_REGISTRY_ )
|
|
|
|
#define _REGEDIT_INTERNAL_REGISTRY_
|
|
|
|
|
|
#include "ulib.hxx"
|
|
#include "array.hxx"
|
|
#include "regednod.hxx"
|
|
#include "regedval.hxx"
|
|
#include "registry.hxx"
|
|
|
|
|
|
//
|
|
// The enumeration below contains the error codes that the methods in
|
|
// the REGEDIT_INTERNAL_REGISTRY_CLASS class can return
|
|
//
|
|
|
|
|
|
typedef enum _REGEDIT_ERROR {
|
|
REGEDIT_ERROR_ACCESS_DENIED,
|
|
REGEDIT_ERROR_CANT_READ_OR_WRITE,
|
|
REGEDIT_ERROR_INITIALIZATION_FAILURE,
|
|
REGEDIT_ERROR_NODE_DOESNT_EXIST,
|
|
REGEDIT_ERROR_VALUE_EXISTS,
|
|
REGEDIT_ERROR_VALUE_DOESNT_EXIST,
|
|
REGEDIT_ERROR_NODE_NOT_UPDATED,
|
|
REGEDIT_ERROR_UNKNOWN_ERROR,
|
|
REGEDIT_ERROR_PRIVILEGE_NOT_HELD,
|
|
REGEDIT_RPC_S_SERVER_UNAVAILABLE,
|
|
REGEDIT_ERROR_KEY_DELETED,
|
|
REGEDIT_ERROR_BADDB,
|
|
REGEDIT_ERROR_NODE_NOT_FOUND,
|
|
REGEDIT_ERROR_CHILD_MUST_BE_VOLATILE
|
|
} REGEDIT_ERROR;
|
|
|
|
|
|
|
|
DECLARE_CLASS( REGEDIT_INTERNAL_REGISTRY );
|
|
|
|
|
|
class REGEDIT_INTERNAL_REGISTRY : public OBJECT {
|
|
|
|
|
|
public:
|
|
|
|
DECLARE_CONSTRUCTOR( REGEDIT_INTERNAL_REGISTRY );
|
|
|
|
DECLARE_CAST_MEMBER_FUNCTION( REGEDIT_INTERNAL_REGISTRY );
|
|
|
|
VIRTUAL
|
|
~REGEDIT_INTERNAL_REGISTRY(
|
|
);
|
|
|
|
NONVIRTUAL
|
|
BOOLEAN
|
|
Initialize(
|
|
IN PREDEFINED_KEY PredefinedKey,
|
|
IN PREGISTRY Registry,
|
|
IN PCWSTRING RootName
|
|
);
|
|
|
|
NONVIRTUAL
|
|
BOOLEAN
|
|
AddValue(
|
|
IN PCREGEDIT_NODE Node,
|
|
IN PREGEDIT_FORMATTED_VALUE_ENTRY Value,
|
|
IN BOOLEAN FailIfExists,
|
|
OUT PULONG ErrorCode
|
|
);
|
|
|
|
NONVIRTUAL
|
|
BOOLEAN
|
|
AreHiveOperationsAllowed(
|
|
);
|
|
|
|
|
|
NONVIRTUAL
|
|
BOOLEAN
|
|
ChangeValueData(
|
|
IN PCREGEDIT_NODE Node,
|
|
IN PCREGEDIT_FORMATTED_VALUE_ENTRY Value,
|
|
IN PCBYTE NewData,
|
|
IN ULONG Size,
|
|
OUT PULONG ErrorCode
|
|
);
|
|
|
|
NONVIRTUAL
|
|
BOOLEAN
|
|
AreChildrenInMemory(
|
|
IN PCREGEDIT_NODE Node
|
|
) CONST;
|
|
|
|
NONVIRTUAL
|
|
BOOLEAN
|
|
AreValuesInMemory(
|
|
IN PCREGEDIT_NODE Node
|
|
) CONST;
|
|
|
|
NONVIRTUAL
|
|
BOOLEAN
|
|
CreateChildNode(
|
|
IN PCREGEDIT_NODE ParentNode,
|
|
IN PREGISTRY_KEY_INFO ChildKeyInfo,
|
|
OUT PCREGEDIT_NODE* ChildNode,
|
|
OUT PULONG ErrorCode,
|
|
IN BOOLEAN Volatile DEFAULT FALSE
|
|
);
|
|
|
|
NONVIRTUAL
|
|
BOOLEAN
|
|
DeleteNode(
|
|
IN PREGEDIT_NODE Node,
|
|
OUT PULONG ErrorCode
|
|
);
|
|
|
|
NONVIRTUAL
|
|
BOOLEAN
|
|
DeleteValue(
|
|
IN PCREGEDIT_NODE Node,
|
|
IN PREGEDIT_FORMATTED_VALUE_ENTRY Value,
|
|
OUT PULONG ErrorCode
|
|
);
|
|
|
|
NONVIRTUAL
|
|
BOOLEAN
|
|
DoesChildNodeExist(
|
|
IN PCREGEDIT_NODE Node,
|
|
IN PCWSTRING ChildName,
|
|
OUT PULONG ErrorCode
|
|
);
|
|
|
|
NONVIRTUAL
|
|
BOOLEAN
|
|
DoesValueExist(
|
|
IN PCREGEDIT_NODE Node,
|
|
IN PCREGEDIT_FORMATTED_VALUE_ENTRY Value,
|
|
OUT PULONG ErrorCode
|
|
);
|
|
|
|
NONVIRTUAL
|
|
PCREGEDIT_NODE
|
|
FindNode(
|
|
IN PCWSTRING NodeName,
|
|
IN PCREGEDIT_NODE StartNode,
|
|
IN BOOLEAN FindNext,
|
|
IN BOOLEAN MatchCase,
|
|
IN BOOLEAN WholeWord
|
|
);
|
|
|
|
NONVIRTUAL
|
|
PSORTED_LIST
|
|
GetChildren(
|
|
IN PCREGEDIT_NODE Node,
|
|
OUT PULONG ErrorCode
|
|
);
|
|
|
|
NONVIRTUAL
|
|
PCREGEDIT_NODE
|
|
GetNextNode(
|
|
IN PCREGEDIT_NODE CurrentNode,
|
|
IN PCREGEDIT_NODE LastTraversedNode
|
|
);
|
|
|
|
NONVIRTUAL
|
|
PCWSTRING
|
|
GetMachineName(
|
|
) CONST;
|
|
|
|
NONVIRTUAL
|
|
PCWSTRING
|
|
GetNodeClass(
|
|
IN PCREGEDIT_NODE Node
|
|
) CONST;
|
|
|
|
NONVIRTUAL
|
|
PCTIMEINFO
|
|
GetNodeLastWriteTime(
|
|
IN PCREGEDIT_NODE Node
|
|
) CONST;
|
|
|
|
NONVIRTUAL
|
|
ULONG
|
|
GetNodeLevel(
|
|
IN PCREGEDIT_NODE Node
|
|
) CONST;
|
|
|
|
NONVIRTUAL
|
|
PCWSTRING
|
|
GetNodeName(
|
|
IN PCREGEDIT_NODE Node
|
|
) CONST;
|
|
|
|
NONVIRTUAL
|
|
ULONG
|
|
GetNodeTitleIndex(
|
|
IN PCREGEDIT_NODE Node
|
|
) CONST;
|
|
|
|
NONVIRTUAL
|
|
ULONG
|
|
GetNumberOfChildren(
|
|
IN PCREGEDIT_NODE Node
|
|
) CONST;
|
|
|
|
NONVIRTUAL
|
|
ULONG
|
|
GetNumberOfValues(
|
|
IN PCREGEDIT_NODE Node
|
|
) CONST;
|
|
|
|
NONVIRTUAL
|
|
PCREGEDIT_NODE
|
|
GetParent(
|
|
IN PCREGEDIT_NODE Node
|
|
) CONST;
|
|
|
|
NONVIRTUAL
|
|
PCWSTRING
|
|
GetParentName(
|
|
IN PCREGEDIT_NODE Node
|
|
) CONST;
|
|
|
|
NONVIRTUAL
|
|
PREDEFINED_KEY
|
|
GetPredefinedKey(
|
|
) CONST;
|
|
|
|
NONVIRTUAL
|
|
PCREGEDIT_NODE
|
|
GetPreviousNode(
|
|
IN PCREGEDIT_NODE CurrentNode,
|
|
IN PCREGEDIT_NODE LastTraversedNode
|
|
);
|
|
|
|
NONVIRTUAL
|
|
PCWSTRING
|
|
GetRootName(
|
|
) CONST;
|
|
|
|
NONVIRTUAL
|
|
PCREGEDIT_NODE
|
|
GetRootNode(
|
|
) CONST;
|
|
|
|
NONVIRTUAL
|
|
PSORTED_LIST
|
|
GetValues(
|
|
IN PCREGEDIT_NODE Node,
|
|
OUT PULONG ErrorCode
|
|
);
|
|
|
|
NONVIRTUAL
|
|
BOOLEAN
|
|
IsFirstChild(
|
|
IN PCREGEDIT_NODE Node
|
|
) CONST;
|
|
|
|
NONVIRTUAL
|
|
BOOLEAN
|
|
IsLastChild(
|
|
IN PCREGEDIT_NODE Node
|
|
) CONST;
|
|
|
|
NONVIRTUAL
|
|
BOOLEAN
|
|
IsMasterHive(
|
|
) CONST;
|
|
|
|
NONVIRTUAL
|
|
BOOLEAN
|
|
IsNodeExpanded(
|
|
IN PCREGEDIT_NODE Node
|
|
) CONST;
|
|
|
|
NONVIRTUAL
|
|
BOOLEAN
|
|
IsNodeViewable(
|
|
IN PCREGEDIT_NODE Node
|
|
) CONST;
|
|
|
|
NONVIRTUAL
|
|
BOOLEAN
|
|
IsRemoteRegistry(
|
|
) CONST;
|
|
|
|
NONVIRTUAL
|
|
BOOLEAN
|
|
LoadHive(
|
|
IN PCREGEDIT_NODE ParentNode,
|
|
IN PREGISTRY_KEY_INFO HiveInfo,
|
|
IN PCWSTRING FileName,
|
|
OUT PCREGEDIT_NODE* HiveNode,
|
|
OUT PULONG ErrorCode
|
|
);
|
|
|
|
/*
|
|
NONVIRTUAL
|
|
BOOLEAN
|
|
ReleaseNode(
|
|
IN PCREGEDIT_NODE Node
|
|
);
|
|
*/
|
|
NONVIRTUAL
|
|
BOOLEAN
|
|
QueryCompleteNodeName(
|
|
IN PCREGEDIT_NODE Node,
|
|
OUT PWSTRING CompleteName
|
|
) CONST;
|
|
|
|
NONVIRTUAL
|
|
BOOLEAN
|
|
QueryNodeSecurity(
|
|
IN PCREGEDIT_NODE Node,
|
|
IN SECURITY_INFORMATION SecurityInformation,
|
|
OUT PSECURITY_DESCRIPTOR* SecurityDescriptor,
|
|
OUT PULONG ErrorCode
|
|
);
|
|
|
|
NONVIRTUAL
|
|
BOOLEAN
|
|
SetNodeSecurity(
|
|
IN PCREGEDIT_NODE Node,
|
|
IN SECURITY_INFORMATION SecurityInformation,
|
|
IN PSECURITY_DESCRIPTOR SecurityDescriptor,
|
|
OUT PULONG ErrorCode,
|
|
IN BOOLEAN Recurse
|
|
);
|
|
|
|
NONVIRTUAL
|
|
VOID
|
|
SetNodeExpansionState(
|
|
IN PCREGEDIT_NODE Node,
|
|
IN BOOLEAN NewState
|
|
);
|
|
|
|
NONVIRTUAL
|
|
BOOLEAN
|
|
UnloadChildren(
|
|
IN PCREGEDIT_NODE Node
|
|
);
|
|
|
|
NONVIRTUAL
|
|
BOOLEAN
|
|
UnloadValues(
|
|
IN PCREGEDIT_NODE Node
|
|
);
|
|
|
|
NONVIRTUAL
|
|
VOID
|
|
UpdateSubTree(
|
|
IN PREGEDIT_NODE Node
|
|
);
|
|
|
|
NONVIRTUAL
|
|
BOOLEAN
|
|
UnLoadHive(
|
|
IN PREGEDIT_NODE Node,
|
|
OUT PULONG ErrorCode
|
|
);
|
|
|
|
NONVIRTUAL
|
|
BOOLEAN
|
|
SaveKeyToFile(
|
|
IN PCREGEDIT_NODE Node,
|
|
IN PCWSTRING FileName,
|
|
OUT PULONG ErrorCode
|
|
);
|
|
|
|
NONVIRTUAL
|
|
BOOLEAN
|
|
RestoreKeyFromFile(
|
|
IN PCREGEDIT_NODE Node,
|
|
IN PCWSTRING FileName,
|
|
IN BOOLEAN Volatile,
|
|
OUT PULONG ErrorCode
|
|
);
|
|
|
|
|
|
|
|
|
|
/*
|
|
NONVIRTUAL
|
|
BOOLEAN
|
|
DidRootChange(
|
|
// IN PREDEFINED_KEY PredefinedKey
|
|
);
|
|
*/
|
|
NONVIRTUAL
|
|
BOOLEAN
|
|
EnableRootNotification(
|
|
// IN PREDEFINED_KEY PredefinedKey,
|
|
IN HANDLE Event,
|
|
IN DWORD Filter,
|
|
IN BOOLEAN WatchTree DEFAULT TRUE
|
|
// IN PVOID CallBackFunction DEFAULT NULL
|
|
);
|
|
|
|
|
|
|
|
NONVIRTUAL
|
|
BOOLEAN
|
|
IsAccessAllowed(
|
|
IN PCREGEDIT_NODE Node,
|
|
IN REGSAM SamDesired,
|
|
OUT PULONG ErrorCode
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
private:
|
|
|
|
NONVIRTUAL
|
|
VOID
|
|
Construct(
|
|
);
|
|
|
|
NONVIRTUAL
|
|
VOID
|
|
Destroy(
|
|
);
|
|
|
|
NONVIRTUAL
|
|
PREGISTRY_KEY_INFO
|
|
GetNodeKeyInfo(
|
|
IN PCREGEDIT_NODE Node
|
|
) CONST;
|
|
|
|
NONVIRTUAL
|
|
BOOLEAN
|
|
IsKeyInListOfChildren(
|
|
IN PCWSTRING KeyName,
|
|
IN PSORTED_LIST Children
|
|
);
|
|
|
|
NONVIRTUAL
|
|
ULONG
|
|
MapRegistryToRegeditError(
|
|
IN DWORD ErrorCode
|
|
) CONST;
|
|
|
|
|
|
|
|
PREDEFINED_KEY _PredefinedKey;
|
|
PREGISTRY _Registry;
|
|
DSTRING _RootName;
|
|
REGEDIT_NODE _RootNode;
|
|
|
|
|
|
};
|
|
|
|
|
|
INLINE
|
|
BOOLEAN
|
|
REGEDIT_INTERNAL_REGISTRY::AreChildrenInMemory(
|
|
IN PCREGEDIT_NODE Node
|
|
) CONST
|
|
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Inform the caller whether the children of the specified node are
|
|
loaded in memory.
|
|
|
|
|
|
Arguments:
|
|
|
|
Node - Pointer to REGEDIT_NODE object.
|
|
|
|
|
|
Return Value:
|
|
|
|
|
|
BOOLEAN - Returns TRUE if the children are in memory, or FALSE otherwise.
|
|
|
|
--*/
|
|
|
|
{
|
|
DebugPtrAssert( Node );
|
|
return( Node->AreChildrenInMemory() );
|
|
}
|
|
|
|
|
|
|
|
INLINE
|
|
BOOLEAN
|
|
REGEDIT_INTERNAL_REGISTRY::AreValuesInMemory(
|
|
IN PCREGEDIT_NODE Node
|
|
) CONST
|
|
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Inform the caller whether the values of the specified node are
|
|
loaded in memory.
|
|
|
|
|
|
Arguments:
|
|
|
|
Node - Pointer to REGEDIT_NODE object.
|
|
|
|
|
|
Return Value:
|
|
|
|
|
|
BOOLEAN - Returns TRUE if the children are in memory, or FALSE otherwise.
|
|
|
|
--*/
|
|
|
|
{
|
|
DebugPtrAssert( Node );
|
|
return( Node->AreValuesInMemory() );
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
INLINE
|
|
PCWSTRING
|
|
REGEDIT_INTERNAL_REGISTRY::GetMachineName(
|
|
) CONST
|
|
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Return to the client the name of the machine associated to the
|
|
registry represented by this object.
|
|
|
|
|
|
Arguments:
|
|
|
|
None.
|
|
|
|
|
|
Return Value:
|
|
|
|
|
|
PCWSTRING - The machine name.
|
|
|
|
--*/
|
|
|
|
{
|
|
DebugPtrAssert( _Registry );
|
|
return( _Registry->GetMachineName() );
|
|
}
|
|
|
|
|
|
|
|
INLINE
|
|
BOOLEAN
|
|
REGEDIT_INTERNAL_REGISTRY::IsRemoteRegistry(
|
|
) CONST
|
|
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Inform to the client whether the registry represented by this object is on the remote machine.
|
|
|
|
|
|
Arguments:
|
|
|
|
None.
|
|
|
|
|
|
Return Value:
|
|
|
|
|
|
BOOLEAN - Returns TRUE if it is a registry on a remote machine. Otherwise, returns FALSE.
|
|
|
|
--*/
|
|
|
|
{
|
|
DebugPtrAssert( _Registry );
|
|
return( _Registry->IsRemoteRegistry() );
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
INLINE
|
|
PCWSTRING
|
|
REGEDIT_INTERNAL_REGISTRY::GetNodeClass(
|
|
IN PCREGEDIT_NODE Node
|
|
) CONST
|
|
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Return to the client the class of the node passed as argument.
|
|
|
|
|
|
Arguments:
|
|
|
|
Node - Pointer to REGEDIT_NODE object.
|
|
|
|
|
|
Return Value:
|
|
|
|
|
|
PCWSTRING - The node class.
|
|
|
|
--*/
|
|
|
|
{
|
|
DebugPtrAssert( Node );
|
|
return( Node->GetKeyInfo()->GetClass() );
|
|
}
|
|
|
|
|
|
|
|
|
|
INLINE
|
|
PREGISTRY_KEY_INFO
|
|
REGEDIT_INTERNAL_REGISTRY::GetNodeKeyInfo(
|
|
IN PCREGEDIT_NODE Node
|
|
) CONST
|
|
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Return to the client the REGISTRY_KEY_INFO object in this node.
|
|
|
|
|
|
Arguments:
|
|
|
|
Node - Pointer to REGEDIT_NODE object.
|
|
|
|
|
|
Return Value:
|
|
|
|
|
|
PREGISTRY_KEY_INFO - The node KeyInfo..
|
|
|
|
--*/
|
|
|
|
{
|
|
DebugPtrAssert( Node );
|
|
return( Node->GetKeyInfo() );
|
|
}
|
|
|
|
|
|
|
|
|
|
INLINE
|
|
PCTIMEINFO
|
|
REGEDIT_INTERNAL_REGISTRY::GetNodeLastWriteTime(
|
|
IN PCREGEDIT_NODE Node
|
|
) CONST
|
|
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Return to the client the last write time of the node passed as argument.
|
|
|
|
|
|
Arguments:
|
|
|
|
Node - Pointer to REGEDIT_NODE object.
|
|
|
|
|
|
Return Value:
|
|
|
|
|
|
PCTIMEINFO - The node last write time.
|
|
|
|
--*/
|
|
|
|
{
|
|
DebugPtrAssert( Node );
|
|
return( Node->GetKeyInfo()->GetLastWriteTime() );
|
|
}
|
|
|
|
|
|
|
|
INLINE
|
|
ULONG
|
|
REGEDIT_INTERNAL_REGISTRY::GetNodeLevel(
|
|
IN PCREGEDIT_NODE Node
|
|
) CONST
|
|
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Return to the client the level (depth in the tree) of the node
|
|
passed as argument.
|
|
|
|
|
|
Arguments:
|
|
|
|
Node - Pointer to REGEDIT_NODE object.
|
|
|
|
|
|
Return Value:
|
|
|
|
|
|
ULONG - Level of the node in the tree ( 0 ==> root ).
|
|
|
|
--*/
|
|
|
|
{
|
|
DebugPtrAssert( Node );
|
|
return( Node->GetLevel() );
|
|
}
|
|
|
|
|
|
|
|
INLINE
|
|
PCWSTRING
|
|
REGEDIT_INTERNAL_REGISTRY::GetNodeName(
|
|
IN PCREGEDIT_NODE Node
|
|
) CONST
|
|
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Return to the client the name of the node passed as argument.
|
|
|
|
|
|
Arguments:
|
|
|
|
Node - Pointer to REGEDIT_NODE object.
|
|
|
|
|
|
Return Value:
|
|
|
|
|
|
PCWSTRING - The node name
|
|
|
|
--*/
|
|
|
|
{
|
|
DebugPtrAssert( Node );
|
|
return( Node->GetKeyInfo()->GetName() );
|
|
}
|
|
|
|
|
|
|
|
INLINE
|
|
ULONG
|
|
REGEDIT_INTERNAL_REGISTRY::GetNodeTitleIndex(
|
|
IN PCREGEDIT_NODE Node
|
|
) CONST
|
|
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Return to the client the title index of the node passed as argument.
|
|
|
|
|
|
Arguments:
|
|
|
|
Node - Pointer to REGEDIT_NODE object.
|
|
|
|
|
|
Return Value:
|
|
|
|
|
|
ULONG - The title index of the node.
|
|
|
|
--*/
|
|
|
|
{
|
|
DebugPtrAssert( Node );
|
|
return( Node->GetKeyInfo()->GetTitleIndex() );
|
|
}
|
|
|
|
|
|
|
|
|
|
INLINE
|
|
ULONG
|
|
REGEDIT_INTERNAL_REGISTRY::GetNumberOfChildren(
|
|
IN PCREGEDIT_NODE Node
|
|
) CONST
|
|
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Return to the client the number of children in the node passed as argument.
|
|
|
|
|
|
Arguments:
|
|
|
|
Node - Pointer to REGEDIT_NODE object.
|
|
|
|
|
|
Return Value:
|
|
|
|
|
|
ULONG - The title index of the node.
|
|
|
|
--*/
|
|
|
|
{
|
|
DebugPtrAssert( Node );
|
|
return( Node->GetNumberOfChildren() );
|
|
}
|
|
|
|
|
|
|
|
INLINE
|
|
ULONG
|
|
REGEDIT_INTERNAL_REGISTRY::GetNumberOfValues(
|
|
IN PCREGEDIT_NODE Node
|
|
) CONST
|
|
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Return to the client the number of values in the node passed as argument.
|
|
|
|
|
|
Arguments:
|
|
|
|
Node - Pointer to REGEDIT_NODE object.
|
|
|
|
|
|
Return Value:
|
|
|
|
|
|
ULONG - The title index of the node.
|
|
|
|
--*/
|
|
|
|
{
|
|
DebugPtrAssert( Node );
|
|
return( Node->GetNumberOfValues() );
|
|
}
|
|
|
|
|
|
INLINE
|
|
PCREGEDIT_NODE
|
|
REGEDIT_INTERNAL_REGISTRY::GetParent(
|
|
PCREGEDIT_NODE Node
|
|
) CONST
|
|
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Return the pointer to the parent node.
|
|
|
|
|
|
Arguments:
|
|
|
|
Node - Pointer to the object that describes the node whose parent is
|
|
to be retrieved.
|
|
|
|
|
|
Return Value:
|
|
|
|
PCREGEDIT_NODE - Pointer to REGEDIT_NODE object that represents the
|
|
parent node.
|
|
|
|
|
|
--*/
|
|
|
|
{
|
|
DebugPtrAssert( Node );
|
|
return( Node->GetParentNode() );
|
|
}
|
|
|
|
|
|
INLINE
|
|
PCWSTRING
|
|
REGEDIT_INTERNAL_REGISTRY::GetParentName(
|
|
PCREGEDIT_NODE Node
|
|
) CONST
|
|
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Return the pointer to the parent's name.
|
|
|
|
|
|
Arguments:
|
|
|
|
Node - Pointer to the object that describes the node whose parent name is
|
|
to be retrieved.
|
|
|
|
|
|
Return Value:
|
|
|
|
PCWSTRING - Name of the parent node.
|
|
|
|
|
|
--*/
|
|
|
|
{
|
|
DebugPtrAssert( Node );
|
|
return( Node->GetParentName() );
|
|
}
|
|
|
|
|
|
INLINE
|
|
PREDEFINED_KEY
|
|
REGEDIT_INTERNAL_REGISTRY::GetPredefinedKey(
|
|
) CONST
|
|
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Return the predefined key stored in this object.
|
|
|
|
|
|
Arguments:
|
|
|
|
None.
|
|
|
|
|
|
Return Value:
|
|
|
|
PREDEFINED_KEY - The predeifined key stored in this object.
|
|
|
|
|
|
--*/
|
|
|
|
{
|
|
return( _PredefinedKey );
|
|
}
|
|
|
|
|
|
INLINE
|
|
PCWSTRING
|
|
REGEDIT_INTERNAL_REGISTRY::GetRootName(
|
|
) CONST
|
|
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Return the name of the the predefined key associated with this
|
|
REGEDIT_INTERNAL_REGISTRY object.
|
|
|
|
|
|
Arguments:
|
|
|
|
None.
|
|
|
|
|
|
Return Value:
|
|
|
|
PCWSTRING - Pointer to a WSTRING object that contains the machine name.
|
|
|
|
|
|
--*/
|
|
|
|
{
|
|
return( &_RootName );
|
|
}
|
|
|
|
|
|
INLINE
|
|
PCREGEDIT_NODE
|
|
REGEDIT_INTERNAL_REGISTRY::GetRootNode(
|
|
) CONST
|
|
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Return the pointer to the REGEDIT_NODE object that describes the
|
|
predefined key associated with this REGEDIT_INTERNAL_REGISTRY object.
|
|
|
|
|
|
Arguments:
|
|
|
|
None.
|
|
|
|
|
|
Return Value:
|
|
|
|
PCREGEDIT_NODE - Pointer to the REGEDIT_NODE object that describes
|
|
the predefined key represented by this object
|
|
|
|
|
|
|
|
--*/
|
|
|
|
{
|
|
return( &_RootNode );
|
|
}
|
|
|
|
|
|
|
|
INLINE
|
|
BOOLEAN
|
|
REGEDIT_INTERNAL_REGISTRY::IsFirstChild(
|
|
IN PCREGEDIT_NODE Node
|
|
) CONST
|
|
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Inform the caller if the node passed as argument is the first child of
|
|
its parent.
|
|
|
|
|
|
Arguments:
|
|
|
|
Node - Pointer to a REGEDIT_NODE object.
|
|
|
|
|
|
Return Value:
|
|
|
|
BOOLEAN - Returns true if it is the first child.
|
|
|
|
|
|
|
|
--*/
|
|
|
|
{
|
|
DebugPtrAssert( Node );
|
|
return( Node->IsFirstChild() );
|
|
}
|
|
|
|
|
|
|
|
INLINE
|
|
BOOLEAN
|
|
REGEDIT_INTERNAL_REGISTRY::IsLastChild(
|
|
IN PCREGEDIT_NODE Node
|
|
) CONST
|
|
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Inform the caller if the node passed as argument is the last child of
|
|
its parent.
|
|
|
|
|
|
Arguments:
|
|
|
|
Node - Pointer to a REGEDIT_NODE object.
|
|
|
|
|
|
Return Value:
|
|
|
|
BOOLEAN - Returns true if it is the last child.
|
|
|
|
|
|
|
|
--*/
|
|
|
|
{
|
|
DebugPtrAssert( Node );
|
|
return( Node->IsLastChild() );
|
|
}
|
|
|
|
|
|
|
|
INLINE
|
|
BOOLEAN
|
|
REGEDIT_INTERNAL_REGISTRY::IsNodeExpanded(
|
|
IN PCREGEDIT_NODE Node
|
|
) CONST
|
|
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Inform the client whether the node is being displayed in the tree
|
|
view as an expanded or as a collapsed node.
|
|
|
|
|
|
Arguments:
|
|
|
|
Node - Pointer to a REGEDIT_NODE object.
|
|
|
|
Return Value:
|
|
|
|
|
|
BOOLEAN - Returns TRUE if the node is expanded, or FALSE if the node
|
|
is collapsed.
|
|
|
|
--*/
|
|
|
|
{
|
|
DebugPtrAssert( Node );
|
|
return( Node->IsNodeExpanded() );
|
|
}
|
|
|
|
|
|
|
|
INLINE
|
|
BOOLEAN
|
|
REGEDIT_INTERNAL_REGISTRY::IsNodeViewable(
|
|
IN PCREGEDIT_NODE Node
|
|
) CONST
|
|
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Inform the client whether this node should be displayed in the tree
|
|
view as a grayed node, to indicate to the user the he cannot view it
|
|
or access it.
|
|
|
|
|
|
Arguments:
|
|
|
|
Node - Pointer to a REGEDIT_NODE object.
|
|
|
|
Return Value:
|
|
|
|
|
|
BOOLEAN - Returns TRUE if the node is viewable, or FALSE otherwise.
|
|
|
|
--*/
|
|
|
|
{
|
|
DebugPtrAssert( Node );
|
|
return( Node->IsNodeViewable() );
|
|
}
|
|
|
|
|
|
|
|
INLINE
|
|
BOOLEAN
|
|
REGEDIT_INTERNAL_REGISTRY::QueryCompleteNodeName(
|
|
IN PCREGEDIT_NODE Node,
|
|
OUT PWSTRING CompleteName
|
|
) CONST
|
|
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Returns the complete name of the node passed as argument.
|
|
|
|
|
|
Arguments:
|
|
|
|
Node - Pointer to a REGEDIT_NODE object.
|
|
|
|
CompleteName - Pointer to a non initialized WSTRING object that will
|
|
contain the complete node name.
|
|
|
|
|
|
Return Value:
|
|
|
|
BOOLEAN - Returns TRUE if the operation succeeds. Otherwise, returns
|
|
FALSE.
|
|
|
|
|
|
|
|
--*/
|
|
|
|
{
|
|
DebugPtrAssert( Node );
|
|
DebugPtrAssert( CompleteName );
|
|
|
|
return( Node->QueryCompleteName( CompleteName ) );
|
|
}
|
|
|
|
|
|
|
|
|
|
INLINE
|
|
VOID
|
|
REGEDIT_INTERNAL_REGISTRY::SetNodeExpansionState(
|
|
IN PCREGEDIT_NODE Node,
|
|
IN BOOLEAN NewExpansionState
|
|
)
|
|
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Save in the node the information that indivcates whether the node is
|
|
displayed as a an expanded or collapsed node.
|
|
|
|
|
|
Arguments:
|
|
|
|
Node - Pointer to a REGEDIT_NODE object whose diplay status is to be
|
|
saved.
|
|
|
|
NewExpansionState - Contains the information on how the node is currently
|
|
displayed. TRUE indicates that the node is expanded,
|
|
and FALSE indicates that the node is collapsed.
|
|
|
|
|
|
Return Value:
|
|
|
|
|
|
None.
|
|
|
|
--*/
|
|
|
|
{
|
|
DebugPtrAssert( Node );
|
|
( ( PREGEDIT_NODE )Node )->SetNodeExpansionState( NewExpansionState );
|
|
}
|
|
|
|
|
|
|
|
INLINE
|
|
BOOLEAN
|
|
REGEDIT_INTERNAL_REGISTRY::UnloadChildren(
|
|
IN PCREGEDIT_NODE Node
|
|
)
|
|
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Unload from memory the children of a node, if they are loaded in memory.
|
|
|
|
|
|
Arguments:
|
|
|
|
Node - Pointer to a REGEDIT_NODE object whose children are to be unloaded
|
|
from memory.
|
|
|
|
|
|
Return Value:
|
|
|
|
BOOLEAN - Returns TRUE if the operation succeeded.
|
|
|
|
|
|
--*/
|
|
|
|
{
|
|
DebugPtrAssert( Node );
|
|
return( ( ( PREGEDIT_NODE )Node )->DeleteListOfChildren() );
|
|
}
|
|
|
|
|
|
|
|
|
|
INLINE
|
|
BOOLEAN
|
|
REGEDIT_INTERNAL_REGISTRY::UnloadValues(
|
|
IN PCREGEDIT_NODE Node
|
|
)
|
|
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Unload from memory the values of a node, if they are loaded in memory.
|
|
|
|
|
|
Arguments:
|
|
|
|
Node - Pointer to a REGEDIT_NODE object whose values are to be unloaded
|
|
from memory.
|
|
|
|
|
|
Return Value:
|
|
|
|
BOOLEAN - Returns TRUE if the operation succeeded.
|
|
|
|
|
|
--*/
|
|
|
|
{
|
|
DebugPtrAssert( Node );
|
|
return( ( ( PREGEDIT_NODE )Node )->DeleteListOfValues() );
|
|
}
|
|
|
|
|
|
|
|
#if 0
|
|
|
|
INLINE
|
|
BOOLEAN
|
|
REGEDIT_INTERNAL_REGISTRY::DidRootChange(
|
|
)
|
|
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Find out if the root node has changed
|
|
|
|
Arguments:
|
|
|
|
|
|
|
|
Return Value:
|
|
|
|
|
|
|
|
--*/
|
|
|
|
{
|
|
return( _Registry->DidRootChange( _PredefinedKey ) );
|
|
}
|
|
#endif
|
|
|
|
|
|
INLINE
|
|
BOOLEAN
|
|
REGEDIT_INTERNAL_REGISTRY::EnableRootNotification(
|
|
IN HANDLE Event,
|
|
IN DWORD Filter,
|
|
IN BOOLEAN WatchTree
|
|
// IN PVOID CallBackFunction
|
|
)
|
|
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Enable notification in a predefined key.
|
|
|
|
Arguments:
|
|
|
|
|
|
|
|
Return Value:
|
|
|
|
|
|
None.
|
|
|
|
--*/
|
|
|
|
{
|
|
return( _Registry->EnableRootNotification( _PredefinedKey,
|
|
Event,
|
|
Filter,
|
|
WatchTree
|
|
/* CallBackFunction */ ) );
|
|
}
|
|
|
|
|
|
|
|
INLINE
|
|
BOOLEAN
|
|
REGEDIT_INTERNAL_REGISTRY::AreHiveOperationsAllowed(
|
|
)
|
|
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Inform the client if its is possible to load/unload keys.
|
|
|
|
|
|
Arguments:
|
|
|
|
None.
|
|
|
|
Return Value:
|
|
|
|
|
|
BOOLEAN - Returns TRUE if Load/Unload key is allowed.
|
|
Returns FALSE otherwise.
|
|
|
|
--*/
|
|
|
|
{
|
|
return( ( _PredefinedKey == PREDEFINED_KEY_LOCAL_MACHINE ) ||
|
|
( _PredefinedKey == PREDEFINED_KEY_USERS ) ||
|
|
( _PredefinedKey == PREDEFINED_KEY_CURRENT_USER ) );
|
|
}
|
|
|
|
|
|
|
|
INLINE
|
|
BOOLEAN
|
|
REGEDIT_INTERNAL_REGISTRY::IsMasterHive(
|
|
) CONST
|
|
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Inform the client if the root node is a master hive.
|
|
|
|
|
|
Arguments:
|
|
|
|
None.
|
|
|
|
Return Value:
|
|
|
|
|
|
BOOLEAN - Returns TRUE if the root node is a master hive.
|
|
Returns FALSE otherwise.
|
|
|
|
--*/
|
|
|
|
{
|
|
return( ( _PredefinedKey == PREDEFINED_KEY_LOCAL_MACHINE ) ||
|
|
( _PredefinedKey == PREDEFINED_KEY_USERS ) );
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
#endif // _REGEDIT_INTERNAL_REGISTRY_
|