41 CurrentNode =
Table->TableRoot;
57 CurrentNode = ChildNode;
62 *NodeOrParent = CurrentNode;
72 CurrentNode = ChildNode;
77 *NodeOrParent = CurrentNode;
87 *NodeOrParent = CurrentNode;
109 Table->NumberGenericTableElements = 0;
110 Table->WhichOrderedElement = 0;
111 Table->OrderedPointer = &
Table->InsertOrderList;
171 if (NewElement) *NewElement =
FALSE;
181 Table->NumberGenericTableElements++;
187 Table->TableRoot = NewNode;
208 NewNode = NodeOrParent;
240 return Table->NumberGenericTableElements;
257 (
PVOID)&NodeOrParent,
313 Table->NumberGenericTableElements--;
314 Table->WhichOrderedElement = 0;
315 Table->OrderedPointer = &
Table->InsertOrderList;
339 FoundNode =
Table->TableRoot;
378 FoundNode =
Table->TableRoot;
386 *RestartKey = FoundNode;
392 if (FoundNode) *RestartKey = FoundNode;
424 ULONG OrderedElement, ElementCount;
426 ULONG DeltaUp, DeltaDown;
430 OrderedNode =
Table->OrderedPointer;
431 OrderedElement =
Table->WhichOrderedElement;
432 ElementCount =
Table->NumberGenericTableElements;
438 if (NextI == OrderedElement)
443 ListEntry)->UserData;
447 if (OrderedElement > NextI)
450 if (NextI > (OrderedElement / 2))
453 DeltaDown = OrderedElement - NextI;
457 OrderedNode = OrderedNode->
Blink;
464 OrderedNode = &
Table->InsertOrderList;
468 OrderedNode = OrderedNode->
Flink;
476 DeltaUp = NextI - OrderedElement;
477 DeltaDown = (ElementCount - NextI) + 1;
480 if (DeltaUp <= DeltaDown)
486 OrderedNode = OrderedNode->
Blink;
493 OrderedNode = &
Table->InsertOrderList;
497 OrderedNode = OrderedNode->
Blink;
504 Table->OrderedPointer = OrderedNode;
505 Table->WhichOrderedElement = NextI;
510 ListEntry)->UserData;
NTSYSAPI PRTL_SPLAY_LINKS NTAPI RtlSplay(_Inout_ PRTL_SPLAY_LINKS Links)
RTL_GENERIC_COMPARE_ROUTINE * PRTL_GENERIC_COMPARE_ROUTINE
PVOID NTAPI RtlEnumerateGenericTableLikeADirectory(IN PRTL_AVL_TABLE Table, IN PRTL_AVL_MATCH_FUNCTION MatchFunction, IN PVOID MatchData, IN ULONG NextFlag, IN OUT PVOID *RestartKey, IN OUT PULONG DeleteCount, IN OUT PVOID Buffer)
RTL_GENERIC_ALLOCATE_ROUTINE * PRTL_GENERIC_ALLOCATE_ROUTINE
PVOID NTAPI RtlEnumerateGenericTableWithoutSplaying(IN PRTL_GENERIC_TABLE Table, IN OUT PVOID *RestartKey)
PVOID NTAPI RtlInsertElementGenericTableFull(IN PRTL_GENERIC_TABLE Table, IN PVOID Buffer, IN ULONG BufferSize, OUT PBOOLEAN NewElement OPTIONAL, IN PVOID NodeOrParent, IN TABLE_SEARCH_RESULT SearchResult)
struct _LIST_ENTRY * Blink
#define RtlInsertAsRightChild(ParentLinks, ChildLinks)
enum _TABLE_SEARCH_RESULT TABLE_SEARCH_RESULT
PVOID NTAPI RtlGetElementGenericTable(IN PRTL_GENERIC_TABLE Table, IN ULONG I)
_In_ PRTL_GENERIC_COMPARE_ROUTINE _In_ PRTL_GENERIC_ALLOCATE_ROUTINE _In_ PRTL_GENERIC_FREE_ROUTINE _In_opt_ PVOID TableContext
#define InsertTailList(ListHead, Entry)
VOID NTAPI RtlInitializeGenericTable(IN 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)
#define RtlInsertAsLeftChild(ParentLinks, ChildLinks)
FORCEINLINE BOOLEAN RemoveEntryList(_In_ PLIST_ENTRY Entry)
PVOID NTAPI RtlInsertElementGenericTable(IN PRTL_GENERIC_TABLE Table, IN PVOID Buffer, IN ULONG BufferSize, OUT PBOOLEAN NewElement OPTIONAL)
#define _Analysis_assume_(expr)
PVOID NTAPI RtlLookupElementGenericTable(IN PRTL_GENERIC_TABLE Table, IN PVOID Buffer)
NTSTATUS(* NTAPI)(IN PFILE_FULL_EA_INFORMATION EaBuffer, IN ULONG EaLength, OUT PULONG ErrorOffset)
_In_ PRTL_GENERIC_COMPARE_ROUTINE CompareRoutine
RTL_GENERIC_FREE_ROUTINE * PRTL_GENERIC_FREE_ROUTINE
#define RtlInitializeSplayLinks(Links)
_At_(*)(_In_ PWSK_CLIENT Client, _In_opt_ PUNICODE_STRING NodeName, _In_opt_ PUNICODE_STRING ServiceName, _In_opt_ ULONG NameSpace, _In_opt_ GUID *Provider, _In_opt_ PADDRINFOEXW Hints, _Outptr_ PADDRINFOEXW *Result, _In_opt_ PEPROCESS OwningProcess, _In_opt_ PETHREAD OwningThread, _Inout_ PIRP Irp Result)(Mem)) NTSTATUS(WSKAPI *PFN_WSK_GET_ADDRESS_INFO
PVOID NTAPI RtlEnumerateGenericTable(IN PRTL_GENERIC_TABLE Table, IN BOOLEAN Restart)
_In_ PRTL_GENERIC_COMPARE_ROUTINE _In_ PRTL_GENERIC_ALLOCATE_ROUTINE _In_ PRTL_GENERIC_FREE_ROUTINE FreeRoutine
PFLT_MESSAGE_WAITER_QUEUE CONTAINING_RECORD(Csq, DEVICE_EXTENSION, IrpQueue)) -> WaiterQ.mLock) _IRQL_raises_(DISPATCH_LEVEL) VOID NTAPI FltpAcquireMessageWaiterLock(_In_ PIO_CSQ Csq, _Out_ PKIRQL Irql)
BOOLEAN NTAPI RtlDeleteElementGenericTable(IN PRTL_GENERIC_TABLE Table, IN PVOID Buffer)
struct _LIST_ENTRY * Flink
NTSYSAPI PRTL_SPLAY_LINKS NTAPI RtlDelete(_In_ PRTL_SPLAY_LINKS Links)
struct _TABLE_ENTRY_HEADER * PTABLE_ENTRY_HEADER
#define RtlLeftChild(Links)
RTL_AVL_MATCH_FUNCTION * PRTL_AVL_MATCH_FUNCTION
ULONG NTAPI RtlNumberGenericTableElements(IN PRTL_GENERIC_TABLE Table)
BOOLEAN NTAPI RtlIsGenericTableEmpty(IN PRTL_GENERIC_TABLE Table)
TABLE_SEARCH_RESULT NTAPI RtlpFindGenericTableNodeOrParent(IN PRTL_GENERIC_TABLE Table, IN PVOID Buffer, OUT PRTL_SPLAY_LINKS *NodeOrParent)
#define InitializeListHead(ListHead)
_IRQL_requires_same_ _In_ PVOID _In_ PVOID MatchData
#define FIELD_OFFSET(t, f)
enum _RTL_GENERIC_COMPARE_RESULTS RTL_GENERIC_COMPARE_RESULTS
#define RtlCopyMemory(Destination, Source, Length)
#define RtlRightChild(Links)
_Must_inspect_result_ NTSYSAPI PRTL_SPLAY_LINKS NTAPI RtlRealSuccessor(_In_ PRTL_SPLAY_LINKS Links)
PVOID NTAPI RtlLookupElementGenericTableFull(IN PRTL_GENERIC_TABLE Table, IN PVOID Buffer, OUT PVOID *NodeOrParent, OUT TABLE_SEARCH_RESULT *SearchResult)
_In_ PRTL_GENERIC_COMPARE_ROUTINE _In_ PRTL_GENERIC_ALLOCATE_ROUTINE AllocateRoutine
struct _TABLE_ENTRY_HEADER TABLE_ENTRY_HEADER
_In_ WDFMEMORY _Out_opt_ size_t * BufferSize
PULONG MinorVersion OPTIONAL