[PATCH] ntdll: Add stubs for Rtl*GenericTable*Avl functions
Infinite Loop
teardown at inbox.ru
Sat Dec 4 15:35:45 CST 2021
Those are required to stop Fortnite from crashing during runtime
Signed-off-by: Infinite Loop <teardown at inbox.ru>
---
dlls/ntdll/ntdll.spec | 10 +++---
dlls/ntdll/rtl.c | 49 +++++++++++++++++++++++++++--
dlls/ntoskrnl.exe/ntoskrnl.exe.spec | 10 +++---
include/ddk/ntddk.h | 5 +++
4 files changed, 62 insertions(+), 12 deletions(-)
diff --git a/dlls/ntdll/ntdll.spec b/dlls/ntdll/ntdll.spec
index 85bc32a..04bd76a 100644
--- a/dlls/ntdll/ntdll.spec
+++ b/dlls/ntdll/ntdll.spec
@@ -589,7 +589,7 @@
@ stdcall RtlDeleteCriticalSection(ptr)
@ stdcall -arch=arm,arm64,x86_64 RtlDeleteGrowableFunctionTable(ptr)
@ stub RtlDeleteElementGenericTable
-@ stub RtlDeleteElementGenericTableAvl
+@ stdcall RtlDeleteElementGenericTableAvl(ptr ptr)
@ cdecl -arch=arm,arm64,x86_64 RtlDeleteFunctionTable(ptr)
@ stub RtlDeleteNoSplay
@ stub RtlDeleteOwnersRanges
@@ -632,7 +632,7 @@
@ stdcall RtlEnterCriticalSection(ptr)
@ stub RtlEnumProcessHeaps
@ stub RtlEnumerateGenericTable
-# @ stub RtlEnumerateGenericTableAvl
+@ stdcall RtlEnumerateGenericTableAvl(ptr long)
# @ stub RtlEnumerateGenericTableLikeADirectory
@ stdcall RtlEnumerateGenericTableWithoutSplaying(ptr ptr)
# @ stub RtlEnumerateGenericTableWithoutSplayingAvl
@@ -709,7 +709,7 @@
@ stdcall RtlGetCurrentTransaction()
@ stdcall RtlGetDaclSecurityDescriptor(ptr ptr ptr ptr)
@ stdcall RtlGetElementGenericTable(ptr long)
-# @ stub RtlGetElementGenericTableAvl
+@ stdcall RtlGetElementGenericTableAvl(ptr long)
@ stdcall RtlGetEnabledExtendedFeatures(int64)
@ stdcall RtlGetExePath(wstr ptr)
@ stdcall RtlGetExtendedContextLength(long ptr)
@@ -854,7 +854,7 @@
# @ stub RtlLogStackBackTrace
@ stdcall RtlLookupAtomInAtomTable(ptr wstr ptr)
@ stdcall RtlLookupElementGenericTable(ptr ptr)
-# @ stub RtlLookupElementGenericTableAvl
+@ stdcall RtlLookupElementGenericTableAvl(ptr ptr)
@ stdcall -arch=arm,arm64,x86_64 RtlLookupFunctionEntry(long ptr ptr)
@ stdcall RtlMakeSelfRelativeSD(ptr ptr ptr)
@ stdcall RtlMapGenericMask(ptr ptr)
@@ -875,7 +875,7 @@
@ stdcall RtlNtStatusToDosError(long)
@ stdcall RtlNtStatusToDosErrorNoTeb(long)
@ stdcall RtlNumberGenericTableElements(ptr)
-# @ stub RtlNumberGenericTableElementsAvl
+@ stdcall RtlNumberGenericTableElementsAvl(ptr)
@ stdcall RtlNumberOfClearBits(ptr)
@ stdcall RtlNumberOfSetBits(ptr)
@ stdcall RtlOemStringToUnicodeSize(ptr)
diff --git a/dlls/ntdll/rtl.c b/dlls/ntdll/rtl.c
index 11067f4..d1b489b 100644
--- a/dlls/ntdll/rtl.c
+++ b/dlls/ntdll/rtl.c
@@ -2183,7 +2183,7 @@ BOOLEAN WINAPI RtlIsProcessorFeaturePresent( UINT feature )
void WINAPI RtlInitializeGenericTableAvl(PRTL_AVL_TABLE table, PRTL_AVL_COMPARE_ROUTINE compare,
PRTL_AVL_ALLOCATE_ROUTINE allocate, PRTL_AVL_FREE_ROUTINE free, void *context)
{
- FIXME("%p %p %p %p %p: stub\n", table, compare, allocate, free, context);
+ FIXME("(%p, %p, %p, %p, %p): stub\n", table, compare, allocate, free, context);
}
/***********************************************************************
@@ -2191,7 +2191,52 @@ void WINAPI RtlInitializeGenericTableAvl(PRTL_AVL_TABLE table, PRTL_AVL_COMPARE_
*/
void WINAPI RtlInsertElementGenericTableAvl(PRTL_AVL_TABLE table, void *buffer, ULONG size, BOOL *element)
{
- FIXME("%p %p %u %p: stub\n", table, buffer, size, element);
+ FIXME("(%p, %p, %u, %p): stub\n", table, buffer, size, element);
+}
+
+/***********************************************************************
+ * RtlGetElementGenericTableAvl (NTDLL.@)
+ */
+void * WINAPI RtlGetElementGenericTableAvl(PRTL_AVL_TABLE table, ULONG index)
+{
+ FIXME("(%p, %u): stub\n", table, index);
+ return NULL;
+}
+
+/***********************************************************************
+ * RtlLookupElementGenericTableAvl (NTDLL.@)
+ */
+void * WINAPI RtlLookupElementGenericTableAvl(PRTL_AVL_TABLE table, void *buffer)
+{
+ FIXME("(%p, %p): stub\n", table, buffer);
+ return NULL;
+}
+
+/***********************************************************************
+ * RtlDeleteElementGenericTableAvl (NTDLL.@)
+ */
+BOOLEAN WINAPI RtlDeleteElementGenericTableAvl(PRTL_AVL_TABLE table, void *buffer)
+{
+ FIXME("(%p, %p): stub\n", table, buffer);
+ return FALSE;
+}
+
+/***********************************************************************
+ * RtlEnumerateGenericTableAvl (NTDLL.@)
+ */
+void * WINAPI RtlEnumerateGenericTableAvl(PRTL_AVL_TABLE table, BOOL restart)
+{
+ FIXME("(%p, %s): stub\n", table, restart ? "TRUE" : "FALSE");
+ return NULL;
+}
+
+/***********************************************************************
+ * RtlNumberGenericTableElementsAvl (NTDLL.@)
+ */
+ULONG WINAPI RtlNumberGenericTableElementsAvl(PRTL_AVL_TABLE table)
+{
+ FIXME("(%p): stub\n", table);
+ return 0UL;
}
/*********************************************************************
diff --git a/dlls/ntoskrnl.exe/ntoskrnl.exe.spec b/dlls/ntoskrnl.exe/ntoskrnl.exe.spec
index d445c5a..4683dd3 100644
--- a/dlls/ntoskrnl.exe/ntoskrnl.exe.spec
+++ b/dlls/ntoskrnl.exe/ntoskrnl.exe.spec
@@ -1038,7 +1038,7 @@
@ stdcall RtlDeleteAce(ptr long)
@ stdcall RtlDeleteAtomFromAtomTable(ptr long)
@ stub RtlDeleteElementGenericTable
-@ stub RtlDeleteElementGenericTableAvl
+@ stdcall RtlDeleteElementGenericTableAvl(ptr ptr)
@ stub RtlDeleteNoSplay
@ stub RtlDeleteOwnersRanges
@ stub RtlDeleteRange
@@ -1054,7 +1054,7 @@
@ stdcall -arch=win32 RtlEnlargedUnsignedDivide(int64 long ptr)
@ stdcall -arch=win32 -ret64 RtlEnlargedUnsignedMultiply(long long)
@ stub RtlEnumerateGenericTable
-@ stub RtlEnumerateGenericTableAvl
+@ stdcall RtlEnumerateGenericTableAvl(ptr long)
@ stub RtlEnumerateGenericTableLikeADirectory
@ stdcall RtlEnumerateGenericTableWithoutSplaying(ptr ptr)
@ stub RtlEnumerateGenericTableWithoutSplayingAvl
@@ -1099,7 +1099,7 @@
@ stdcall RtlGetDaclSecurityDescriptor(ptr ptr ptr ptr)
@ stub RtlGetDefaultCodePage
@ stdcall RtlGetElementGenericTable(ptr long)
-@ stub RtlGetElementGenericTableAvl
+@ stdcall RtlGetElementGenericTableAvl(ptr long)
@ stdcall RtlGetExtendedContextLength(long ptr)
@ stdcall RtlGetExtendedContextLength2(long ptr int64)
@ stub RtlGetFirstRange
@@ -1184,7 +1184,7 @@
@ stub RtlLockBootStatusData
@ stdcall RtlLookupAtomInAtomTable(ptr wstr ptr)
@ stdcall RtlLookupElementGenericTable(ptr ptr)
-@ stub RtlLookupElementGenericTableAvl
+@ stdcall RtlLookupElementGenericTableAvl(ptr ptr)
@ stub RtlLookupElementGenericTableFull
@ stub RtlLookupElementGenericTableFullAvl
@ stdcall -arch=arm,arm64,x86_64 RtlLookupFunctionEntry(long ptr ptr)
@@ -1199,7 +1199,7 @@
@ stdcall RtlNtStatusToDosError(long)
@ stdcall RtlNtStatusToDosErrorNoTeb(long)
@ stdcall RtlNumberGenericTableElements(ptr)
-@ stub RtlNumberGenericTableElementsAvl
+@ stdcall RtlNumberGenericTableElementsAvl(ptr)
@ stdcall RtlNumberOfClearBits(ptr)
@ stdcall RtlNumberOfSetBits(ptr)
@ stub RtlOemStringToCountedUnicodeString
diff --git a/include/ddk/ntddk.h b/include/ddk/ntddk.h
index a6b2974..ba25ffd 100644
--- a/include/ddk/ntddk.h
+++ b/include/ddk/ntddk.h
@@ -269,6 +269,11 @@ void * WINAPI RtlGetElementGenericTable(PRTL_GENERIC_TABLE,ULONG);
void WINAPI RtlInitializeGenericTable(PRTL_GENERIC_TABLE,PRTL_GENERIC_COMPARE_ROUTINE,PRTL_GENERIC_ALLOCATE_ROUTINE,PRTL_GENERIC_FREE_ROUTINE,void *);
void WINAPI RtlInitializeGenericTableAvl(PRTL_AVL_TABLE,PRTL_AVL_COMPARE_ROUTINE,PRTL_AVL_ALLOCATE_ROUTINE, PRTL_AVL_FREE_ROUTINE,void *);
void WINAPI RtlInsertElementGenericTableAvl(PRTL_AVL_TABLE,void *,ULONG,BOOL*);
+void * WINAPI RtlGetElementGenericTableAvl(PRTL_AVL_TABLE,ULONG);
+void * WINAPI RtlLookupElementGenericTableAvl(PRTL_AVL_TABLE,void *);
+BOOLEAN WINAPI RtlDeleteElementGenericTableAvl(PRTL_AVL_TABLE,void *);
+void * WINAPI RtlEnumerateGenericTableAvl(PRTL_AVL_TABLE,BOOL);
+ULONG WINAPI RtlNumberGenericTableElementsAvl(PRTL_AVL_TABLE);
void * WINAPI RtlLookupElementGenericTable(PRTL_GENERIC_TABLE,void *);
ULONG WINAPI RtlNumberGenericTableElements(PRTL_GENERIC_TABLE);
--
2.25.1
More information about the wine-devel
mailing list