void NTAPI RtlInitializeGenericTable(
TABLE *pGenericTable,
TABLE_COMPARE_ELEMENTS CompareElements,
TABLE_ALLOCATE_ELEMENT AllocateElement,
TABLE_FREE_ELEMENT FreeElement,
ULONG Unknown
);
ULONG NTAPI RtlNumberGenericTableElements(
TABLE *pGenericTable
);
BOOLEAN NTAPI RtlIsGenericTableEmpty(
TABLE *pGenericTable
);
PVOID NTAPI RtlGetElementGenericTable(
TABLE *pGenericTable,
ULONG ElementNumber
);
PVOID NTAPI RtlInsertElementGenericTable(
TABLE *pGenericTable,
PVOID ElementData,
ULONG DataLength,
OUT BOOLEAN *IsNewElement
);
PVOID NTAPI RtlLookupElementGenericTable(
TABLE *pGenericTable,
PVOID ElementToFind
);
BOOLEAN NTAPI RtlDeleteElementGenericTable(
TABLE *pGenericTable,
PVOID ElementToFind
);
Listing 5.13 Prototypes of the basic generic table APIs.
Conclusion
In this chapter, I demonstrated how to investigate, use, and document a rea-
sonably complicated set of functions. If there is one important moral to this
196 Chapter 5