mirror of
https://github.com/reactos/reactos.git
synced 2025-02-25 01:39:30 +00:00
Use correct TlsCount/LoadCount definition and fix incorrect usage i code
svn path=/trunk/; revision=16204
This commit is contained in:
parent
77f673dd82
commit
e3cfe86657
2 changed files with 14 additions and 13 deletions
|
@ -65,14 +65,15 @@ typedef struct _LDR_DATA_TABLE_ENTRY
|
||||||
UNICODE_STRING FullDllName;
|
UNICODE_STRING FullDllName;
|
||||||
UNICODE_STRING BaseDllName;
|
UNICODE_STRING BaseDllName;
|
||||||
ULONG Flags;
|
ULONG Flags;
|
||||||
SHORT LoadCount; /* FIXME: HACK!!! FIX ASAP */
|
USHORT LoadCount;
|
||||||
SHORT TlsIndex; /* FIXME: HACK!!! FIX ASAP */
|
USHORT TlsIndex;
|
||||||
LIST_ENTRY HashLinks;
|
LIST_ENTRY HashLinks;
|
||||||
PVOID SectionPointer;
|
PVOID SectionPointer;
|
||||||
ULONG CheckSum;
|
ULONG CheckSum;
|
||||||
ULONG TimeDateStamp;
|
ULONG TimeDateStamp;
|
||||||
PVOID LoadedImports;
|
PVOID LoadedImports;
|
||||||
PVOID EntryPointActivationContext;
|
PVOID EntryPointActivationContext;
|
||||||
|
PVOID PatchInformation;
|
||||||
#if defined(DBG) || defined(KDBG)
|
#if defined(DBG) || defined(KDBG)
|
||||||
PROSSYM_INFO RosSymInfo; /* FIXME: THIS _REALLY_ NEEDS TO GO (TLS?)!!! */
|
PROSSYM_INFO RosSymInfo; /* FIXME: THIS _REALLY_ NEEDS TO GO (TLS?)!!! */
|
||||||
#endif /* KDBG */
|
#endif /* KDBG */
|
||||||
|
|
|
@ -123,7 +123,7 @@ static inline LONG LdrpIncrementLoadCount(PLDR_DATA_TABLE_ENTRY Module, BOOLEAN
|
||||||
RtlEnterCriticalSection (NtCurrentPeb()->LoaderLock);
|
RtlEnterCriticalSection (NtCurrentPeb()->LoaderLock);
|
||||||
}
|
}
|
||||||
LoadCount = Module->LoadCount;
|
LoadCount = Module->LoadCount;
|
||||||
if (Module->LoadCount >= 0)
|
if (Module->LoadCount != 0xFFFF)
|
||||||
{
|
{
|
||||||
Module->LoadCount++;
|
Module->LoadCount++;
|
||||||
}
|
}
|
||||||
|
@ -152,7 +152,7 @@ static inline VOID LdrpAcquireTlsSlot(PLDR_DATA_TABLE_ENTRY Module, ULONG Size,
|
||||||
static inline VOID LdrpTlsCallback(PLDR_DATA_TABLE_ENTRY Module, ULONG dwReason)
|
static inline VOID LdrpTlsCallback(PLDR_DATA_TABLE_ENTRY Module, ULONG dwReason)
|
||||||
{
|
{
|
||||||
PIMAGE_TLS_CALLBACK TlsCallback;
|
PIMAGE_TLS_CALLBACK TlsCallback;
|
||||||
if (Module->TlsIndex >= 0 && Module->LoadCount == -1)
|
if (Module->TlsIndex != 0xFFFF && Module->LoadCount == 0xFFFF)
|
||||||
{
|
{
|
||||||
TlsCallback = LdrpTlsArray[Module->TlsIndex].TlsAddressOfCallBacks;
|
TlsCallback = LdrpTlsArray[Module->TlsIndex].TlsAddressOfCallBacks;
|
||||||
if (TlsCallback)
|
if (TlsCallback)
|
||||||
|
@ -256,8 +256,8 @@ LdrpInitializeTlsForProccess(VOID)
|
||||||
while (Entry != ModuleListHead)
|
while (Entry != ModuleListHead)
|
||||||
{
|
{
|
||||||
Module = CONTAINING_RECORD(Entry, LDR_DATA_TABLE_ENTRY, InLoadOrderModuleList);
|
Module = CONTAINING_RECORD(Entry, LDR_DATA_TABLE_ENTRY, InLoadOrderModuleList);
|
||||||
if (Module->LoadCount == -1 &&
|
if (Module->LoadCount == 0xFFFF &&
|
||||||
Module->TlsIndex >= 0)
|
Module->TlsIndex != 0xFFFF)
|
||||||
{
|
{
|
||||||
TlsDirectory = (PIMAGE_TLS_DIRECTORY)
|
TlsDirectory = (PIMAGE_TLS_DIRECTORY)
|
||||||
RtlImageDirectoryEntryToData(Module->DllBase,
|
RtlImageDirectoryEntryToData(Module->DllBase,
|
||||||
|
@ -482,7 +482,7 @@ LdrAddModuleEntry(PVOID ImageBase,
|
||||||
* loading while app is initializing
|
* loading while app is initializing
|
||||||
* dll must not be unloaded
|
* dll must not be unloaded
|
||||||
*/
|
*/
|
||||||
Module->LoadCount = -1;
|
Module->LoadCount = 0xFFFF;
|
||||||
}
|
}
|
||||||
|
|
||||||
Module->Flags = 0;
|
Module->Flags = 0;
|
||||||
|
@ -886,7 +886,7 @@ LdrFindEntryForName(PUNICODE_STRING Name,
|
||||||
0 == RtlCompareUnicodeString(&LdrpLastModule->FullDllName, &AdjustedName, TRUE)))
|
0 == RtlCompareUnicodeString(&LdrpLastModule->FullDllName, &AdjustedName, TRUE)))
|
||||||
{
|
{
|
||||||
*Module = LdrpLastModule;
|
*Module = LdrpLastModule;
|
||||||
if (Ref && (*Module)->LoadCount != -1)
|
if (Ref && (*Module)->LoadCount != 0xFFFF)
|
||||||
{
|
{
|
||||||
(*Module)->LoadCount++;
|
(*Module)->LoadCount++;
|
||||||
}
|
}
|
||||||
|
@ -907,7 +907,7 @@ LdrFindEntryForName(PUNICODE_STRING Name,
|
||||||
0 == RtlCompareUnicodeString(&ModulePtr->FullDllName, &AdjustedName, TRUE)))
|
0 == RtlCompareUnicodeString(&ModulePtr->FullDllName, &AdjustedName, TRUE)))
|
||||||
{
|
{
|
||||||
*Module = LdrpLastModule = ModulePtr;
|
*Module = LdrpLastModule = ModulePtr;
|
||||||
if (Ref && ModulePtr->LoadCount != -1)
|
if (Ref && ModulePtr->LoadCount != 0xFFFF)
|
||||||
{
|
{
|
||||||
ModulePtr->LoadCount++;
|
ModulePtr->LoadCount++;
|
||||||
}
|
}
|
||||||
|
@ -2290,7 +2290,7 @@ LdrDisableThreadCalloutsForDll(IN PVOID BaseAddress)
|
||||||
|
|
||||||
if (Module->DllBase == BaseAddress)
|
if (Module->DllBase == BaseAddress)
|
||||||
{
|
{
|
||||||
if (Module->TlsIndex == -1)
|
if (Module->TlsIndex == 0xFFFF)
|
||||||
{
|
{
|
||||||
Module->Flags |= DONT_CALL_FOR_THREAD;
|
Module->Flags |= DONT_CALL_FOR_THREAD;
|
||||||
Status = STATUS_SUCCESS;
|
Status = STATUS_SUCCESS;
|
||||||
|
@ -2432,7 +2432,7 @@ LdrpDetachProcess(BOOLEAN UnloadAll)
|
||||||
{
|
{
|
||||||
TRACE_LDR("Unload %wZ - Calling entry point at %x\n",
|
TRACE_LDR("Unload %wZ - Calling entry point at %x\n",
|
||||||
&Module->BaseDllName, Module->EntryPoint);
|
&Module->BaseDllName, Module->EntryPoint);
|
||||||
LdrpCallDllEntry(Module, DLL_PROCESS_DETACH, (PVOID)(Module->LoadCount == -1 ? 1 : 0));
|
LdrpCallDllEntry(Module, DLL_PROCESS_DETACH, (PVOID)(Module->LoadCount == 0xFFFF ? 1 : 0));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -2454,7 +2454,7 @@ LdrpDetachProcess(BOOLEAN UnloadAll)
|
||||||
Module = CONTAINING_RECORD(Entry, LDR_DATA_TABLE_ENTRY, InInitializationOrderModuleList);
|
Module = CONTAINING_RECORD(Entry, LDR_DATA_TABLE_ENTRY, InInitializationOrderModuleList);
|
||||||
Entry = Entry->Blink;
|
Entry = Entry->Blink;
|
||||||
if (Module->Flags & UNLOAD_IN_PROGRESS &&
|
if (Module->Flags & UNLOAD_IN_PROGRESS &&
|
||||||
((UnloadAll && Module->LoadCount >= 0) || Module->LoadCount == 0))
|
((UnloadAll && Module->LoadCount != 0xFFFF) || Module->LoadCount == 0))
|
||||||
{
|
{
|
||||||
/* remove the module entry from the list */
|
/* remove the module entry from the list */
|
||||||
RemoveEntryList (&Module->InLoadOrderModuleList);
|
RemoveEntryList (&Module->InLoadOrderModuleList);
|
||||||
|
@ -2517,7 +2517,7 @@ LdrpAttachProcess(VOID)
|
||||||
Module->Flags |= LOAD_IN_PROGRESS;
|
Module->Flags |= LOAD_IN_PROGRESS;
|
||||||
TRACE_LDR("%wZ loaded - Calling init routine at %x for process attaching\n",
|
TRACE_LDR("%wZ loaded - Calling init routine at %x for process attaching\n",
|
||||||
&Module->BaseDllName, Module->EntryPoint);
|
&Module->BaseDllName, Module->EntryPoint);
|
||||||
Result = LdrpCallDllEntry(Module, DLL_PROCESS_ATTACH, (PVOID)(Module->LoadCount == -1 ? 1 : 0));
|
Result = LdrpCallDllEntry(Module, DLL_PROCESS_ATTACH, (PVOID)(Module->LoadCount == 0xFFFF ? 1 : 0));
|
||||||
if (!Result)
|
if (!Result)
|
||||||
{
|
{
|
||||||
Status = STATUS_DLL_INIT_FAILED;
|
Status = STATUS_DLL_INIT_FAILED;
|
||||||
|
|
Loading…
Reference in a new issue