[PATCH v2] ntdll: Cache LDR_IMAGE_IS_DLL for InitDLL
Ilie Halip
ilie.halip at gmail.com
Thu Apr 2 02:57:19 CDT 2020
You could alternatively check if the IMAGE_FILE_DLL flag is set in the
NT header, maybe something like
this (not compiled, not tested):
--- a/dlls/ntdll/loader.c
+++ b/dlls/ntdll/loader.c
@@ -1309,7 +1309,14 @@ static NTSTATUS MODULE_InitDLL( WINE_MODREF
*wm, UINT reason, LPVOID lpReserved
if (wm->ldr.Flags & LDR_DONT_RESOLVE_REFS) return STATUS_SUCCESS;
if (wm->ldr.TlsIndex != -1) call_tls_callbacks(
wm->ldr.BaseAddress, reason );
- if (!entry || !(wm->ldr.Flags & LDR_IMAGE_IS_DLL)) return STATUS_SUCCESS;
+ if (!entry) return STATUS_SUCCESS;
+ if (!(wm->ldr.Flags & LDR_IMAGE_IS_DLL))
+ {
+ if (RtlImageNtHeader(module)->FileHeader.Characteristics &
IMAGE_FILE_DLL)
+ TRACE("... warning: mismatch between flags ... continuing
anyway ...");
+ else
+ return STATUS_SUCCESS;
+ }
if (TRACE_ON(relay))
{
Not sure which one is the better approach, though.
More information about the wine-devel
mailing list