Release 971130
Sat Nov 29 12:35:26 1997 Alexandre Julliard <julliard@lrc.epfl.ch>
* [if1632/builtin.c]
Build a complete PE header for builtin Win32 modules.
* [loader/pe_image.c] [loader/module.c]
HMODULE32 now points to the loading address of the module. There
is no longer a separate PE_MODULE structure.
Fri Nov 28 11:21:47 1997 Marcus Meissner <msmeissn@cip.informatik.uni-erlangen.de>
* [ole/*][configure.in][Makefile.in][include/interfaces.h]
[if1632/olesvr32.spec][if1632/olecli32.spec]
New directory, moved OLE stuff there.
new .spec files for olecli32,olesvr32, some stubs added.
* [misc/shell.c]
Added support for extracting icons from PE dlls.
* [misc/shellord.c][if1632/shell32.spec]
Added a huge heap of ordinal only exported shell functions
(will work only in Win95).
* [loader/task.c]
Hack to make MakeProcInstance16 work in all cases (mplayer.exe).
* [win32/string32.c][include/string32.h]
Obsolete, removed.
* [windows/keyboard.c]
Added *RegisterHotkey.
* [objects/font.c][objects/text.c]
Added GetFontLanguageInfo, GetTextCharsetInfo.
Wed Nov 26 18:10:40 1997 Uwe Bonnes <bon@elektron.ikp.physik.tu-darmstadt.de>
* [misc/network.c]
In WNetGetConnection16 return the Drive label and not the DOS-Cwd.
Makes Wordview 6 start on a network connected machine.
* [controls/status.c]
Catch a Null pointer in SW_SetText.
* [files/dos_fs.c]
Add NT5 functions GetLongPathName32.
* [files/file.c]
Make GetTempFileName16 accept drive 0 (Current Drive) too.
Handle more errors and be more verbose in FILE_SetDosError, fix
an error in DeleteFile32W
* [memory/virtual.c]
Implement FlushViewOfFile.
* [misc/crtdll]
Implement _rotl and splitpath and add a stub for
_abnormal_termination.
* [misc/printdrv.c]
Stub for EnumPrinters32A.
* [win32/newfns]
Add Stub for QueryPerformanceFrequency, change return value
for QueryPerformanceCounter.
Add stub for DeviceIoControl.
Tue Nov 25 15:55:01 1997 Martin Boehme <boehme@informatik.mu-luebeck.de>
* [controls/combo.c] [controls/edit.c] [windows/defwnd.c]
[windows/winpos.c] [windows/win.c]
Removed WIN_NO_REDRAW flag.
Tue Nov 25 13:20:35 1997 Douglas Ridgway <ridgway@taiga.v-wave.com>
* [graphics/x11drv/bitblt.c]
Fixed memory leak in BITBLT_GetDstArea.
Sun Nov 23 14:05:23 1997 Andreas Mohr <100.30936@germany.net>
* [files/directory.c]
Export windows system directory to environment.
* [if1632/Makefile.in] [if1632/builtin.c] [if1632/w32skrnl.spec]
[if1632/win32s16.spec] [misc/w32scomb.c] [misc/w32skrnl.c]
Added Win32s DLLs W32SKRNL and WIN32S16.
* [if1632/kernel32.spec] [loader/module.c]
Added misc functions for Win32s.
* [if1632/kernel.spec] [loader/task.c]
Added DefineHandleTable().
* [scheduler/process.c]
Fixed SetEnvironmentVariable32A() to avoid heap corruption.
Sat Nov 22 14:11:42 1997 Kristian Nielsen <kristian.nielsen@risoe.dk>
* [windows/painting.c]
Fix leak in BeginPaint16() for CS_PARENTDC windows where the
update region was not properly released.
Thu Nov 20 03:55:29 1997 Gordon Chaffee <chaffee@CS.Berkeley.EDU>
* [loader/pe_image.c]
Implemented forwarded DLL functions.
* [objects/dib.c]
Added support for 16- and 32-bit mode DIBs.
Support negative bitmap heights.
* [win32/process.c]
Added stub for CreateProcess32W.
* [win32/security.c] [include/ntdll.h]
Added stubs for LookupAccountSid32A/W.
* [scheduler/process.c]
Use the size specified in the PE header for the process heap.
Mon Nov 17 00:53:35 1997 Len White <phreak@cgocable.net>
* [msdos/int3d.c]
New file. Stubs for int3d.
Sun Nov 16 12:30:00 PST 1997 Jason Schonberg <schon@mti.sgi.com>
* [include/aspi.h]
Changed comment style from C++ to C.
diff --git a/loader/module.c b/loader/module.c
index 202f189..f35bae4 100644
--- a/loader/module.c
+++ b/loader/module.c
@@ -53,18 +53,16 @@
MODULE_HANDLEtoHMODULE16(HANDLE32 handle) {
NE_MODULE *pModule;
- if (HIWORD(handle)) {
- /* this is a HMODULE32 aka pe->mappeddll */
+ if (HIWORD(handle))
+ {
+ /* this is a HMODULE32 */
/* walk the list looking for the correct startaddress */
pModule = (NE_MODULE *)GlobalLock16( hFirstModule );
- while (pModule) {
- if ( ((pModule->flags&(NE_FFLAGS_BUILTIN|NE_FFLAGS_WIN32))==NE_FFLAGS_WIN32) &&
- pModule->pe_module &&
- ((HMODULE32)pModule->pe_module->mappeddll == handle)
- )
- return pModule->self;
- pModule=(NE_MODULE*)GlobalLock16(pModule->next);
+ while (pModule)
+ {
+ if (pModule->module32 == handle) return pModule->self;
+ pModule = (NE_MODULE*)GlobalLock16(pModule->next);
}
return 0;
}
@@ -89,10 +87,7 @@
if (!pModule)
return 0;
- if ( ((pModule->flags&(NE_FFLAGS_BUILTIN|NE_FFLAGS_WIN32))==NE_FFLAGS_WIN32) &&
- pModule->pe_module
- )
- return (HMODULE32)pModule->pe_module->mappeddll;
+ if (pModule->module32) return pModule->module32;
return handle;
}
}
@@ -127,7 +122,7 @@
pModule->os_flags, pModule->min_swap_area,
pModule->expected_version );
if (pModule->flags & NE_FFLAGS_WIN32)
- printf( "PE module=%08x\n", (unsigned int)pModule->pe_module );
+ printf( "PE module=%08x\n", pModule->module32 );
/* Dump the file info */
@@ -557,7 +552,7 @@
pModule = (NE_MODULE *)GlobalLock16( hModule );
memcpy( pModule, &ne_header, sizeof(ne_header) );
pModule->count = 0;
- pModule->pe_module = NULL;
+ pModule->module32 = 0;
pModule->self = hModule;
pModule->self_loading_sel = 0;
pData = (BYTE *)(pModule + 1);
@@ -1139,7 +1134,7 @@
*/
HINSTANCE16 MODULE_Load( LPCSTR name, LPVOID paramBlock, UINT16 uFlags)
{
- HMODULE16 hModule;
+ HMODULE32 hModule;
HINSTANCE16 hInstance, hPrevInstance;
NE_MODULE *pModule;
LOADPARAMS *params = (LOADPARAMS *)paramBlock;
@@ -1161,7 +1156,8 @@
if (!hModule) /* We have to load the module */
{
/* Try to load the built-in first if not disabled */
- if ((hModule = BUILTIN_LoadModule( name, FALSE ))) return hModule;
+ if ((hModule = BUILTIN_LoadModule( name, FALSE )))
+ return MODULE_HANDLEtoHMODULE16( hModule );
if ((hFile = OpenFile32( name, &ofs, OF_READ )) == HFILE_ERROR32)
{
@@ -1169,7 +1165,7 @@
if ((hModule = BUILTIN_LoadModule( name, TRUE )))
{
fprintf( stderr, "Warning: could not load Windows DLL '%s', using built-in module.\n", name );
- return hModule;
+ return MODULE_HANDLEtoHMODULE16( hModule );
}
return 2; /* File not found */
}
@@ -1254,7 +1250,7 @@
(LPSTR)PTR_SEG_TO_LIN( params->cmdLine ),
showcmd );
- if( hTask && TASK_GetNextTask(hTask)) Yield();
+ if( hTask && TASK_GetNextTask(hTask)) Yield16();
}
return hInstance;
@@ -1508,6 +1504,17 @@
/***********************************************************************
+ * PrivateLoadLibrary (KERNEL32)
+ *
+ * FIXME: rough guesswork, don't know what "Private" means
+ */
+HMODULE32 WINAPI PrivateLoadLibrary(LPCSTR libname)
+{
+ return LoadLibrary16(libname);
+}
+
+
+/***********************************************************************
* FreeLibrary16 (KERNEL.96)
*/
void WINAPI FreeLibrary16( HINSTANCE16 handle )
@@ -1518,6 +1525,17 @@
/***********************************************************************
+ * PrivateFreeLibrary (KERNEL32)
+ *
+ * FIXME: rough guesswork, don't know what "Private" means
+ */
+void WINAPI PrivateFreeLibrary(HMODULE32 handle)
+{
+ FreeLibrary16(handle);
+}
+
+
+/***********************************************************************
* WinExec16 (KERNEL.166)
*/
HINSTANCE16 WINAPI WinExec16( LPCSTR lpCmdLine, UINT16 nCmdShow )
@@ -1773,15 +1791,14 @@
dprintf_win32(stddeb,"GetProcAddress32(%08lx,%p)\n",(DWORD)hModule,function);
if (!(pModule = MODULE_GetPtr( hModule )))
return (FARPROC32)0;
- if (pModule->flags & NE_FFLAGS_BUILTIN)
- return BUILTIN_GetProcAddress32( pModule, function );
- if (!pModule->pe_module) {
- fprintf(stderr,"Oops, Module 0x%08lx has got no pe_module?\n",
+ if (!pModule->module32)
+ {
+ fprintf(stderr,"Oops, Module 0x%08lx has got no module32?\n",
(DWORD)MODULE_HANDLEtoHMODULE32(hModule)
);
return (FARPROC32)0;
}
- return PE_FindExportedFunction( pModule->pe_module, function );
+ return PE_FindExportedFunction( pModule->module32, function );
}
/***********************************************************************
@@ -1798,11 +1815,9 @@
if (!(pModule = MODULE_GetPtr( hModule )))
return (LPIMAGE_NT_HEADERS)0;
- if (!(pModule->flags & NE_FFLAGS_WIN32) || !pModule->pe_module)
+ if (!(pModule->flags & NE_FFLAGS_WIN32) || !pModule->module32)
return (LPIMAGE_NT_HEADERS)0;
- if (pModule->flags & NE_FFLAGS_BUILTIN)
- return (LPIMAGE_NT_HEADERS)0;
- return pModule->pe_module->pe_header;
+ return PE_HEADER(pModule->module32);
}