IN OUT PLIST_ENTRY ModuleListHead,
IN PCCH DirectoryPath,
IN PCH ImportName,
+ IN PLIST_ENTRY Parent OPTIONAL,
OUT PLDR_DATA_TABLE_ENTRY *DataTableEntry);
static BOOLEAN
IN PIMAGE_EXPORT_DIRECTORY ExportDirectory,
IN ULONG ExportSize,
IN BOOLEAN ProcessForwards,
- IN PCSTR DirectoryPath)
+ IN PCSTR DirectoryPath,
+ IN PLIST_ENTRY Parent)
{
ULONG Ordinal;
PULONG NameTable, FunctionTable;
Success = PeLdrpLoadAndScanReferencedDll(ModuleListHead,
DirectoryPath,
ForwardDllName,
+ Parent,
&DataTableEntry);
if (!Success)
{
RefExportDirectory,
RefExportSize,
TRUE,
- DirectoryPath);
+ DirectoryPath,
+ Parent);
/* Fill out the ThunkData with data from RefThunkData */
ThunkData->u1 = RefThunkData.u1;
IN OUT PLIST_ENTRY ModuleListHead,
IN PCCH DirectoryPath,
IN PCH ImportName,
+ IN PLIST_ENTRY Parent OPTIONAL,
OUT PLDR_DATA_TABLE_ENTRY *DataTableEntry)
{
CHAR FullDllName[256];
}
/* Allocate DTE for newly loaded DLL */
- Success = PeLdrAllocateDataTableEntry(ModuleListHead,
+ Success = PeLdrAllocateDataTableEntry(Parent ? Parent->Blink : ModuleListHead,
ImportName,
FullDllName,
BasePA,
IN PVOID DllBase,
IN PVOID ImageBase,
IN PIMAGE_THUNK_DATA ThunkData,
- IN PCSTR DirectoryPath)
+ IN PCSTR DirectoryPath,
+ IN PLIST_ENTRY Parent)
{
PIMAGE_EXPORT_DIRECTORY ExportDirectory = NULL;
BOOLEAN Success;
ExportDirectory,
ExportSize,
FALSE,
- DirectoryPath);
+ DirectoryPath,
+ Parent);
/* Move to the next entry */
ThunkData++;
Success = PeLdrpLoadAndScanReferencedDll(ModuleListHead,
DirectoryPath,
ImportName,
+ &ScanDTE->InLoadOrderLinks,
&DataTableEntry);
if (!Success)
{
DataTableEntry->DllBase,
ScanDTE->DllBase,
(PIMAGE_THUNK_DATA)RVA(ScanDTE->DllBase, ImportTable->FirstThunk),
- DirectoryPath);
+ DirectoryPath,
+ &ScanDTE->InLoadOrderLinks);
if (!Success)
{