Alexandre Julliard : ntdll: Detect 16-bit modules and resolve imports for them.

Alexandre Julliard julliard at winehq.org
Tue Feb 25 16:58:16 CST 2014


Module: wine
Branch: master
Commit: 0e42fd97c05beb50c0788164647631c00485623b
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=0e42fd97c05beb50c0788164647631c00485623b

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Tue Feb 25 16:08:24 2014 -0600

ntdll: Detect 16-bit modules and resolve imports for them.

---

 dlls/ntdll/loader.c |   19 ++++++++++++++++++-
 1 file changed, 18 insertions(+), 1 deletion(-)

diff --git a/dlls/ntdll/loader.c b/dlls/ntdll/loader.c
index a8d675a..d458a31 100644
--- a/dlls/ntdll/loader.c
+++ b/dlls/ntdll/loader.c
@@ -1464,6 +1464,22 @@ static WCHAR *get_builtin_fullname( const WCHAR *path, const char *filename )
 }
 
 
+/*************************************************************************
+ *		is_16bit_builtin
+ */
+static BOOL is_16bit_builtin( HMODULE module )
+{
+    const IMAGE_EXPORT_DIRECTORY *exports;
+    DWORD exp_size;
+
+    if (!(exports = RtlImageDirectoryEntryToData( module, TRUE,
+                                                  IMAGE_DIRECTORY_ENTRY_EXPORT, &exp_size )))
+        return FALSE;
+
+    return find_named_export( module, exports, exp_size, "__wine_spec_dos_header", -1, NULL ) != NULL;
+}
+
+
 /***********************************************************************
  *           load_builtin_callback
  *
@@ -1511,7 +1527,8 @@ static void load_builtin_callback( void *module, const char *filename )
     wm->ldr.Flags |= LDR_WINE_INTERNAL;
 
     if ((nt->FileHeader.Characteristics & IMAGE_FILE_DLL) ||
-        nt->OptionalHeader.Subsystem == IMAGE_SUBSYSTEM_NATIVE)
+        nt->OptionalHeader.Subsystem == IMAGE_SUBSYSTEM_NATIVE ||
+        is_16bit_builtin( module ))
     {
         /* fixup imports */
 




More information about the wine-cvs mailing list