#ifndef _NTRTL_H
#define RtlInsertAsRightChild(ParentLinks, ChildLinks) \
{ \
PRTL_SPLAY_LINKS _SplayParent; \
PRTL_SPLAY_LINKS _SplayChild; \
_SplayParent = (PRTL_SPLAY_LINKS)(ParentLinks); \
_SplayChild = (PRTL_SPLAY_LINKS)(ChildLinks); \
_SplayParent->RightChild = _SplayChild; \
_SplayChild->Parent = _SplayParent; \
}
View code on GitHub// ntddk.h
VOID RtlInsertAsRightChild(
[in] PRTL_SPLAY_LINKS ParentLinks,
[in] PRTL_SPLAY_LINKS ChildLinks
);
View the official Windows Driver Kit DDI referenceThis function is documented in Windows Driver Kit.
The RtlInsertAsRightChild routine inserts a given splay link into the tree as the right child of a given node in that tree.
ParentLinks [in]Pointer to the node in the tree at which ChildLinks should be inserted as the right child.
ChildLinks [in]Pointer to the splay link node to be inserted into the tree. The node must have been initialized by calling RtlInitializeSplayLinks.
Callers of RtlInsertAsRightChild are responsible for meeting the following criteria:
The node at ParentLinks must have no right child.
A caller can determine whether the node already has a right child by calling RtlRightChild. If RtlRightChild returns NULL, ParentLinks is a valid parameter to RtlInsertAsRightChild.
The node at ChildLinks must have no parent.
A caller can determine whether this node already has a parent by calling RtlIsRoot or RtlParent. If RtlIsRoot returns TRUE when called with ChildLinks, ChildLinks is a valid parameter to RtlInsertAsRightChild. If RtlParent returns an equivalent pointer to ChildLinks, ChildLinks is also a valid parameter to RtlInsertAsRightChild.
Callers of the Rtl splay link routines are responsible for synchronizing access to the splay link tree. A fast mutex is the most efficient synchronization mechanism to use for this purpose.
Callers of RtlInsertAsRightChild must be running at IRQL <= DISPATCH_LEVEL if the splay link tree and ChildLinks node are nonpaged. Usually, callers are running at IRQL PASSIVE_LEVEL.