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 BaseDllName;
|
||||
ULONG Flags;
|
||||
SHORT LoadCount; /* FIXME: HACK!!! FIX ASAP */
|
||||
SHORT TlsIndex; /* FIXME: HACK!!! FIX ASAP */
|
||||
USHORT LoadCount;
|
||||
USHORT TlsIndex;
|
||||
LIST_ENTRY HashLinks;
|
||||
PVOID SectionPointer;
|
||||
ULONG CheckSum;
|
||||
ULONG TimeDateStamp;
|
||||
PVOID LoadedImports;
|
||||
PVOID EntryPointActivationContext;
|
||||
PVOID PatchInformation;
|
||||
#if defined(DBG) || defined(KDBG)
|
||||
PROSSYM_INFO RosSymInfo; /* FIXME: THIS _REALLY_ NEEDS TO GO (TLS?)!!! */
|
||||
#endif /* KDBG */
|
||||
|
|
|
@ -123,7 +123,7 @@ static inline LONG LdrpIncrementLoadCount(PLDR_DATA_TABLE_ENTRY Module, BOOLEAN
|
|||
RtlEnterCriticalSection (NtCurrentPeb()->LoaderLock);
|
||||
}
|
||||
LoadCount = Module->LoadCount;
|
||||
if (Module->LoadCount >= 0)
|
||||
if (Module->LoadCount != 0xFFFF)
|
||||
{
|
||||
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)
|
||||
{
|
||||
PIMAGE_TLS_CALLBACK TlsCallback;
|
||||
if (Module->TlsIndex >= 0 && Module->LoadCount == -1)
|
||||
if (Module->TlsIndex != 0xFFFF && Module->LoadCount == 0xFFFF)
|
||||
{
|
||||
TlsCallback = LdrpTlsArray[Module->TlsIndex].TlsAddressOfCallBacks;
|
||||
if (TlsCallback)
|
||||
|
@ -256,8 +256,8 @@ LdrpInitializeTlsForProccess(VOID)
|
|||
while (Entry != ModuleListHead)
|
||||
{
|
||||
Module = CONTAINING_RECORD(Entry, LDR_DATA_TABLE_ENTRY, InLoadOrderModuleList);
|
||||
if (Module->LoadCount == -1 &&
|
||||
Module->TlsIndex >= 0)
|
||||
if (Module->LoadCount == 0xFFFF &&
|
||||
Module->TlsIndex != 0xFFFF)
|
||||
{
|
||||
TlsDirectory = (PIMAGE_TLS_DIRECTORY)
|
||||
RtlImageDirectoryEntryToData(Module->DllBase,
|
||||
|
@ -482,7 +482,7 @@ LdrAddModuleEntry(PVOID ImageBase,
|
|||
* loading while app is initializing
|
||||
* dll must not be unloaded
|
||||
*/
|
||||
Module->LoadCount = -1;
|
||||
Module->LoadCount = 0xFFFF;
|
||||
}
|
||||
|
||||
Module->Flags = 0;
|
||||
|
@ -886,7 +886,7 @@ LdrFindEntryForName(PUNICODE_STRING Name,
|
|||
0 == RtlCompareUnicodeString(&LdrpLastModule->FullDllName, &AdjustedName, TRUE)))
|
||||
{
|
||||
*Module = LdrpLastModule;
|
||||
if (Ref && (*Module)->LoadCount != -1)
|
||||
if (Ref && (*Module)->LoadCount != 0xFFFF)
|
||||
{
|
||||
(*Module)->LoadCount++;
|
||||
}
|
||||
|
@ -907,7 +907,7 @@ LdrFindEntryForName(PUNICODE_STRING Name,
|
|||
0 == RtlCompareUnicodeString(&ModulePtr->FullDllName, &AdjustedName, TRUE)))
|
||||
{
|
||||
*Module = LdrpLastModule = ModulePtr;
|
||||
if (Ref && ModulePtr->LoadCount != -1)
|
||||
if (Ref && ModulePtr->LoadCount != 0xFFFF)
|
||||
{
|
||||
ModulePtr->LoadCount++;
|
||||
}
|
||||
|
@ -2290,7 +2290,7 @@ LdrDisableThreadCalloutsForDll(IN PVOID BaseAddress)
|
|||
|
||||
if (Module->DllBase == BaseAddress)
|
||||
{
|
||||
if (Module->TlsIndex == -1)
|
||||
if (Module->TlsIndex == 0xFFFF)
|
||||
{
|
||||
Module->Flags |= DONT_CALL_FOR_THREAD;
|
||||
Status = STATUS_SUCCESS;
|
||||
|
@ -2432,7 +2432,7 @@ LdrpDetachProcess(BOOLEAN UnloadAll)
|
|||
{
|
||||
TRACE_LDR("Unload %wZ - Calling entry point at %x\n",
|
||||
&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
|
||||
{
|
||||
|
@ -2454,7 +2454,7 @@ LdrpDetachProcess(BOOLEAN UnloadAll)
|
|||
Module = CONTAINING_RECORD(Entry, LDR_DATA_TABLE_ENTRY, InInitializationOrderModuleList);
|
||||
Entry = Entry->Blink;
|
||||
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 */
|
||||
RemoveEntryList (&Module->InLoadOrderModuleList);
|
||||
|
@ -2517,7 +2517,7 @@ LdrpAttachProcess(VOID)
|
|||
Module->Flags |= LOAD_IN_PROGRESS;
|
||||
TRACE_LDR("%wZ loaded - Calling init routine at %x for process attaching\n",
|
||||
&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)
|
||||
{
|
||||
Status = STATUS_DLL_INIT_FAILED;
|
||||
|
|
Loading…
Reference in a new issue