mirror of
https://github.com/reactos/reactos.git
synced 2024-08-08 04:08:29 +00:00
If name of DLL to load contains a path and it has been loaded before,
find the previous entry svn path=/trunk/; revision=4588
This commit is contained in:
parent
1e0a179dd4
commit
1139966a4e
|
@ -1,4 +1,4 @@
|
||||||
/* $Id: utils.c,v 1.61 2003/04/18 08:28:31 gvg Exp $
|
/* $Id: utils.c,v 1.62 2003/04/26 10:05:38 gvg Exp $
|
||||||
*
|
*
|
||||||
* COPYRIGHT: See COPYING in the top level directory
|
* COPYRIGHT: See COPYING in the top level directory
|
||||||
* PROJECT: ReactOS kernel
|
* PROJECT: ReactOS kernel
|
||||||
|
@ -227,7 +227,8 @@ LdrLoadDll (IN PWSTR SearchPath OPTIONAL,
|
||||||
*BaseAddress = NtCurrentPeb()->ImageBaseAddress;
|
*BaseAddress = NtCurrentPeb()->ImageBaseAddress;
|
||||||
return STATUS_SUCCESS;
|
return STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
*BaseAddress = NULL;
|
*BaseAddress = NULL;
|
||||||
|
|
||||||
DPRINT("LdrLoadDll(Name \"%wZ\" BaseAddress %x)\n",
|
DPRINT("LdrLoadDll(Name \"%wZ\" BaseAddress %x)\n",
|
||||||
|
@ -517,6 +518,8 @@ LdrFindEntryForName(PUNICODE_STRING Name,
|
||||||
PLIST_ENTRY ModuleListHead;
|
PLIST_ENTRY ModuleListHead;
|
||||||
PLIST_ENTRY Entry;
|
PLIST_ENTRY Entry;
|
||||||
PLDR_MODULE ModulePtr;
|
PLDR_MODULE ModulePtr;
|
||||||
|
BOOLEAN ContainsPath;
|
||||||
|
unsigned i;
|
||||||
|
|
||||||
DPRINT("NTDLL.LdrFindEntryForName(Name %wZ)\n", Name);
|
DPRINT("NTDLL.LdrFindEntryForName(Name %wZ)\n", Name);
|
||||||
|
|
||||||
|
@ -535,13 +538,22 @@ LdrFindEntryForName(PUNICODE_STRING Name,
|
||||||
return(STATUS_SUCCESS);
|
return(STATUS_SUCCESS);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ContainsPath = (2 <= Name->Length && L':' == Name->Buffer[1]);
|
||||||
|
for (i = 0; ! ContainsPath && i < Name->Length; i++)
|
||||||
|
{
|
||||||
|
ContainsPath = L'\\' == Name->Buffer[i] ||
|
||||||
|
L'/' == Name->Buffer[i];
|
||||||
|
}
|
||||||
while (Entry != ModuleListHead)
|
while (Entry != ModuleListHead)
|
||||||
{
|
{
|
||||||
ModulePtr = CONTAINING_RECORD(Entry, LDR_MODULE, InLoadOrderModuleList);
|
ModulePtr = CONTAINING_RECORD(Entry, LDR_MODULE, InLoadOrderModuleList);
|
||||||
|
|
||||||
DPRINT("Scanning %wZ %wZ\n", &ModulePtr->BaseDllName, Name);
|
DPRINT("Scanning %wZ %wZ\n", &ModulePtr->BaseDllName, Name);
|
||||||
|
|
||||||
if (RtlCompareUnicodeString(&ModulePtr->BaseDllName, Name, TRUE) == 0)
|
if ((! ContainsPath &&
|
||||||
|
0 == RtlCompareUnicodeString(&ModulePtr->BaseDllName, Name, TRUE)) ||
|
||||||
|
(ContainsPath &&
|
||||||
|
0 == RtlCompareUnicodeString(&ModulePtr->FullDllName, Name, TRUE)))
|
||||||
{
|
{
|
||||||
*Module = ModulePtr;
|
*Module = ModulePtr;
|
||||||
return(STATUS_SUCCESS);
|
return(STATUS_SUCCESS);
|
||||||
|
|
Loading…
Reference in a new issue