RTL_GENERIC_TABLE - NtDoc

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

typedef struct _RTL_GENERIC_TABLE
{
    PRTL_SPLAY_LINKS TableRoot;
    LIST_ENTRY InsertOrderList;
    PLIST_ENTRY OrderedPointer;
    ULONG WhichOrderedElement;
    ULONG NumberGenericTableElements;
    PRTL_GENERIC_COMPARE_ROUTINE CompareRoutine;
    PRTL_GENERIC_ALLOCATE_ROUTINE AllocateRoutine;
    PRTL_GENERIC_FREE_ROUTINE FreeRoutine;
    PVOID TableContext;
} RTL_GENERIC_TABLE, *PRTL_GENERIC_TABLE;

#endif

View code on GitHub
// ntddk.h

typedef struct _RTL_GENERIC_TABLE {
  PRTL_SPLAY_LINKS              TableRoot;
  LIST_ENTRY                    InsertOrderList;
  PLIST_ENTRY                   OrderedPointer;
  ULONG                         WhichOrderedElement;
  ULONG                         NumberGenericTableElements;
  PRTL_GENERIC_COMPARE_ROUTINE  CompareRoutine;
  PRTL_GENERIC_ALLOCATE_ROUTINE AllocateRoutine;
  PRTL_GENERIC_FREE_ROUTINE     FreeRoutine;
  PVOID                         TableContext;
} RTL_GENERIC_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_generic_table)

_RTL_GENERIC_TABLE structure

Description

The RTL_GENERIC_TABLE structure contains file system-specific data for a splay tree.

RTL_GENERIC_TABLE is opaque and not directly manipulated. Drivers must use the support routines that are described in the Remarks section to manipulate RTL_GENERIC_TABLE values.

Members

TableRoot

Reserved for system use.

InsertOrderList

Reserved for system use.

OrderedPointer

Reserved for system use.

WhichOrderedElement

Reserved for system use.

NumberGenericTableElements

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 a generic table package, you allocate a buffer that is at least sizeof(RTL_GENERIC_TABLE) bytes in size to receive the initialized generic table structure from a call to the RtlInitializeGenericTable routine. You can use the following routines to manipulate the table:

See also

RtlDeleteElementGenericTable

RtlEnumerateGenericTable

RtlEnumerateGenericTableWithoutSplaying

RtlGetElementGenericTable

RtlInitializeGenericTable

RtlInsertElementGenericTable

RtlInsertElementGenericTableFullAvl

RtlIsGenericTableEmpty

RtlLookupElementGenericTable

RtlLookupElementGenericTableFullAvl

RtlNumberGenericTableElements