From 79077f3253aa62909c66ccf0d92cb61d7223950b Mon Sep 17 00:00:00 2001 From: Ulrich Weigand Date: Wed, 29 Sep 1999 12:16:16 +0000 Subject: [PATCH] Bugfix: Don't call GetVersionExA too early, to avoid breaking automatic emulated Windows version detection. --- if1632/builtin.c | 8 -------- loader/module.c | 8 -------- loader/ne/module.c | 21 ++++++++++++++++++++- 3 files changed, 20 insertions(+), 17 deletions(-) diff --git a/if1632/builtin.c b/if1632/builtin.c index 7cc0b618fb3..7be0d6799c4 100644 --- a/if1632/builtin.c +++ b/if1632/builtin.c @@ -146,7 +146,6 @@ static HMODULE16 BUILTIN_DoLoadModule16( const WIN16_DESCRIPTOR *descr ) NE_MODULE *pModule; int minsize; SEGTABLEENTRY *pSegTable; - OSVERSIONINFOA versionInfo; HMODULE16 hModule = GLOBAL_CreateBlock( GMEM_MOVEABLE, descr->module_start, descr->module_size, 0, @@ -159,13 +158,6 @@ static HMODULE16 BUILTIN_DoLoadModule16( const WIN16_DESCRIPTOR *descr ) pModule = (NE_MODULE *)GlobalLock16( hModule ); pModule->self = hModule; - /* Set expected_version according to the emulated Windows version */ - - versionInfo.dwOSVersionInfoSize = sizeof(versionInfo); - if ( GetVersionExA( &versionInfo ) ) - pModule->expected_version = (versionInfo.dwMajorVersion & 0xff) << 8 - | (versionInfo.dwMinorVersion & 0xff); - /* Allocate the code segment */ pSegTable = NE_SEG_TABLE( pModule ); diff --git a/loader/module.c b/loader/module.c index eef1345e57a..d670e8244df 100644 --- a/loader/module.c +++ b/loader/module.c @@ -341,7 +341,6 @@ HMODULE MODULE_CreateDummyModule( const OFSTRUCT *ofs, LPCSTR modName ) char *pStr,*s; int len; const char* basename; - OSVERSIONINFOA versionInfo; INT of_size = sizeof(OFSTRUCT) - sizeof(ofs->szPathName) + strlen(ofs->szPathName) + 1; @@ -379,13 +378,6 @@ HMODULE MODULE_CreateDummyModule( const OFSTRUCT *ofs, LPCSTR modName ) pModule->expected_version = 0x030a; pModule->self = hModule; - /* Set expected_version according to the emulated Windows version */ - versionInfo.dwOSVersionInfoSize = sizeof(versionInfo); - if ( GetVersionExA( &versionInfo ) ) - pModule->expected_version = (versionInfo.dwMajorVersion & 0xff) << 8 - | (versionInfo.dwMinorVersion & 0xff); - - /* Set loaded file information */ memcpy( pModule + 1, ofs, of_size ); ((OFSTRUCT *)(pModule+1))->cBytes = of_size - 1; diff --git a/loader/ne/module.c b/loader/ne/module.c index fee2a063857..7a79201fe19 100644 --- a/loader/ne/module.c +++ b/loader/ne/module.c @@ -1388,7 +1388,26 @@ INT16 WINAPI GetModuleUsage16( HINSTANCE16 hModule ) WORD WINAPI GetExpWinVer16( HMODULE16 hModule ) { NE_MODULE *pModule = NE_GetPtr( hModule ); - return pModule ? pModule->expected_version : 0; + if ( !pModule ) return 0; + + /* + * For built-in modules, fake the expected version the module should + * have according to the Windows version emulated by Wine + * + * FIXME: Should we really do this for Win32 dummy modules as well? + */ + if ( (pModule->flags & NE_FFLAGS_BUILTIN) + || (pModule->flags & NE_FFLAGS_WIN32) ) + { + OSVERSIONINFOA versionInfo; + versionInfo.dwOSVersionInfoSize = sizeof(versionInfo); + + if ( GetVersionExA( &versionInfo ) ) + return (versionInfo.dwMajorVersion & 0xff) << 8 + | (versionInfo.dwMinorVersion & 0xff); + } + + return pModule->expected_version; }