From 7cdc0d481afd354bc4f15bd9a454353332dddc20 Mon Sep 17 00:00:00 2001 From: James Tabor Date: Fri, 11 Sep 2009 07:12:30 +0000 Subject: [PATCH] - Quick implementation of RtlIsThreadWithinLoaderCallout. svn path=/trunk/; revision=43029 --- reactos/dll/ntdll/def/ntdll_i386.def | 2 +- reactos/dll/ntdll/ldr/startup.c | 3 +++ reactos/dll/ntdll/rtl/libsupp.c | 8 ++++++++ reactos/include/ndk/rtlfuncs.h | 5 +++++ 4 files changed, 17 insertions(+), 1 deletion(-) diff --git a/reactos/dll/ntdll/def/ntdll_i386.def b/reactos/dll/ntdll/def/ntdll_i386.def index 6c090ba6b23..17ccadf8a7e 100644 --- a/reactos/dll/ntdll/def/ntdll_i386.def +++ b/reactos/dll/ntdll/def/ntdll_i386.def @@ -748,7 +748,7 @@ RtlIsGenericTableEmpty@4 RtlIsGenericTableEmptyAvl@4 RtlIsNameLegalDOS8Dot3@12 RtlIsTextUnicode@12 -;RtlIsThreadWithinLoaderCallout +RtlIsThreadWithinLoaderCallout@0 RtlIsValidHandle@8 RtlIsValidIndexHandle@12 RtlLargeIntegerAdd@16 diff --git a/reactos/dll/ntdll/ldr/startup.c b/reactos/dll/ntdll/ldr/startup.c index e3c6236c048..44b11e48664 100644 --- a/reactos/dll/ntdll/ldr/startup.c +++ b/reactos/dll/ntdll/ldr/startup.c @@ -19,6 +19,7 @@ VOID LdrpInitLoader(VOID); VOID NTAPI RtlpInitDeferedCriticalSection(VOID); NTSTATUS LdrpAttachThread(VOID); VOID RtlpInitializeVectoredExceptionHandling(VOID); +extern PTEB LdrpTopLevelDllBeingLoadedTeb; /* GLOBALS *******************************************************************/ @@ -470,6 +471,8 @@ LdrpInit2(PCONTEXT Context, ExeModule->SizeOfImage = LdrpGetResidentSize(NTHeaders); ExeModule->TimeDateStamp = NTHeaders->FileHeader.TimeDateStamp; + LdrpTopLevelDllBeingLoadedTeb = NtCurrentTeb(); + InsertHeadList(&Peb->Ldr->InLoadOrderModuleList, &ExeModule->InLoadOrderLinks); diff --git a/reactos/dll/ntdll/rtl/libsupp.c b/reactos/dll/ntdll/rtl/libsupp.c index bd1f798cb9b..1ef8c26c3ae 100644 --- a/reactos/dll/ntdll/rtl/libsupp.c +++ b/reactos/dll/ntdll/rtl/libsupp.c @@ -14,6 +14,7 @@ #include SIZE_T RtlpAllocDeallocQueryBufferSize = PAGE_SIZE; +PTEB LdrpTopLevelDllBeingLoadedTeb = NULL; /* FUNCTIONS ***************************************************************/ @@ -203,6 +204,13 @@ RtlpCaptureStackLimits(IN ULONG_PTR Ebp, return TRUE; } +BOOLEAN +NTAPI +RtlIsThreadWithinLoaderCallout(VOID) +{ + return LdrpTopLevelDllBeingLoadedTeb == NtCurrentTeb(); +} + /* RTL Atom Tables ************************************************************/ typedef struct _RTL_ATOM_HANDLE diff --git a/reactos/include/ndk/rtlfuncs.h b/reactos/include/ndk/rtlfuncs.h index 1a164efe379..9f1957f7c9f 100644 --- a/reactos/include/ndk/rtlfuncs.h +++ b/reactos/include/ndk/rtlfuncs.h @@ -2012,6 +2012,11 @@ RtlInitializeContext( IN PINITIAL_TEB InitialTeb ); +NTSYSAPI +BOOLEAN +NTAPI +RtlIsThreadWithinLoaderCallout(VOID); + NTSYSAPI PRTL_USER_PROCESS_PARAMETERS NTAPI