RTL_AVL_TABLE - NtDoc

Native API online documentation, based on the System Informer (formerly Process Hacker) phnt headers
#ifndef _NTRTL_H

typedef struct _RTL_AVL_TABLE
{
    RTL_BALANCED_LINKS BalancedRoot;
    PVOID OrderedPointer;
    ULONG WhichOrderedElement;
    ULONG NumberGenericTableElements;
    ULONG DepthOfTree;
    PRTL_BALANCED_LINKS RestartKey;
    ULONG DeleteCount;
    PRTL_AVL_COMPARE_ROUTINE CompareRoutine;
    PRTL_AVL_ALLOCATE_ROUTINE AllocateRoutine;
    PRTL_AVL_FREE_ROUTINE FreeRoutine;
    PVOID TableContext;
} RTL_AVL_TABLE, *PRTL_AVL_TABLE;

#endif

View code on GitHub
// ntddk.h

typedef struct _RTL_AVL_TABLE {
  RTL_BALANCED_LINKS        BalancedRoot;
  PVOID                     OrderedPointer;
  ULONG                     WhichOrderedElement;
  ULONG                     NumberGenericTableElements;
  ULONG                     DepthOfTree;
  PRTL_BALANCED_LINKS       RestartKey;
  ULONG                     DeleteCount;
  PRTL_AVL_COMPARE_ROUTINE  CompareRoutine;
  PRTL_AVL_ALLOCATE_ROUTINE AllocateRoutine;
  PRTL_AVL_FREE_ROUTINE     FreeRoutine;
  PVOID                     TableContext;
} RTL_AVL_TABLE;
View the official Windows Driver Kit DDI reference

NtDoc

This structure is documented in Windows Driver Kit.

Windows Driver Kit DDI reference (ns-ntddk-_rtl_avl_table)

_RTL_AVL_TABLE structure

Description

The RTL_AVL_TABLE structure contains file system-specific data for an Adelson-Velsky/Landis (AVL) tree. An AVL tree ensures a more balanced, shallower tree implementation than a splay tree implementation of a generic table (RTL_GENERIC_TABLE).

RTL_AVL_TABLE is opaque, so cannot be directly manipulated. Drivers must use the support routines that are described in the Remarks section to manipulate RTL_AVL_TABLE values.

Members

BalancedRoot

Reserved for system use.

OrderedPointer

Reserved for system use.

WhichOrderedElement

Reserved for system use.

NumberGenericTableElements

Reserved for system use.

DepthOfTree

Reserved for system use.

RestartKey

Reserved for system use.

DeleteCount

Reserved for system use.

CompareRoutine

Reserved for system use.

AllocateRoutine

Reserved for system use.

FreeRoutine

Reserved for system use.

TableContext

Reserved for system use.

Remarks

To initialize an AVL table package, you allocate a buffer that is at least sizeof(RTL_AVL_TABLE) bytes in size. You can then use this buffer to receive the initialized AVL table structure from a call to the RtlInitializeGenericTableAvl routine. Use the following routines to manipulate the table:

See also

RTL_GENERIC_TABLE

RtlDeleteElementGenericTableAvl

RtlEnumerateGenericTableAvl

RtlEnumerateGenericTableLikeADirectory

RtlEnumerateGenericTableWithoutSplayingAvl

RtlGetElementGenericTableAvl

RtlInitializeGenericTableAvl

RtlInsertElementGenericTableAvl

RtlInsertElementGenericTableFullAvl

RtlIsGenericTableEmptyAvl

RtlLookupElementGenericTableAvl

RtlLookupElementGenericTableFullAvl

RtlLookupFirstMatchingElementGenericTableAvl

RtlNumberGenericTableElementsAvl