Module: wine Branch: master Commit: 0e42fd97c05beb50c0788164647631c00485623b URL: http://source.winehq.org/git/wine.git/?a=commit;h=0e42fd97c05beb50c078816464...
Author: Alexandre Julliard julliard@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 */