From 1ba1132e21075ec91011664120715a74a30b2445 Mon Sep 17 00:00:00 2001 From: Aleksey Bragin Date: Thu, 17 Mar 2011 17:47:42 +0000 Subject: [PATCH] [NTDLL/LDR] - Use LdrpRunInitializeRoutines() instead of the old LdrpAttachThread(). This adds calls to unimplemented context functions, but since they were not called at all by the old code it shouldn't change the behaviour significantly. Besides of that, it's start of significant changes in the "mainstream" codepaths, so regressions might occur. svn path=/trunk/; revision=51085 --- reactos/dll/ntdll/ldr/utils.c | 82 +---------------------------------- 1 file changed, 2 insertions(+), 80 deletions(-) diff --git a/reactos/dll/ntdll/ldr/utils.c b/reactos/dll/ntdll/ldr/utils.c index 7ed646ff494..77a18cc17cd 100644 --- a/reactos/dll/ntdll/ldr/utils.c +++ b/reactos/dll/ntdll/ldr/utils.c @@ -47,7 +47,6 @@ static NTSTATUS LdrpLoadModule(IN PWSTR SearchPath OPTIONAL, IN PUNICODE_STRING Name, OUT PLDR_DATA_TABLE_ENTRY *Module, OUT PVOID *BaseAddress OPTIONAL); -static NTSTATUS LdrpAttachProcess(VOID); static VOID LdrpDetachProcess(BOOLEAN UnloadAll); static NTSTATUS LdrpUnloadModule(PLDR_DATA_TABLE_ENTRY Module, BOOLEAN Unload); @@ -745,7 +744,7 @@ LdrLoadDll (IN PWSTR SearchPath OPTIONAL, if (!(Module->Flags & LDRP_PROCESS_ATTACH_CALLED)) { RtlEnterCriticalSection(Peb->LoaderLock); - Status = LdrpAttachProcess(); + Status = LdrpRunInitializeRoutines(NULL); RtlLeaveCriticalSection(Peb->LoaderLock); } if (Module->EntryPointActivationContext) RtlDeactivateActivationContext(0, cookie); @@ -2036,7 +2035,7 @@ PEPFUNC LdrPEStartup (PVOID ImageBase, Status = LdrpInitializeTls(); if (NT_SUCCESS(Status)) { - Status = LdrpAttachProcess(); + Status = LdrpRunInitializeRoutines(NULL); } if (NT_SUCCESS(Status)) { @@ -2643,83 +2642,6 @@ LdrpDetachProcess(BOOLEAN UnloadAll) DPRINT("LdrpDetachProcess() done\n"); } -/********************************************************************** - * NAME LOCAL - * LdrpAttachProcess - * - * DESCRIPTION - * Initialize all dll's which are prepered for loading - * - * ARGUMENTS - * none - * - * RETURN VALUE - * status - * - * REVISIONS - * - * NOTE - * The loader lock must be held on entry. - * - */ -static NTSTATUS -LdrpAttachProcess(VOID) -{ - PLIST_ENTRY ModuleListHead; - PLIST_ENTRY Entry; - PLDR_DATA_TABLE_ENTRY Module; - BOOLEAN Result; - NTSTATUS Status = STATUS_SUCCESS; - - DPRINT("LdrpAttachProcess() called for %wZ\n", - &LdrpImageEntry->BaseDllName); - - ModuleListHead = &NtCurrentPeb()->Ldr->InInitializationOrderModuleList; - Entry = ModuleListHead->Flink; - while (Entry != ModuleListHead) - { - Module = CONTAINING_RECORD(Entry, LDR_DATA_TABLE_ENTRY, InInitializationOrderModuleList); - if (!(Module->Flags & (LDRP_LOAD_IN_PROGRESS|LDRP_UNLOAD_IN_PROGRESS|LDRP_ENTRY_PROCESSED))) - { - Module->Flags |= LDRP_LOAD_IN_PROGRESS; - TRACE_LDR("%wZ loaded - Calling init routine at %x for process attaching\n", - &Module->BaseDllName, Module->EntryPoint); - - /* Check if it has TLS */ - if (Module->TlsIndex && FALSE/*Context*/) - { - /* Call TLS */ - LdrpTlsCallback(Module->DllBase, DLL_PROCESS_ATTACH); - } - - if ((Module->Flags & LDRP_IMAGE_DLL) && Module->EntryPoint) - Result = LdrpCallDllEntry(Module->EntryPoint, Module->DllBase, DLL_PROCESS_ATTACH, (PVOID)(Module->LoadCount == LDRP_PROCESS_CREATION_TIME ? 1 : 0)); - else - Result = TRUE; - - if (!Result) - { - Status = STATUS_DLL_INIT_FAILED; - break; - } - if (Module->Flags & LDRP_IMAGE_DLL && Module->EntryPoint != 0) - { - Module->Flags |= LDRP_PROCESS_ATTACH_CALLED|LDRP_ENTRY_PROCESSED; - } - else - { - Module->Flags |= LDRP_ENTRY_PROCESSED; - } - Module->Flags &= ~LDRP_LOAD_IN_PROGRESS; - } - Entry = Entry->Flink; - } - - DPRINT("LdrpAttachProcess() done\n"); - - return Status; -} - /* * @implemented */