[DDK/XDK]

- Add function types, not only function pointer types, for splay/avl tree functions
- RTL_SPLAY_LINKS needs to be defined regardless of RTL_USE_AVL_TABLES
[NDK]
- Add missing splay/avl tree function declarations
- Add the function types as well. These are also not in ntifs anymore

svn path=/trunk/; revision=53073
This commit is contained in:
Thomas Faber 2011-08-05 01:20:28 +00:00
parent 9c2f3b9dec
commit 6de4861d8c
4 changed files with 269 additions and 103 deletions

View file

@ -2690,26 +2690,30 @@ typedef enum _RTL_GENERIC_COMPARE_RESULTS {
struct _RTL_AVL_TABLE; struct _RTL_AVL_TABLE;
typedef RTL_GENERIC_COMPARE_RESULTS typedef RTL_GENERIC_COMPARE_RESULTS
(NTAPI *PRTL_AVL_COMPARE_ROUTINE) ( (NTAPI RTL_AVL_COMPARE_ROUTINE) (
IN struct _RTL_AVL_TABLE *Table, IN struct _RTL_AVL_TABLE *Table,
IN PVOID FirstStruct, IN PVOID FirstStruct,
IN PVOID SecondStruct); IN PVOID SecondStruct);
typedef RTL_AVL_COMPARE_ROUTINE *PRTL_AVL_COMPARE_ROUTINE;
typedef PVOID typedef PVOID
(NTAPI *PRTL_AVL_ALLOCATE_ROUTINE) ( (NTAPI RTL_AVL_ALLOCATE_ROUTINE) (
IN struct _RTL_AVL_TABLE *Table, IN struct _RTL_AVL_TABLE *Table,
IN CLONG ByteSize); IN CLONG ByteSize);
typedef RTL_AVL_ALLOCATE_ROUTINE *PRTL_AVL_ALLOCATE_ROUTINE;
typedef VOID typedef VOID
(NTAPI *PRTL_AVL_FREE_ROUTINE) ( (NTAPI RTL_AVL_FREE_ROUTINE) (
IN struct _RTL_AVL_TABLE *Table, IN struct _RTL_AVL_TABLE *Table,
IN PVOID Buffer); IN PVOID Buffer);
typedef RTL_AVL_FREE_ROUTINE *PRTL_AVL_FREE_ROUTINE;
typedef NTSTATUS typedef NTSTATUS
(NTAPI *PRTL_AVL_MATCH_FUNCTION) ( (NTAPI RTL_AVL_MATCH_FUNCTION) (
IN struct _RTL_AVL_TABLE *Table, IN struct _RTL_AVL_TABLE *Table,
IN PVOID UserData, IN PVOID UserData,
IN PVOID MatchData); IN PVOID MatchData);
typedef RTL_AVL_MATCH_FUNCTION *PRTL_AVL_MATCH_FUNCTION;
typedef struct _RTL_BALANCED_LINKS { typedef struct _RTL_BALANCED_LINKS {
struct _RTL_BALANCED_LINKS *Parent; struct _RTL_BALANCED_LINKS *Parent;
@ -2733,32 +2737,35 @@ typedef struct _RTL_AVL_TABLE {
PVOID TableContext; PVOID TableContext;
} RTL_AVL_TABLE, *PRTL_AVL_TABLE; } RTL_AVL_TABLE, *PRTL_AVL_TABLE;
#ifndef RTL_USE_AVL_TABLES
struct _RTL_GENERIC_TABLE;
typedef RTL_GENERIC_COMPARE_RESULTS
(NTAPI *PRTL_GENERIC_COMPARE_ROUTINE) (
IN struct _RTL_GENERIC_TABLE *Table,
IN PVOID FirstStruct,
IN PVOID SecondStruct);
typedef PVOID
(NTAPI *PRTL_GENERIC_ALLOCATE_ROUTINE) (
IN struct _RTL_GENERIC_TABLE *Table,
IN CLONG ByteSize);
typedef VOID
(NTAPI *PRTL_GENERIC_FREE_ROUTINE) (
IN struct _RTL_GENERIC_TABLE *Table,
IN PVOID Buffer);
typedef struct _RTL_SPLAY_LINKS { typedef struct _RTL_SPLAY_LINKS {
struct _RTL_SPLAY_LINKS *Parent; struct _RTL_SPLAY_LINKS *Parent;
struct _RTL_SPLAY_LINKS *LeftChild; struct _RTL_SPLAY_LINKS *LeftChild;
struct _RTL_SPLAY_LINKS *RightChild; struct _RTL_SPLAY_LINKS *RightChild;
} RTL_SPLAY_LINKS, *PRTL_SPLAY_LINKS; } RTL_SPLAY_LINKS, *PRTL_SPLAY_LINKS;
#ifndef RTL_USE_AVL_TABLES
struct _RTL_GENERIC_TABLE;
typedef RTL_GENERIC_COMPARE_RESULTS
(NTAPI RTL_GENERIC_COMPARE_ROUTINE) (
IN struct _RTL_GENERIC_TABLE *Table,
IN PVOID FirstStruct,
IN PVOID SecondStruct);
typedef RTL_GENERIC_COMPARE_ROUTINE *PRTL_GENERIC_COMPARE_ROUTINE;
typedef PVOID
(NTAPI RTL_GENERIC_ALLOCATE_ROUTINE) (
IN struct _RTL_GENERIC_TABLE *Table,
IN CLONG ByteSize);
typedef RTL_GENERIC_ALLOCATE_ROUTINE *PRTL_GENERIC_ALLOCATE_ROUTINE;
typedef VOID
(NTAPI RTL_GENERIC_FREE_ROUTINE) (
IN struct _RTL_GENERIC_TABLE *Table,
IN PVOID Buffer);
typedef RTL_GENERIC_FREE_ROUTINE *PRTL_GENERIC_FREE_ROUTINE;
typedef struct _RTL_GENERIC_TABLE { typedef struct _RTL_GENERIC_TABLE {
PRTL_SPLAY_LINKS TableRoot; PRTL_SPLAY_LINKS TableRoot;
LIST_ENTRY InsertOrderList; LIST_ENTRY InsertOrderList;
@ -2775,23 +2782,23 @@ typedef struct _RTL_GENERIC_TABLE {
#ifdef RTL_USE_AVL_TABLES #ifdef RTL_USE_AVL_TABLES
#undef RTL_GENERIC_COMPARE_ROUTINE
#undef PRTL_GENERIC_COMPARE_ROUTINE #undef PRTL_GENERIC_COMPARE_ROUTINE
#undef RTL_GENERIC_COMPARE_ROUTINE #undef RTL_GENERIC_ALLOCATE_ROUTINE
#undef PRTL_GENERIC_ALLOCATE_ROUTINE #undef PRTL_GENERIC_ALLOCATE_ROUTINE
#undef RTL_GENERIC_ALLOCATE_ROUTINE #undef RTL_GENERIC_FREE_ROUTINE
#undef PRTL_GENERIC_FREE_ROUTINE #undef PRTL_GENERIC_FREE_ROUTINE
#undef RTL_GENERIC_FREE_ROUTINE #undef RTL_GENERIC_TABLE
#undef RTL_GENERIC_TABLE
#undef PRTL_GENERIC_TABLE #undef PRTL_GENERIC_TABLE
#define PRTL_GENERIC_COMPARE_ROUTINE PRTL_AVL_COMPARE_ROUTINE #define RTL_GENERIC_COMPARE_ROUTINE RTL_AVL_COMPARE_ROUTINE
#define RTL_GENERIC_COMPARE_ROUTINE RTL_AVL_COMPARE_ROUTINE #define PRTL_GENERIC_COMPARE_ROUTINE PRTL_AVL_COMPARE_ROUTINE
#define PRTL_GENERIC_ALLOCATE_ROUTINE PRTL_AVL_ALLOCATE_ROUTINE #define RTL_GENERIC_ALLOCATE_ROUTINE RTL_AVL_ALLOCATE_ROUTINE
#define RTL_GENERIC_ALLOCATE_ROUTINE RTL_AVL_ALLOCATE_ROUTINE #define PRTL_GENERIC_ALLOCATE_ROUTINE PRTL_AVL_ALLOCATE_ROUTINE
#define PRTL_GENERIC_FREE_ROUTINE PRTL_AVL_FREE_ROUTINE #define RTL_GENERIC_FREE_ROUTINE RTL_AVL_FREE_ROUTINE
#define RTL_GENERIC_FREE_ROUTINE RTL_AVL_FREE_ROUTINE #define PRTL_GENERIC_FREE_ROUTINE PRTL_AVL_FREE_ROUTINE
#define RTL_GENERIC_TABLE RTL_AVL_TABLE #define RTL_GENERIC_TABLE RTL_AVL_TABLE
#define PRTL_GENERIC_TABLE PRTL_AVL_TABLE #define PRTL_GENERIC_TABLE PRTL_AVL_TABLE
#endif /* RTL_USE_AVL_TABLES */ #endif /* RTL_USE_AVL_TABLES */

View file

@ -244,6 +244,107 @@ RtlConvertUlongToLuid(ULONG Ulong)
// //
// RTL Splay Tree Functions // RTL Splay Tree Functions
// //
#ifndef RTL_USE_AVL_TABLES
NTSYSAPI
VOID
NTAPI
RtlInitializeGenericTable(
OUT PRTL_GENERIC_TABLE Table,
IN PRTL_GENERIC_COMPARE_ROUTINE CompareRoutine,
IN PRTL_GENERIC_ALLOCATE_ROUTINE AllocateRoutine,
IN PRTL_GENERIC_FREE_ROUTINE FreeRoutine,
IN PVOID TableContext OPTIONAL
);
NTSYSAPI
PVOID
NTAPI
RtlInsertElementGenericTable(
IN PRTL_GENERIC_TABLE Table,
IN PVOID Buffer,
IN CLONG BufferSize,
OUT PBOOLEAN NewElement OPTIONAL
);
NTSYSAPI
PVOID
NTAPI
RtlInsertElementGenericTableFull(
IN PRTL_GENERIC_TABLE Table,
IN PVOID Buffer,
IN CLONG BufferSize,
OUT PBOOLEAN NewElement OPTIONAL,
IN PVOID NodeOrParent,
IN TABLE_SEARCH_RESULT SearchResult
);
NTSYSAPI
BOOLEAN
NTAPI
RtlDeleteElementGenericTable(
IN PRTL_GENERIC_TABLE Table,
IN PVOID Buffer
);
NTSYSAPI
PVOID
NTAPI
RtlLookupElementGenericTable(
IN PRTL_GENERIC_TABLE Table,
IN PVOID Buffer
);
NTSYSAPI
PVOID
NTAPI
RtlLookupElementGenericTableFull(
IN PRTL_GENERIC_TABLE Table,
IN PVOID Buffer,
OUT PVOID *NodeOrParent,
OUT TABLE_SEARCH_RESULT *SearchResult
);
NTSYSAPI
PVOID
NTAPI
RtlEnumerateGenericTable(
IN PRTL_GENERIC_TABLE Table,
IN BOOLEAN Restart
);
NTSYSAPI
PVOID
NTAPI
RtlEnumerateGenericTableWithoutSplaying(
IN PRTL_GENERIC_TABLE Table,
IN OUT PVOID *RestartKey
);
NTSYSAPI
PVOID
NTAPI
RtlGetElementGenericTable(
IN PRTL_GENERIC_TABLE Table,
IN ULONG I
);
NTSYSAPI
ULONG
NTAPI
RtlNumberGenericTableElements(
IN PRTL_GENERIC_TABLE Table
);
NTSYSAPI
BOOLEAN
NTAPI
RtlIsGenericTableEmpty(
IN PRTL_GENERIC_TABLE Table
);
#endif /* !RTL_USE_AVL_TABLES */
NTSYSAPI NTSYSAPI
PRTL_SPLAY_LINKS PRTL_SPLAY_LINKS
NTAPI NTAPI
@ -254,7 +355,8 @@ RtlSplay(
NTSYSAPI NTSYSAPI
PRTL_SPLAY_LINKS PRTL_SPLAY_LINKS
NTAPI NTAPI
RtlDelete(IN PRTL_SPLAY_LINKS Links RtlDelete(
IN PRTL_SPLAY_LINKS Links
); );
NTSYSAPI NTSYSAPI
@ -462,7 +564,23 @@ RtlIsGenericTableEmptyAvl(
IN PRTL_AVL_TABLE Table IN PRTL_AVL_TABLE Table
); );
#endif #ifdef RTL_USE_AVL_TABLES
#define RtlInitializeGenericTable RtlInitializeGenericTableAvl
#define RtlInsertElementGenericTable RtlInsertElementGenericTableAvl
#define RtlInsertElementGenericTableFull RtlInsertElementGenericTableFullAvl
#define RtlDeleteElementGenericTable RtlDeleteElementGenericTableAvl
#define RtlLookupElementGenericTable RtlLookupElementGenericTableAvl
#define RtlLookupElementGenericTableFull RtlLookupElementGenericTableFullAvl
#define RtlEnumerateGenericTable RtlEnumerateGenericTableAvl
#define RtlEnumerateGenericTableWithoutSplaying RtlEnumerateGenericTableWithoutSplayingAvl
#define RtlGetElementGenericTable RtlGetElementGenericTableAvl
#define RtlNumberGenericTableElements RtlNumberGenericTableElementsAvl
#define RtlIsGenericTableEmpty RtlIsGenericTableEmptyAvl
#endif /* RTL_USE_AVL_TABLES */
#endif /* NTOS_MODE_USER */
// //
// Error and Exception Functions // Error and Exception Functions

View file

@ -296,13 +296,13 @@ C_ASSERT(HEAP_CREATE_VALID_MASK == 0x0007F0FF);
#define RTL_INIT_OBJECT_ATTRIBUTES(n, a) \ #define RTL_INIT_OBJECT_ATTRIBUTES(n, a) \
RTL_CONSTANT_OBJECT_ATTRIBUTES(n, a) RTL_CONSTANT_OBJECT_ATTRIBUTES(n, a)
#else #else /* NTOS_MODE_USER */
// //
// Message Resource Flag // Message Resource Flag
// //
#define MESSAGE_RESOURCE_UNICODE 0x0001 #define MESSAGE_RESOURCE_UNICODE 0x0001
#endif #endif /* !NTOS_MODE_USER */
#define MAXIMUM_LEADBYTES 12 #define MAXIMUM_LEADBYTES 12
// //
@ -350,7 +350,7 @@ extern BOOLEAN NTSYSAPI NLS_MB_OEM_CODE_PAGE_TAG;
(__SOURCE_STRING__) \ (__SOURCE_STRING__) \
} }
#endif #endif /* NTOS_MODE_USER */
#ifdef NTOS_MODE_USER #ifdef NTOS_MODE_USER
@ -372,7 +372,7 @@ typedef enum _RTL_GENERIC_COMPARE_RESULTS
GenericEqual GenericEqual
} RTL_GENERIC_COMPARE_RESULTS; } RTL_GENERIC_COMPARE_RESULTS;
#endif #endif /* NTOS_MODE_USER */
// //
// RTL Path Types // RTL Path Types
@ -425,7 +425,7 @@ typedef VOID
IN PVOID Context IN PVOID Context
); );
#else #else /* !NTOS_MODE_USER */
// //
// Handler during regular RTL Exceptions // Handler during regular RTL Exceptions
@ -462,7 +462,7 @@ extern const PRTL_ALLOCATE_STRING_ROUTINE RtlAllocateStringRoutine;
extern const PRTL_FREE_STRING_ROUTINE RtlFreeStringRoutine; extern const PRTL_FREE_STRING_ROUTINE RtlFreeStringRoutine;
extern const PRTL_REALLOCATE_STRING_ROUTINE RtlReallocateStringRoutine; extern const PRTL_REALLOCATE_STRING_ROUTINE RtlReallocateStringRoutine;
#endif #endif /* NTOS_MODE_USER */
// //
// Callback for RTL Heap Enumeration // Callback for RTL Heap Enumeration
@ -497,52 +497,76 @@ struct _RTL_RANGE;
// //
// Routines and callbacks for the RTL AVL/Generic Table package // Routines and callbacks for the RTL AVL/Generic Table package
// //
#if defined(NTOS_MODE_USER) || (!defined(NTOS_MODE_USER) && !defined(_NTIFS_)) #ifdef NTOS_MODE_USER
typedef NTSTATUS typedef NTSTATUS
(NTAPI *PRTL_AVL_MATCH_FUNCTION)( (NTAPI RTL_AVL_MATCH_FUNCTION)(
struct _RTL_AVL_TABLE *Table, struct _RTL_AVL_TABLE *Table,
PVOID UserData, PVOID UserData,
PVOID MatchData PVOID MatchData
); );
typedef RTL_AVL_MATCH_FUNCTION *PRTL_AVL_MATCH_FUNCTION;
typedef RTL_GENERIC_COMPARE_RESULTS typedef RTL_GENERIC_COMPARE_RESULTS
(NTAPI *PRTL_AVL_COMPARE_ROUTINE) ( (NTAPI RTL_AVL_COMPARE_ROUTINE) (
struct _RTL_AVL_TABLE *Table, struct _RTL_AVL_TABLE *Table,
PVOID FirstStruct, PVOID FirstStruct,
PVOID SecondStruct PVOID SecondStruct
); );
typedef RTL_AVL_COMPARE_ROUTINE *PRTL_AVL_COMPARE_ROUTINE;
typedef RTL_GENERIC_COMPARE_RESULTS typedef RTL_GENERIC_COMPARE_RESULTS
(NTAPI *PRTL_GENERIC_COMPARE_ROUTINE) ( (NTAPI RTL_GENERIC_COMPARE_ROUTINE) (
struct _RTL_GENERIC_TABLE *Table, struct _RTL_GENERIC_TABLE *Table,
PVOID FirstStruct, PVOID FirstStruct,
PVOID SecondStruct PVOID SecondStruct
); );
typedef RTL_GENERIC_COMPARE_ROUTINE *PRTL_GENERIC_COMPARE_ROUTINE;
typedef PVOID typedef PVOID
(NTAPI *PRTL_GENERIC_ALLOCATE_ROUTINE) ( (NTAPI RTL_GENERIC_ALLOCATE_ROUTINE) (
struct _RTL_GENERIC_TABLE *Table, struct _RTL_GENERIC_TABLE *Table,
CLONG ByteSize CLONG ByteSize
); );
typedef RTL_GENERIC_ALLOCATE_ROUTINE *PRTL_GENERIC_ALLOCATE_ROUTINE;
typedef VOID
(NTAPI *PRTL_GENERIC_FREE_ROUTINE) (
struct _RTL_GENERIC_TABLE *Table,
PVOID Buffer
);
typedef PVOID typedef PVOID
(NTAPI *PRTL_AVL_ALLOCATE_ROUTINE) ( (NTAPI RTL_AVL_ALLOCATE_ROUTINE) (
struct _RTL_AVL_TABLE *Table, struct _RTL_AVL_TABLE *Table,
CLONG ByteSize CLONG ByteSize
); );
typedef RTL_AVL_ALLOCATE_ROUTINE *PRTL_AVL_ALLOCATE_ROUTINE;
typedef VOID typedef VOID
(NTAPI *PRTL_AVL_FREE_ROUTINE) ( (NTAPI RTL_GENERIC_FREE_ROUTINE) (
struct _RTL_GENERIC_TABLE *Table,
PVOID Buffer
);
typedef RTL_GENERIC_FREE_ROUTINE *PRTL_GENERIC_FREE_ROUTINE;
typedef VOID
(NTAPI RTL_AVL_FREE_ROUTINE) (
struct _RTL_AVL_TABLE *Table, struct _RTL_AVL_TABLE *Table,
PVOID Buffer PVOID Buffer
); );
#endif typedef RTL_AVL_FREE_ROUTINE *PRTL_AVL_FREE_ROUTINE;
#ifdef RTL_USE_AVL_TABLES
#undef RTL_GENERIC_COMPARE_ROUTINE
#undef PRTL_GENERIC_COMPARE_ROUTINE
#undef RTL_GENERIC_ALLOCATE_ROUTINE
#undef PRTL_GENERIC_ALLOCATE_ROUTINE
#undef RTL_GENERIC_FREE_ROUTINE
#undef PRTL_GENERIC_FREE_ROUTINE
#define RTL_GENERIC_COMPARE_ROUTINE RTL_AVL_COMPARE_ROUTINE
#define PRTL_GENERIC_COMPARE_ROUTINE PRTL_AVL_COMPARE_ROUTINE
#define RTL_GENERIC_ALLOCATE_ROUTINE RTL_AVL_ALLOCATE_ROUTINE
#define PRTL_GENERIC_ALLOCATE_ROUTINE PRTL_AVL_ALLOCATE_ROUTINE
#define RTL_GENERIC_FREE_ROUTINE RTL_AVL_FREE_ROUTINE
#define PRTL_GENERIC_FREE_ROUTINE PRTL_AVL_FREE_ROUTINE
#endif /* RTL_USE_AVL_TABLES */
#endif /* NTOS_MODE_USER */
// //
// RTL Query Registry callback // RTL Query Registry callback
@ -659,6 +683,7 @@ typedef struct _RTL_BALANCED_LINKS
// //
// RTL Avl/Generic Tables // RTL Avl/Generic Tables
// //
#ifndef RTL_USE_AVL_TABLES
typedef struct _RTL_GENERIC_TABLE typedef struct _RTL_GENERIC_TABLE
{ {
PRTL_SPLAY_LINKS TableRoot; PRTL_SPLAY_LINKS TableRoot;
@ -671,6 +696,7 @@ typedef struct _RTL_GENERIC_TABLE
PRTL_GENERIC_FREE_ROUTINE FreeRoutine; PRTL_GENERIC_FREE_ROUTINE FreeRoutine;
PVOID TableContext; PVOID TableContext;
} RTL_GENERIC_TABLE, *PRTL_GENERIC_TABLE; } RTL_GENERIC_TABLE, *PRTL_GENERIC_TABLE;
#endif /* !RTL_USE_AVL_TABLES */
typedef struct _RTL_AVL_TABLE typedef struct _RTL_AVL_TABLE
{ {
@ -687,6 +713,14 @@ typedef struct _RTL_AVL_TABLE
PVOID TableContext; PVOID TableContext;
} RTL_AVL_TABLE, *PRTL_AVL_TABLE; } RTL_AVL_TABLE, *PRTL_AVL_TABLE;
#ifdef RTL_USE_AVL_TABLES
#undef RTL_GENERIC_TABLE
#undef PRTL_GENERIC_TABLE
#define RTL_GENERIC_TABLE RTL_AVL_TABLE
#define PRTL_GENERIC_TABLE PRTL_AVL_TABLE
#endif /* RTL_USE_AVL_TABLES */
// //
// RTL Compression Buffer // RTL Compression Buffer
// //
@ -805,7 +839,7 @@ typedef struct _ACTIVATION_CONTEXT_STACK
} ACTIVATION_CONTEXT_STACK, *PACTIVATION_CONTEXT_STACK; } ACTIVATION_CONTEXT_STACK, *PACTIVATION_CONTEXT_STACK;
#endif #endif
#endif #endif /* NTOS_MODE_USER */
// //
// ACE Structure // ACE Structure
@ -1091,7 +1125,7 @@ typedef struct _RTL_CRITICAL_SECTION
ULONG_PTR SpinCount; ULONG_PTR SpinCount;
} RTL_CRITICAL_SECTION, *PRTL_CRITICAL_SECTION; } RTL_CRITICAL_SECTION, *PRTL_CRITICAL_SECTION;
#endif #endif /* !NTOS_MODE_USER */
// //
// RTL Private Heap Structures // RTL Private Heap Structures
@ -1260,7 +1294,7 @@ typedef struct _TIME_ZONE_INFORMATION
SYSTEMTIME DaylightDate; SYSTEMTIME DaylightDate;
LONG DaylightBias; LONG DaylightBias;
} TIME_ZONE_INFORMATION, *PTIME_ZONE_INFORMATION, *LPTIME_ZONE_INFORMATION; } TIME_ZONE_INFORMATION, *PTIME_ZONE_INFORMATION, *LPTIME_ZONE_INFORMATION;
#endif #endif /* !_WINBASE_ */
// //
// Native version of Timezone Structure // Native version of Timezone Structure
@ -1354,5 +1388,5 @@ typedef struct _MESSAGE_RESOURCE_DATA
MESSAGE_RESOURCE_BLOCK Blocks[ANYSIZE_ARRAY]; MESSAGE_RESOURCE_BLOCK Blocks[ANYSIZE_ARRAY];
} MESSAGE_RESOURCE_DATA, *PMESSAGE_RESOURCE_DATA; } MESSAGE_RESOURCE_DATA, *PMESSAGE_RESOURCE_DATA;
#endif #endif /* !NTOS_MODE_USER */
#endif #endif /* !_RTLTYPES_H */

View file

@ -246,26 +246,30 @@ typedef enum _RTL_GENERIC_COMPARE_RESULTS {
struct _RTL_AVL_TABLE; struct _RTL_AVL_TABLE;
typedef RTL_GENERIC_COMPARE_RESULTS typedef RTL_GENERIC_COMPARE_RESULTS
(NTAPI *PRTL_AVL_COMPARE_ROUTINE) ( (NTAPI RTL_AVL_COMPARE_ROUTINE) (
IN struct _RTL_AVL_TABLE *Table, IN struct _RTL_AVL_TABLE *Table,
IN PVOID FirstStruct, IN PVOID FirstStruct,
IN PVOID SecondStruct); IN PVOID SecondStruct);
typedef RTL_AVL_COMPARE_ROUTINE *PRTL_AVL_COMPARE_ROUTINE;
typedef PVOID typedef PVOID
(NTAPI *PRTL_AVL_ALLOCATE_ROUTINE) ( (NTAPI RTL_AVL_ALLOCATE_ROUTINE) (
IN struct _RTL_AVL_TABLE *Table, IN struct _RTL_AVL_TABLE *Table,
IN CLONG ByteSize); IN CLONG ByteSize);
typedef RTL_AVL_ALLOCATE_ROUTINE *PRTL_AVL_ALLOCATE_ROUTINE;
typedef VOID typedef VOID
(NTAPI *PRTL_AVL_FREE_ROUTINE) ( (NTAPI RTL_AVL_FREE_ROUTINE) (
IN struct _RTL_AVL_TABLE *Table, IN struct _RTL_AVL_TABLE *Table,
IN PVOID Buffer); IN PVOID Buffer);
typedef RTL_AVL_FREE_ROUTINE *PRTL_AVL_FREE_ROUTINE;
typedef NTSTATUS typedef NTSTATUS
(NTAPI *PRTL_AVL_MATCH_FUNCTION) ( (NTAPI RTL_AVL_MATCH_FUNCTION) (
IN struct _RTL_AVL_TABLE *Table, IN struct _RTL_AVL_TABLE *Table,
IN PVOID UserData, IN PVOID UserData,
IN PVOID MatchData); IN PVOID MatchData);
typedef RTL_AVL_MATCH_FUNCTION *PRTL_AVL_MATCH_FUNCTION;
typedef struct _RTL_BALANCED_LINKS { typedef struct _RTL_BALANCED_LINKS {
struct _RTL_BALANCED_LINKS *Parent; struct _RTL_BALANCED_LINKS *Parent;
@ -289,32 +293,35 @@ typedef struct _RTL_AVL_TABLE {
PVOID TableContext; PVOID TableContext;
} RTL_AVL_TABLE, *PRTL_AVL_TABLE; } RTL_AVL_TABLE, *PRTL_AVL_TABLE;
#ifndef RTL_USE_AVL_TABLES
struct _RTL_GENERIC_TABLE;
typedef RTL_GENERIC_COMPARE_RESULTS
(NTAPI *PRTL_GENERIC_COMPARE_ROUTINE) (
IN struct _RTL_GENERIC_TABLE *Table,
IN PVOID FirstStruct,
IN PVOID SecondStruct);
typedef PVOID
(NTAPI *PRTL_GENERIC_ALLOCATE_ROUTINE) (
IN struct _RTL_GENERIC_TABLE *Table,
IN CLONG ByteSize);
typedef VOID
(NTAPI *PRTL_GENERIC_FREE_ROUTINE) (
IN struct _RTL_GENERIC_TABLE *Table,
IN PVOID Buffer);
typedef struct _RTL_SPLAY_LINKS { typedef struct _RTL_SPLAY_LINKS {
struct _RTL_SPLAY_LINKS *Parent; struct _RTL_SPLAY_LINKS *Parent;
struct _RTL_SPLAY_LINKS *LeftChild; struct _RTL_SPLAY_LINKS *LeftChild;
struct _RTL_SPLAY_LINKS *RightChild; struct _RTL_SPLAY_LINKS *RightChild;
} RTL_SPLAY_LINKS, *PRTL_SPLAY_LINKS; } RTL_SPLAY_LINKS, *PRTL_SPLAY_LINKS;
#ifndef RTL_USE_AVL_TABLES
struct _RTL_GENERIC_TABLE;
typedef RTL_GENERIC_COMPARE_RESULTS
(NTAPI RTL_GENERIC_COMPARE_ROUTINE) (
IN struct _RTL_GENERIC_TABLE *Table,
IN PVOID FirstStruct,
IN PVOID SecondStruct);
typedef RTL_GENERIC_COMPARE_ROUTINE *PRTL_GENERIC_COMPARE_ROUTINE;
typedef PVOID
(NTAPI RTL_GENERIC_ALLOCATE_ROUTINE) (
IN struct _RTL_GENERIC_TABLE *Table,
IN CLONG ByteSize);
typedef RTL_GENERIC_ALLOCATE_ROUTINE *PRTL_GENERIC_ALLOCATE_ROUTINE;
typedef VOID
(NTAPI RTL_GENERIC_FREE_ROUTINE) (
IN struct _RTL_GENERIC_TABLE *Table,
IN PVOID Buffer);
typedef RTL_GENERIC_FREE_ROUTINE *PRTL_GENERIC_FREE_ROUTINE;
typedef struct _RTL_GENERIC_TABLE { typedef struct _RTL_GENERIC_TABLE {
PRTL_SPLAY_LINKS TableRoot; PRTL_SPLAY_LINKS TableRoot;
LIST_ENTRY InsertOrderList; LIST_ENTRY InsertOrderList;
@ -331,23 +338,23 @@ typedef struct _RTL_GENERIC_TABLE {
#ifdef RTL_USE_AVL_TABLES #ifdef RTL_USE_AVL_TABLES
#undef RTL_GENERIC_COMPARE_ROUTINE
#undef PRTL_GENERIC_COMPARE_ROUTINE #undef PRTL_GENERIC_COMPARE_ROUTINE
#undef RTL_GENERIC_COMPARE_ROUTINE #undef RTL_GENERIC_ALLOCATE_ROUTINE
#undef PRTL_GENERIC_ALLOCATE_ROUTINE #undef PRTL_GENERIC_ALLOCATE_ROUTINE
#undef RTL_GENERIC_ALLOCATE_ROUTINE #undef RTL_GENERIC_FREE_ROUTINE
#undef PRTL_GENERIC_FREE_ROUTINE #undef PRTL_GENERIC_FREE_ROUTINE
#undef RTL_GENERIC_FREE_ROUTINE #undef RTL_GENERIC_TABLE
#undef RTL_GENERIC_TABLE
#undef PRTL_GENERIC_TABLE #undef PRTL_GENERIC_TABLE
#define PRTL_GENERIC_COMPARE_ROUTINE PRTL_AVL_COMPARE_ROUTINE #define RTL_GENERIC_COMPARE_ROUTINE RTL_AVL_COMPARE_ROUTINE
#define RTL_GENERIC_COMPARE_ROUTINE RTL_AVL_COMPARE_ROUTINE #define PRTL_GENERIC_COMPARE_ROUTINE PRTL_AVL_COMPARE_ROUTINE
#define PRTL_GENERIC_ALLOCATE_ROUTINE PRTL_AVL_ALLOCATE_ROUTINE #define RTL_GENERIC_ALLOCATE_ROUTINE RTL_AVL_ALLOCATE_ROUTINE
#define RTL_GENERIC_ALLOCATE_ROUTINE RTL_AVL_ALLOCATE_ROUTINE #define PRTL_GENERIC_ALLOCATE_ROUTINE PRTL_AVL_ALLOCATE_ROUTINE
#define PRTL_GENERIC_FREE_ROUTINE PRTL_AVL_FREE_ROUTINE #define RTL_GENERIC_FREE_ROUTINE RTL_AVL_FREE_ROUTINE
#define RTL_GENERIC_FREE_ROUTINE RTL_AVL_FREE_ROUTINE #define PRTL_GENERIC_FREE_ROUTINE PRTL_AVL_FREE_ROUTINE
#define RTL_GENERIC_TABLE RTL_AVL_TABLE #define RTL_GENERIC_TABLE RTL_AVL_TABLE
#define PRTL_GENERIC_TABLE PRTL_AVL_TABLE #define PRTL_GENERIC_TABLE PRTL_AVL_TABLE
#endif /* RTL_USE_AVL_TABLES */ #endif /* RTL_USE_AVL_TABLES */