Release 950430
Sat Apr 29 20:42:01 1995 Alexandre Julliard (julliard@sunsite.unc.edu)
* [controls/static.c]
Fixed painting of SS_*FRAME controls.
* [if1632/callback.c]
Pass the window instance as DS to the 16-bit window procedure.
Rewrote Catch() and Throw() to make them work with multiple tasks.
* [loader/main.c]
New function MAIN_Init() to perform initializations before the
first task is started instead of doing them in InitApp().
Temporary hack to command-line parsing to load one program per
command-line argument, to make testing task-switching easier.
* [loader/*.c]
Reimplemented modules to use a Windows-compatible layout and to
allow multiple tasks and multiple module instances. Not really
finished yet.
* [loader/task.c] [misc/exec.c]
Reimplemented tasks to use a common address space, and implemented
preliminary task-switching capabilities.
* [memory/global.c]
Fixed bug in GlobalNext().
* [misc/main.c]
Updated the list of contributors. Let me know if I forgot someone.
* [miscemu/int21.c]
Use one DTA per task instead of a global one.
* [objects/bitblt.c]
Fixed bug in BitBlt() that could cause BadMatch errors.
* [tools/build.c]
Added new function type 'stub', that makes possible to export an
unimplemented function by name as well as by ordinal. This will
avoid loading errors for unimplemented functions.
Generate an in-memory module layout for built-in DLLs so that the
same code can be used for built-in and loaded modules.
Changed relay code to make it unnecessary to save the value of the
BP register.
* [windows/message.c]
Implemented multiple message queues and preliminary task-switching
capabilities. Inter-task SendMessage() calls are not implemented
yet and will probably cause crashes if used.
* [windows/property.c]
Reimplemented properties and allocate them on the USER heap.
* [windows/win.c]
Fixed bug in SetWindowWord().
Reimplemented EnumWindows() and EnumTaskWindows().
Tue Apr 18 09:48:38 1995 Bernd Schmidt <crux@pool.informatik.rwth-aachen.de>
* [misc/main.c]
GetSystemParametersInfo(): Additional action SPI_GETICONTITLEFONT.
* [loader/resource.c]
Removed the check for NE_SEGFLAGS_EXECUTEONLY, since it broke
control.exe.
Fixed icon loading.
* [objects/font.c] [include/windows.h]
Fixed a bug in InitFontsList() and worked on the EnumFonts()
functions to make them comprehensible.
* [controls/button.c]
Fixed my previous patch to handle LBUTTONUP messages.
Fri Apr 14 11:41:28 1995 Cameron Heide (heide@ee.ualberta.ca)
* [misc/network.c, misc/dos_fs.c]
Implemented WNetGetConnection. All that is currently
supported are drives, for which the remote name is simply
the redirected UNIX directory name.
* [miscemu/int2?.c]
More drive number validity checking.
Wed Apr 12 11:28:37 1995 Bernd Schmidt <crux@pool.informatik.rwth-aachen.de>
* [controls/listbox.c]
Oops, my previous change to ListBoxDirectory broke the Borland
file open dialog. Fixed.
Mon Apr 10 23:17:12 1995 Martin von Loewis <loewis@informatik.hu-berlin.de>
* [if1632/ole2nls.spec] [misc/ole2nls.c] [misc/Imakefile]
New file ole2nls.c. Added stubs for GetUserDefaultLCID,
GetSystemDefaultLCID, GetUserDefaultLangID, GetSystemDefaultLangID.
Mon Apr 10 10:05:18 1995 Bernd Schmidt <crux@pool.informatik.rwth-aachen.de>
* [memory/global.c] [memory/local.c] [include/windows.h]
GlobalReAlloc(): If GMEM_MODIFY is set, don't resize the block.
LocalReAlloc(): Same for LMEM_MODIFY.
* [controls/listbox.c]
Fixed a bug in ListBoxDirectory that prevented commdlg from working.
Check for errors in some more places.
* [if1632/gdi.spec] [if1632/user.spec]
16 bit callback functions should be passed as segptrs.
* [include/dlls.h] [loader/ne_image.c] [loader/selector.c]
[loader/library.c]
Prevent a DLL from being initialized twice (Borlands Resource
Workshop used to do this).
Provide an additional flag for each w_file that indicates whether
it's an EXE or a DLL, for combinations like pbrush.exe/.dll.
* [controls/button.c]
Handle LBUTTONUP messages even if the button no longer has the
capture (for WinHelp).
* [include/wintypes.h]
FARPROC is now a segptr for the emulator and a function
pointer for the library.
* [misc/commdlg.c] [misc/commdlg.h]
Cleaned the file dialogs up a little. They now work reasonably well,
although there are still some problems (e.g. files are initially
invisible).
* [windows/class.c] [if1632/user.spec] [include/windows.h]
GetClassInfo() must take a segptr, as it checks whether the
highword is zero.
GetClassName() called the wrong atom function. No surprise it didn't
find anything.
* [misc/lstr.c]
AnsiToOem() and OemToAnsi() didn't terminate the strings. Fixed.
Removed some warnings.
* [if1632/relay.c] [if1632/ddeml.spec] [include/dlls.h]
New spec file for the 3.1 DDEML DDL.
* [controls/menu.c]
Small fix to ChangeMenu - mask out the obsolete flags
(MF_APPEND == MF_OWNERDRAW, this led to problems). It also had
problems with the MF_BYPOSITION flag.
* [windows/message.c]
SendMessage(): call the WH_CALLWNDPROC hook function. This is rather
ugly, I'm afraid. Windows probably passes a pointer to the 16 bit
stack for speed reasons.
* [windows/hook.c] [include/windows.h]
Set/HookWindowsHook() shouldn't just call their *Ex counterparts, as
they have slightly different semantics.
MS Hearts now works somewhat, if you disable the new builtin DDEML.
The graphics are completely messed up, though.
1995-04-30 12:05:20 +02:00
|
|
|
/*
|
|
|
|
* Modules
|
|
|
|
*
|
|
|
|
* Copyright 1995 Alexandre Julliard
|
2002-03-10 00:29:33 +01:00
|
|
|
*
|
|
|
|
* This library is free software; you can redistribute it and/or
|
|
|
|
* modify it under the terms of the GNU Lesser General Public
|
|
|
|
* License as published by the Free Software Foundation; either
|
|
|
|
* version 2.1 of the License, or (at your option) any later version.
|
|
|
|
*
|
|
|
|
* This library is distributed in the hope that it will be useful,
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
|
|
* Lesser General Public License for more details.
|
|
|
|
*
|
|
|
|
* You should have received a copy of the GNU Lesser General Public
|
|
|
|
* License along with this library; if not, write to the Free Software
|
2006-05-18 14:49:52 +02:00
|
|
|
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
Release 950430
Sat Apr 29 20:42:01 1995 Alexandre Julliard (julliard@sunsite.unc.edu)
* [controls/static.c]
Fixed painting of SS_*FRAME controls.
* [if1632/callback.c]
Pass the window instance as DS to the 16-bit window procedure.
Rewrote Catch() and Throw() to make them work with multiple tasks.
* [loader/main.c]
New function MAIN_Init() to perform initializations before the
first task is started instead of doing them in InitApp().
Temporary hack to command-line parsing to load one program per
command-line argument, to make testing task-switching easier.
* [loader/*.c]
Reimplemented modules to use a Windows-compatible layout and to
allow multiple tasks and multiple module instances. Not really
finished yet.
* [loader/task.c] [misc/exec.c]
Reimplemented tasks to use a common address space, and implemented
preliminary task-switching capabilities.
* [memory/global.c]
Fixed bug in GlobalNext().
* [misc/main.c]
Updated the list of contributors. Let me know if I forgot someone.
* [miscemu/int21.c]
Use one DTA per task instead of a global one.
* [objects/bitblt.c]
Fixed bug in BitBlt() that could cause BadMatch errors.
* [tools/build.c]
Added new function type 'stub', that makes possible to export an
unimplemented function by name as well as by ordinal. This will
avoid loading errors for unimplemented functions.
Generate an in-memory module layout for built-in DLLs so that the
same code can be used for built-in and loaded modules.
Changed relay code to make it unnecessary to save the value of the
BP register.
* [windows/message.c]
Implemented multiple message queues and preliminary task-switching
capabilities. Inter-task SendMessage() calls are not implemented
yet and will probably cause crashes if used.
* [windows/property.c]
Reimplemented properties and allocate them on the USER heap.
* [windows/win.c]
Fixed bug in SetWindowWord().
Reimplemented EnumWindows() and EnumTaskWindows().
Tue Apr 18 09:48:38 1995 Bernd Schmidt <crux@pool.informatik.rwth-aachen.de>
* [misc/main.c]
GetSystemParametersInfo(): Additional action SPI_GETICONTITLEFONT.
* [loader/resource.c]
Removed the check for NE_SEGFLAGS_EXECUTEONLY, since it broke
control.exe.
Fixed icon loading.
* [objects/font.c] [include/windows.h]
Fixed a bug in InitFontsList() and worked on the EnumFonts()
functions to make them comprehensible.
* [controls/button.c]
Fixed my previous patch to handle LBUTTONUP messages.
Fri Apr 14 11:41:28 1995 Cameron Heide (heide@ee.ualberta.ca)
* [misc/network.c, misc/dos_fs.c]
Implemented WNetGetConnection. All that is currently
supported are drives, for which the remote name is simply
the redirected UNIX directory name.
* [miscemu/int2?.c]
More drive number validity checking.
Wed Apr 12 11:28:37 1995 Bernd Schmidt <crux@pool.informatik.rwth-aachen.de>
* [controls/listbox.c]
Oops, my previous change to ListBoxDirectory broke the Borland
file open dialog. Fixed.
Mon Apr 10 23:17:12 1995 Martin von Loewis <loewis@informatik.hu-berlin.de>
* [if1632/ole2nls.spec] [misc/ole2nls.c] [misc/Imakefile]
New file ole2nls.c. Added stubs for GetUserDefaultLCID,
GetSystemDefaultLCID, GetUserDefaultLangID, GetSystemDefaultLangID.
Mon Apr 10 10:05:18 1995 Bernd Schmidt <crux@pool.informatik.rwth-aachen.de>
* [memory/global.c] [memory/local.c] [include/windows.h]
GlobalReAlloc(): If GMEM_MODIFY is set, don't resize the block.
LocalReAlloc(): Same for LMEM_MODIFY.
* [controls/listbox.c]
Fixed a bug in ListBoxDirectory that prevented commdlg from working.
Check for errors in some more places.
* [if1632/gdi.spec] [if1632/user.spec]
16 bit callback functions should be passed as segptrs.
* [include/dlls.h] [loader/ne_image.c] [loader/selector.c]
[loader/library.c]
Prevent a DLL from being initialized twice (Borlands Resource
Workshop used to do this).
Provide an additional flag for each w_file that indicates whether
it's an EXE or a DLL, for combinations like pbrush.exe/.dll.
* [controls/button.c]
Handle LBUTTONUP messages even if the button no longer has the
capture (for WinHelp).
* [include/wintypes.h]
FARPROC is now a segptr for the emulator and a function
pointer for the library.
* [misc/commdlg.c] [misc/commdlg.h]
Cleaned the file dialogs up a little. They now work reasonably well,
although there are still some problems (e.g. files are initially
invisible).
* [windows/class.c] [if1632/user.spec] [include/windows.h]
GetClassInfo() must take a segptr, as it checks whether the
highword is zero.
GetClassName() called the wrong atom function. No surprise it didn't
find anything.
* [misc/lstr.c]
AnsiToOem() and OemToAnsi() didn't terminate the strings. Fixed.
Removed some warnings.
* [if1632/relay.c] [if1632/ddeml.spec] [include/dlls.h]
New spec file for the 3.1 DDEML DDL.
* [controls/menu.c]
Small fix to ChangeMenu - mask out the obsolete flags
(MF_APPEND == MF_OWNERDRAW, this led to problems). It also had
problems with the MF_BYPOSITION flag.
* [windows/message.c]
SendMessage(): call the WH_CALLWNDPROC hook function. This is rather
ugly, I'm afraid. Windows probably passes a pointer to the 16 bit
stack for speed reasons.
* [windows/hook.c] [include/windows.h]
Set/HookWindowsHook() shouldn't just call their *Ex counterparts, as
they have slightly different semantics.
MS Hearts now works somewhat, if you disable the new builtin DDEML.
The graphics are completely messed up, though.
1995-04-30 12:05:20 +02:00
|
|
|
*/
|
|
|
|
|
2002-08-17 02:43:16 +02:00
|
|
|
#include "config.h"
|
2002-08-29 01:42:34 +02:00
|
|
|
#include "wine/port.h"
|
2002-08-17 02:43:16 +02:00
|
|
|
|
Release 950430
Sat Apr 29 20:42:01 1995 Alexandre Julliard (julliard@sunsite.unc.edu)
* [controls/static.c]
Fixed painting of SS_*FRAME controls.
* [if1632/callback.c]
Pass the window instance as DS to the 16-bit window procedure.
Rewrote Catch() and Throw() to make them work with multiple tasks.
* [loader/main.c]
New function MAIN_Init() to perform initializations before the
first task is started instead of doing them in InitApp().
Temporary hack to command-line parsing to load one program per
command-line argument, to make testing task-switching easier.
* [loader/*.c]
Reimplemented modules to use a Windows-compatible layout and to
allow multiple tasks and multiple module instances. Not really
finished yet.
* [loader/task.c] [misc/exec.c]
Reimplemented tasks to use a common address space, and implemented
preliminary task-switching capabilities.
* [memory/global.c]
Fixed bug in GlobalNext().
* [misc/main.c]
Updated the list of contributors. Let me know if I forgot someone.
* [miscemu/int21.c]
Use one DTA per task instead of a global one.
* [objects/bitblt.c]
Fixed bug in BitBlt() that could cause BadMatch errors.
* [tools/build.c]
Added new function type 'stub', that makes possible to export an
unimplemented function by name as well as by ordinal. This will
avoid loading errors for unimplemented functions.
Generate an in-memory module layout for built-in DLLs so that the
same code can be used for built-in and loaded modules.
Changed relay code to make it unnecessary to save the value of the
BP register.
* [windows/message.c]
Implemented multiple message queues and preliminary task-switching
capabilities. Inter-task SendMessage() calls are not implemented
yet and will probably cause crashes if used.
* [windows/property.c]
Reimplemented properties and allocate them on the USER heap.
* [windows/win.c]
Fixed bug in SetWindowWord().
Reimplemented EnumWindows() and EnumTaskWindows().
Tue Apr 18 09:48:38 1995 Bernd Schmidt <crux@pool.informatik.rwth-aachen.de>
* [misc/main.c]
GetSystemParametersInfo(): Additional action SPI_GETICONTITLEFONT.
* [loader/resource.c]
Removed the check for NE_SEGFLAGS_EXECUTEONLY, since it broke
control.exe.
Fixed icon loading.
* [objects/font.c] [include/windows.h]
Fixed a bug in InitFontsList() and worked on the EnumFonts()
functions to make them comprehensible.
* [controls/button.c]
Fixed my previous patch to handle LBUTTONUP messages.
Fri Apr 14 11:41:28 1995 Cameron Heide (heide@ee.ualberta.ca)
* [misc/network.c, misc/dos_fs.c]
Implemented WNetGetConnection. All that is currently
supported are drives, for which the remote name is simply
the redirected UNIX directory name.
* [miscemu/int2?.c]
More drive number validity checking.
Wed Apr 12 11:28:37 1995 Bernd Schmidt <crux@pool.informatik.rwth-aachen.de>
* [controls/listbox.c]
Oops, my previous change to ListBoxDirectory broke the Borland
file open dialog. Fixed.
Mon Apr 10 23:17:12 1995 Martin von Loewis <loewis@informatik.hu-berlin.de>
* [if1632/ole2nls.spec] [misc/ole2nls.c] [misc/Imakefile]
New file ole2nls.c. Added stubs for GetUserDefaultLCID,
GetSystemDefaultLCID, GetUserDefaultLangID, GetSystemDefaultLangID.
Mon Apr 10 10:05:18 1995 Bernd Schmidt <crux@pool.informatik.rwth-aachen.de>
* [memory/global.c] [memory/local.c] [include/windows.h]
GlobalReAlloc(): If GMEM_MODIFY is set, don't resize the block.
LocalReAlloc(): Same for LMEM_MODIFY.
* [controls/listbox.c]
Fixed a bug in ListBoxDirectory that prevented commdlg from working.
Check for errors in some more places.
* [if1632/gdi.spec] [if1632/user.spec]
16 bit callback functions should be passed as segptrs.
* [include/dlls.h] [loader/ne_image.c] [loader/selector.c]
[loader/library.c]
Prevent a DLL from being initialized twice (Borlands Resource
Workshop used to do this).
Provide an additional flag for each w_file that indicates whether
it's an EXE or a DLL, for combinations like pbrush.exe/.dll.
* [controls/button.c]
Handle LBUTTONUP messages even if the button no longer has the
capture (for WinHelp).
* [include/wintypes.h]
FARPROC is now a segptr for the emulator and a function
pointer for the library.
* [misc/commdlg.c] [misc/commdlg.h]
Cleaned the file dialogs up a little. They now work reasonably well,
although there are still some problems (e.g. files are initially
invisible).
* [windows/class.c] [if1632/user.spec] [include/windows.h]
GetClassInfo() must take a segptr, as it checks whether the
highword is zero.
GetClassName() called the wrong atom function. No surprise it didn't
find anything.
* [misc/lstr.c]
AnsiToOem() and OemToAnsi() didn't terminate the strings. Fixed.
Removed some warnings.
* [if1632/relay.c] [if1632/ddeml.spec] [include/dlls.h]
New spec file for the 3.1 DDEML DDL.
* [controls/menu.c]
Small fix to ChangeMenu - mask out the obsolete flags
(MF_APPEND == MF_OWNERDRAW, this led to problems). It also had
problems with the MF_BYPOSITION flag.
* [windows/message.c]
SendMessage(): call the WH_CALLWNDPROC hook function. This is rather
ugly, I'm afraid. Windows probably passes a pointer to the 16 bit
stack for speed reasons.
* [windows/hook.c] [include/windows.h]
Set/HookWindowsHook() shouldn't just call their *Ex counterparts, as
they have slightly different semantics.
MS Hearts now works somewhat, if you disable the new builtin DDEML.
The graphics are completely messed up, though.
1995-04-30 12:05:20 +02:00
|
|
|
#include <fcntl.h>
|
2009-12-30 23:36:56 +01:00
|
|
|
#include <stdarg.h>
|
2003-11-27 01:59:36 +01:00
|
|
|
#include <stdio.h>
|
Release 950430
Sat Apr 29 20:42:01 1995 Alexandre Julliard (julliard@sunsite.unc.edu)
* [controls/static.c]
Fixed painting of SS_*FRAME controls.
* [if1632/callback.c]
Pass the window instance as DS to the 16-bit window procedure.
Rewrote Catch() and Throw() to make them work with multiple tasks.
* [loader/main.c]
New function MAIN_Init() to perform initializations before the
first task is started instead of doing them in InitApp().
Temporary hack to command-line parsing to load one program per
command-line argument, to make testing task-switching easier.
* [loader/*.c]
Reimplemented modules to use a Windows-compatible layout and to
allow multiple tasks and multiple module instances. Not really
finished yet.
* [loader/task.c] [misc/exec.c]
Reimplemented tasks to use a common address space, and implemented
preliminary task-switching capabilities.
* [memory/global.c]
Fixed bug in GlobalNext().
* [misc/main.c]
Updated the list of contributors. Let me know if I forgot someone.
* [miscemu/int21.c]
Use one DTA per task instead of a global one.
* [objects/bitblt.c]
Fixed bug in BitBlt() that could cause BadMatch errors.
* [tools/build.c]
Added new function type 'stub', that makes possible to export an
unimplemented function by name as well as by ordinal. This will
avoid loading errors for unimplemented functions.
Generate an in-memory module layout for built-in DLLs so that the
same code can be used for built-in and loaded modules.
Changed relay code to make it unnecessary to save the value of the
BP register.
* [windows/message.c]
Implemented multiple message queues and preliminary task-switching
capabilities. Inter-task SendMessage() calls are not implemented
yet and will probably cause crashes if used.
* [windows/property.c]
Reimplemented properties and allocate them on the USER heap.
* [windows/win.c]
Fixed bug in SetWindowWord().
Reimplemented EnumWindows() and EnumTaskWindows().
Tue Apr 18 09:48:38 1995 Bernd Schmidt <crux@pool.informatik.rwth-aachen.de>
* [misc/main.c]
GetSystemParametersInfo(): Additional action SPI_GETICONTITLEFONT.
* [loader/resource.c]
Removed the check for NE_SEGFLAGS_EXECUTEONLY, since it broke
control.exe.
Fixed icon loading.
* [objects/font.c] [include/windows.h]
Fixed a bug in InitFontsList() and worked on the EnumFonts()
functions to make them comprehensible.
* [controls/button.c]
Fixed my previous patch to handle LBUTTONUP messages.
Fri Apr 14 11:41:28 1995 Cameron Heide (heide@ee.ualberta.ca)
* [misc/network.c, misc/dos_fs.c]
Implemented WNetGetConnection. All that is currently
supported are drives, for which the remote name is simply
the redirected UNIX directory name.
* [miscemu/int2?.c]
More drive number validity checking.
Wed Apr 12 11:28:37 1995 Bernd Schmidt <crux@pool.informatik.rwth-aachen.de>
* [controls/listbox.c]
Oops, my previous change to ListBoxDirectory broke the Borland
file open dialog. Fixed.
Mon Apr 10 23:17:12 1995 Martin von Loewis <loewis@informatik.hu-berlin.de>
* [if1632/ole2nls.spec] [misc/ole2nls.c] [misc/Imakefile]
New file ole2nls.c. Added stubs for GetUserDefaultLCID,
GetSystemDefaultLCID, GetUserDefaultLangID, GetSystemDefaultLangID.
Mon Apr 10 10:05:18 1995 Bernd Schmidt <crux@pool.informatik.rwth-aachen.de>
* [memory/global.c] [memory/local.c] [include/windows.h]
GlobalReAlloc(): If GMEM_MODIFY is set, don't resize the block.
LocalReAlloc(): Same for LMEM_MODIFY.
* [controls/listbox.c]
Fixed a bug in ListBoxDirectory that prevented commdlg from working.
Check for errors in some more places.
* [if1632/gdi.spec] [if1632/user.spec]
16 bit callback functions should be passed as segptrs.
* [include/dlls.h] [loader/ne_image.c] [loader/selector.c]
[loader/library.c]
Prevent a DLL from being initialized twice (Borlands Resource
Workshop used to do this).
Provide an additional flag for each w_file that indicates whether
it's an EXE or a DLL, for combinations like pbrush.exe/.dll.
* [controls/button.c]
Handle LBUTTONUP messages even if the button no longer has the
capture (for WinHelp).
* [include/wintypes.h]
FARPROC is now a segptr for the emulator and a function
pointer for the library.
* [misc/commdlg.c] [misc/commdlg.h]
Cleaned the file dialogs up a little. They now work reasonably well,
although there are still some problems (e.g. files are initially
invisible).
* [windows/class.c] [if1632/user.spec] [include/windows.h]
GetClassInfo() must take a segptr, as it checks whether the
highword is zero.
GetClassName() called the wrong atom function. No surprise it didn't
find anything.
* [misc/lstr.c]
AnsiToOem() and OemToAnsi() didn't terminate the strings. Fixed.
Removed some warnings.
* [if1632/relay.c] [if1632/ddeml.spec] [include/dlls.h]
New spec file for the 3.1 DDEML DDL.
* [controls/menu.c]
Small fix to ChangeMenu - mask out the obsolete flags
(MF_APPEND == MF_OWNERDRAW, this led to problems). It also had
problems with the MF_BYPOSITION flag.
* [windows/message.c]
SendMessage(): call the WH_CALLWNDPROC hook function. This is rather
ugly, I'm afraid. Windows probably passes a pointer to the 16 bit
stack for speed reasons.
* [windows/hook.c] [include/windows.h]
Set/HookWindowsHook() shouldn't just call their *Ex counterparts, as
they have slightly different semantics.
MS Hearts now works somewhat, if you disable the new builtin DDEML.
The graphics are completely messed up, though.
1995-04-30 12:05:20 +02:00
|
|
|
#include <stdlib.h>
|
|
|
|
#include <string.h>
|
2004-02-27 22:32:54 +01:00
|
|
|
#include <sys/types.h>
|
2002-08-17 02:43:16 +02:00
|
|
|
#ifdef HAVE_UNISTD_H
|
|
|
|
# include <unistd.h>
|
|
|
|
#endif
|
2005-11-28 17:32:54 +01:00
|
|
|
#include "ntstatus.h"
|
|
|
|
#define WIN32_NO_STATUS
|
Release 980822
Sat Aug 22 17:46:19 1998 Ulrich Weigand <weigand@informatik.uni-erlangen.de>
* [include/dosexe.h] [include/module.h] [include/pe_image.h]
[include/process.h] [include/windows.h] [loader/dos/module.c]
[loader/module.c] [loader/ne/module.c] [loader/pe_image.c]
[scheduler/process.c] [win32/process.c]
Partially implemented CreateProcess32.
* [win32/device.c] [relay32/kernel32.spec] [scheduler/k32obj.c]
[misc/registry.c] [win32/file.c]
Partially implemented VxDCall (VMM registry services).
* [files/dos_fs.c]
DOSFS_FindNext made thread-safe.
* [include/sig_context.h] [include/syslevel.h] [loader/signal.c]
[scheduler/syslevel.c] [tools/build.c]
Replaced CALLTO16_Current_fs by SYSLEVEL_Win16CurrentTeb.
* [win32/kernel32.c]
Bugfix: QT_Thunk/FT_Thunk should return 'long' in DX:AX, not EAX.
* [if1632/relay.c] [relay32/builtin32.c] [windows/msgbox.c]
[msdos/int20.c] [msdos/int21.c]
Use ExitProcess instead of TASK_KillCurrentTask.
* [include/task.h] [include/thread.h] [loader/task.c]
[scheduler/thread.c] [include/queue.h] [windows/message.c]
[windows/queue.c] [windows/win.c]
Prevent Win32 threads from entering the TASK_Reschedule loop.
(Note: Win32 messaging still doesn't work correctly; this patch
is just preventing the system from crashing when Win32 threads
call messaging functions. Messages will probably still get lost.)
* [scheduler/critsection.c]
Deactivated the use of SEM_UNDO for the SYSTEM_LOCK semaphore;
for some reason, this leads to problems after threads terminate...
Sat Aug 22 15:00:00 1998 Jrgen Schmied <juergen.schmied@metronet.de>
* [include/authors.h]
New file, includes all names of the developer (former shell.c)
* [Makefile.in][configure][configure.in][dlls/Makefile.in]
[dlls/shell32/Makefile.in][shres.rc]
Created dlls/shell32 and moved the shell32 stuff in it.
Started to create internal resources.
* [dlls/shell32/*]
Split the shell32 implementation into smaller files.
New classes: IContextMenu, IExtractIcon, IShellView.
Implemented Shell_GetImageList().
shell32 links to comctl32 now dynamically so it can use
internal/external implementations.
* [documentation/internal-dll] [documentation/shell32]
New, could anybody do a spellcheck?
* [include/commctrl.h]
Many new LV constants, structures, functions.
* [controls/comctl32undoc.c]
Rewrote the DSA* functions.
* [windows/winpos.c]
SetShellWindow32, GetShellWindow32.
Sat Aug 22 14:02:15 1998 Alexander Lukyanov <lav@long.yar.ru>
* [loader/resource.c]
Mark last accelerator as such in LoadAccelerators32W.
* [relay32/shell32.spec] [misc/shell.c]
Add stubs for SHGetSpecialFolderPath[AW].
Sat Aug 22 02:07:42 1998 Adrian Harvey <adrian@select.com.au>
* [include/file.h] [file/file.c] [msdos/int21.c] [msdos/vxd.c]
[misc/lzexpand.c] [win32/kernel32.c] [documentation/filehandles]
Fixed file handle handling. Created universal HFILE16 to HFILE32
translation macro from msdos/int21 code by Ove Kaaven.
Used macro in all Win16 functions so that win32 handles are translated
to avoid DOS/Win16 stdxx handles.
Removed handle translation from int21.c where Win16 functions are
called. Changed remaining calls to use new macro names.
Documented filehandle handling and differences between win 16 & 32.
Fri Aug 21 20:32:49 1998 Alexandre Julliard <julliard@lrc.epfl.ch>
* [server/process.c] [server/thread.c]
Implemented object wait queues and synchronization.
Fri Aug 21 18:40:02 1998 Huw D M Davies <daviesh@abacus.physics.ox.ac.uk>
* [graphics/psdrv/*]
DEVMODE dmPaper{Width|Length} fields are in 0.1mm.
Select a 100 pixel default font in CreateDC.
Thu Aug 20 22:47:39 1998 Uwe Bonnes <bon@elektron.ikp.physik.tu-darmstadt.de>
* [objects/bitmap.c]
Handle bits=32 in SetBitmapBits32 and GetBitmapBits32.
* [msdos/int21.c]
Add handling of Int21 0A and 37.
* [misc/commdlg.c]
Use MapHModuleLS and MapHModuleSL when translating HINSTANCE16 to
HINSTANCE32 and vice versa.
* [win32/file.c]
CreateFile32A: Abort if filename == NULL.
Thu Aug 20 12:28:31 1998 Marcus Meissner <marcus@jet.franken.de>
* [*/*]
Lots of missing prototypes added, some parameter types adapted to match
SDK.
* [debugger/stabs.c]
Don't loop forever if we don't find wine or one of the libxxx.so.
* [loader/ne/module.c]
Implemented MapHModuleLS,MapHModuleSL,MapHinstLS,MapHinstSL.
* [misc/network.c]
Implemented WNetGetUser32A.
* [misc/shellord.c]
Implemented ILRemoveLastID.
* [multimedia/dsound.c]
Fixed StarCraft memory leak.
* [graphics/ddraw.c]
Removed some unnecessary simple relaying functions, tried polishing
up the Xlib implementation (still doesn't work), temp. removed Xshm
code (to be remerged with working Xlib code).
Tue Aug 18 22:29:17 1998 Ove Kaaven <ovek@arcticnet.no>
* [multimedia/mmio.c] [multimedia/mmsystem.c]
Fixed most mmio bugs, fully implementing mmioSetBuffer
buffering, ability to read memory files, and the
sndPlaySound() SND_MEMORY flag. Most mmio-using programs
now work fine.
* [include/dosexe.h] [include/miscemu.h] [include/module.h]
[loader/module.c] [loader/task.c] [msdos/dosmem.c]
Improved DOS VM flexibility and portability somewhat. (Did
I get the #ifdefs right this time, BSD-ers?)
* [msdos/int21.c]
Made "Get Current PSP address" work as expected in a DOS VM.
* [loader/dos/*]
Began improving flexibility and portability somewhat. It
should be easier to add DPMI RMCB callbacks now. The
DOS VM no longer leaves big files lying around in /tmp
after a crash.
Tue Aug 18 12:38:31 1998 Turchanov Sergey <turchanov@usa.net>
* [relay32/winmm.spec]
This patch allows WinAmp to play WAV files (at least in PCM
format).
Sun Aug 16 05:34:13 1998 Pablo Saratxaga <srtxg@chanae.alphanet.ch>
* [windows/keyboard.c]
Corrected keyboard code to properly handle keys : ? ~ and "
on non US keyboards.
Sat Aug 15 18:47:14 1998 Brian Craft <bcboy@dorothy.wanglab.brandeis.edu>
* [windows/win.c]
Fixed severe bug in EnumChildWindwos().
Thu Aug 13 21:05:35 1998 Eric Kohl <ekohl@abo.rhein-zeitung.de>
* [controls/tooltips.c]
Fixed some bugs. Added subclassing support.
* [controls/toolbar.c]
Improved tooltip integration. Fixed some bugs.
* [controls/commctrl.c]
Changed control registration and added some documentation.
Fixed ShowHideMenuCtl.
* [controls/rebar.c][include/rebar.h][include/commctrl.h]
Improved rebar implementation (still no display).
* [controls/pager.c][include/pager.h][include/commctrl.h]
Improved pager implementation (still no display).
* [misc/imagelist.c]
Fixed a bug.
* [documentation/common_controls]
Updated.
Sun Aug 9 19:50:20 1998 James Juran <jrj120@psu.edu>
* [Makefile.in] [documentation/Makefile.in]
[programs/Makefile.in] [programs/*/Makefile.in]
Added uninstall rules, cleaned up install rules a little bit.
Sun Aug 9 13:21:35 1998 Andreas Mohr <100.30936@germany.net>
* [loader/ne/module.c] [if1632/kernel.spec]
Added the undocumented HIWORD of GetModuleHandle (hFirstModule).
* [loader/ne/segment.c]
Wine forgot to set some NE_SEGFLAGS_*.
Combined with another loader change, this fixed the
"BLINKER -- error in loading module" or ghost MessageBox problem
that about 1% of all Windows programs have.
Some BLINKER programs still don't work, though.
But I'm working on it, with great help from Blinkinc.
* [loader/task.c]
InitTask needs to decrement the SP register by two as Win95 does.
Sun Aug 9 02:41:28 1998 Ulrich Weigand <weigand@informatik.uni-erlangen.de>
* [if1632/kernel.spec] [relay32/kernel32.spec] [scheduler/syslevel.c]
[loader/main.c] [win32/ordinals.c] [include/syslevel.h]
[scheduler/Makefile.in]
Implemented Win95 'syslevel' routines (including Win16Lock).
* [if1632/relay.c] [if1632/thunk.c] [tools/build.c] [loader/task.c]
[loader/ne/segment.c] [win32/kernel32.c] [memory/selector.c]
[include/stackframe.h] [include/thread.h]
16-bit %fs handling revised. Use Win16Lock where appropriate.
* [include/thread.h] [scheduler/synchro.c] [windows/message.c]
[windows/queue.c] [win32/process.c]
Implemented MsgWaitForMultipleObjects.
* [files/change.c] [files/Makefile.in] [scheduler/k32obj.c]
[win32/newfns.c]
Implemented (dummy) file change notification objects.
* [debugger/dbg.y] [scheduler/process.c] [scheduler/thread.c]
[include/process.h] [include/thread.h]
Suspend all threads except current when hitting debugger break point.
* [objects/dib.c]
Bugfix for CreateDIBSection.
1998-08-22 21:03:56 +02:00
|
|
|
#include "winerror.h"
|
2003-09-06 01:08:26 +02:00
|
|
|
#include "windef.h"
|
|
|
|
#include "winbase.h"
|
2002-09-13 00:07:02 +02:00
|
|
|
#include "winternl.h"
|
2004-04-15 02:04:05 +02:00
|
|
|
#include "kernel_private.h"
|
2011-05-12 14:23:45 +02:00
|
|
|
#include "psapi.h"
|
2002-10-23 22:20:59 +02:00
|
|
|
|
2005-08-12 18:00:42 +02:00
|
|
|
#include "wine/exception.h"
|
2017-08-29 08:16:52 +02:00
|
|
|
#include "wine/list.h"
|
2002-03-10 00:29:33 +01:00
|
|
|
#include "wine/debug.h"
|
2002-10-23 22:20:59 +02:00
|
|
|
#include "wine/unicode.h"
|
Release 950430
Sat Apr 29 20:42:01 1995 Alexandre Julliard (julliard@sunsite.unc.edu)
* [controls/static.c]
Fixed painting of SS_*FRAME controls.
* [if1632/callback.c]
Pass the window instance as DS to the 16-bit window procedure.
Rewrote Catch() and Throw() to make them work with multiple tasks.
* [loader/main.c]
New function MAIN_Init() to perform initializations before the
first task is started instead of doing them in InitApp().
Temporary hack to command-line parsing to load one program per
command-line argument, to make testing task-switching easier.
* [loader/*.c]
Reimplemented modules to use a Windows-compatible layout and to
allow multiple tasks and multiple module instances. Not really
finished yet.
* [loader/task.c] [misc/exec.c]
Reimplemented tasks to use a common address space, and implemented
preliminary task-switching capabilities.
* [memory/global.c]
Fixed bug in GlobalNext().
* [misc/main.c]
Updated the list of contributors. Let me know if I forgot someone.
* [miscemu/int21.c]
Use one DTA per task instead of a global one.
* [objects/bitblt.c]
Fixed bug in BitBlt() that could cause BadMatch errors.
* [tools/build.c]
Added new function type 'stub', that makes possible to export an
unimplemented function by name as well as by ordinal. This will
avoid loading errors for unimplemented functions.
Generate an in-memory module layout for built-in DLLs so that the
same code can be used for built-in and loaded modules.
Changed relay code to make it unnecessary to save the value of the
BP register.
* [windows/message.c]
Implemented multiple message queues and preliminary task-switching
capabilities. Inter-task SendMessage() calls are not implemented
yet and will probably cause crashes if used.
* [windows/property.c]
Reimplemented properties and allocate them on the USER heap.
* [windows/win.c]
Fixed bug in SetWindowWord().
Reimplemented EnumWindows() and EnumTaskWindows().
Tue Apr 18 09:48:38 1995 Bernd Schmidt <crux@pool.informatik.rwth-aachen.de>
* [misc/main.c]
GetSystemParametersInfo(): Additional action SPI_GETICONTITLEFONT.
* [loader/resource.c]
Removed the check for NE_SEGFLAGS_EXECUTEONLY, since it broke
control.exe.
Fixed icon loading.
* [objects/font.c] [include/windows.h]
Fixed a bug in InitFontsList() and worked on the EnumFonts()
functions to make them comprehensible.
* [controls/button.c]
Fixed my previous patch to handle LBUTTONUP messages.
Fri Apr 14 11:41:28 1995 Cameron Heide (heide@ee.ualberta.ca)
* [misc/network.c, misc/dos_fs.c]
Implemented WNetGetConnection. All that is currently
supported are drives, for which the remote name is simply
the redirected UNIX directory name.
* [miscemu/int2?.c]
More drive number validity checking.
Wed Apr 12 11:28:37 1995 Bernd Schmidt <crux@pool.informatik.rwth-aachen.de>
* [controls/listbox.c]
Oops, my previous change to ListBoxDirectory broke the Borland
file open dialog. Fixed.
Mon Apr 10 23:17:12 1995 Martin von Loewis <loewis@informatik.hu-berlin.de>
* [if1632/ole2nls.spec] [misc/ole2nls.c] [misc/Imakefile]
New file ole2nls.c. Added stubs for GetUserDefaultLCID,
GetSystemDefaultLCID, GetUserDefaultLangID, GetSystemDefaultLangID.
Mon Apr 10 10:05:18 1995 Bernd Schmidt <crux@pool.informatik.rwth-aachen.de>
* [memory/global.c] [memory/local.c] [include/windows.h]
GlobalReAlloc(): If GMEM_MODIFY is set, don't resize the block.
LocalReAlloc(): Same for LMEM_MODIFY.
* [controls/listbox.c]
Fixed a bug in ListBoxDirectory that prevented commdlg from working.
Check for errors in some more places.
* [if1632/gdi.spec] [if1632/user.spec]
16 bit callback functions should be passed as segptrs.
* [include/dlls.h] [loader/ne_image.c] [loader/selector.c]
[loader/library.c]
Prevent a DLL from being initialized twice (Borlands Resource
Workshop used to do this).
Provide an additional flag for each w_file that indicates whether
it's an EXE or a DLL, for combinations like pbrush.exe/.dll.
* [controls/button.c]
Handle LBUTTONUP messages even if the button no longer has the
capture (for WinHelp).
* [include/wintypes.h]
FARPROC is now a segptr for the emulator and a function
pointer for the library.
* [misc/commdlg.c] [misc/commdlg.h]
Cleaned the file dialogs up a little. They now work reasonably well,
although there are still some problems (e.g. files are initially
invisible).
* [windows/class.c] [if1632/user.spec] [include/windows.h]
GetClassInfo() must take a segptr, as it checks whether the
highword is zero.
GetClassName() called the wrong atom function. No surprise it didn't
find anything.
* [misc/lstr.c]
AnsiToOem() and OemToAnsi() didn't terminate the strings. Fixed.
Removed some warnings.
* [if1632/relay.c] [if1632/ddeml.spec] [include/dlls.h]
New spec file for the 3.1 DDEML DDL.
* [controls/menu.c]
Small fix to ChangeMenu - mask out the obsolete flags
(MF_APPEND == MF_OWNERDRAW, this led to problems). It also had
problems with the MF_BYPOSITION flag.
* [windows/message.c]
SendMessage(): call the WH_CALLWNDPROC hook function. This is rather
ugly, I'm afraid. Windows probably passes a pointer to the 16 bit
stack for speed reasons.
* [windows/hook.c] [include/windows.h]
Set/HookWindowsHook() shouldn't just call their *Ex counterparts, as
they have slightly different semantics.
MS Hearts now works somewhat, if you disable the new builtin DDEML.
The graphics are completely messed up, though.
1995-04-30 12:05:20 +02:00
|
|
|
|
2002-03-10 00:29:33 +01:00
|
|
|
WINE_DEFAULT_DEBUG_CHANNEL(module);
|
2003-03-18 21:07:12 +01:00
|
|
|
|
2009-12-28 22:19:31 +01:00
|
|
|
#define NE_FFLAGS_LIBMODULE 0x8000
|
|
|
|
|
2017-08-29 08:16:52 +02:00
|
|
|
struct dll_dir_entry
|
|
|
|
{
|
|
|
|
struct list entry;
|
|
|
|
WCHAR dir[1];
|
|
|
|
};
|
|
|
|
|
|
|
|
static struct list dll_dir_list = LIST_INIT( dll_dir_list ); /* extra dirs from AddDllDirectory */
|
2005-08-02 16:56:53 +02:00
|
|
|
static WCHAR *dll_directory; /* extra path for SetDllDirectoryW */
|
2017-08-28 13:29:09 +02:00
|
|
|
static DWORD default_search_flags; /* default flags set by SetDefaultDllDirectories */
|
2005-08-02 16:56:53 +02:00
|
|
|
|
2018-03-01 17:21:32 +01:00
|
|
|
/* to keep track of LOAD_LIBRARY_AS_DATAFILE_EXCLUSIVE file handles */
|
|
|
|
struct exclusive_datafile
|
|
|
|
{
|
|
|
|
struct list entry;
|
|
|
|
HMODULE module;
|
|
|
|
HANDLE file;
|
|
|
|
};
|
|
|
|
static struct list exclusive_datafile_list = LIST_INIT( exclusive_datafile_list );
|
|
|
|
|
2005-08-02 16:56:53 +02:00
|
|
|
static CRITICAL_SECTION dlldir_section;
|
|
|
|
static CRITICAL_SECTION_DEBUG critsect_debug =
|
|
|
|
{
|
|
|
|
0, 0, &dlldir_section,
|
|
|
|
{ &critsect_debug.ProcessLocksList, &critsect_debug.ProcessLocksList },
|
2005-09-09 12:19:44 +02:00
|
|
|
0, 0, { (DWORD_PTR)(__FILE__ ": dlldir_section") }
|
2005-08-02 16:56:53 +02:00
|
|
|
};
|
|
|
|
static CRITICAL_SECTION dlldir_section = { &critsect_debug, -1, 0, 0, 0, 0 };
|
|
|
|
|
|
|
|
/****************************************************************************
|
|
|
|
* GetDllDirectoryA (KERNEL32.@)
|
|
|
|
*/
|
|
|
|
DWORD WINAPI GetDllDirectoryA( DWORD buf_len, LPSTR buffer )
|
|
|
|
{
|
|
|
|
DWORD len;
|
|
|
|
|
|
|
|
RtlEnterCriticalSection( &dlldir_section );
|
|
|
|
len = dll_directory ? FILE_name_WtoA( dll_directory, strlenW(dll_directory), NULL, 0 ) : 0;
|
|
|
|
if (buffer && buf_len > len)
|
|
|
|
{
|
|
|
|
if (dll_directory) FILE_name_WtoA( dll_directory, -1, buffer, buf_len );
|
|
|
|
else *buffer = 0;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
len++; /* for terminating null */
|
|
|
|
if (buffer) *buffer = 0;
|
|
|
|
}
|
|
|
|
RtlLeaveCriticalSection( &dlldir_section );
|
|
|
|
return len;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/****************************************************************************
|
|
|
|
* GetDllDirectoryW (KERNEL32.@)
|
|
|
|
*/
|
|
|
|
DWORD WINAPI GetDllDirectoryW( DWORD buf_len, LPWSTR buffer )
|
|
|
|
{
|
|
|
|
DWORD len;
|
|
|
|
|
|
|
|
RtlEnterCriticalSection( &dlldir_section );
|
|
|
|
len = dll_directory ? strlenW( dll_directory ) : 0;
|
|
|
|
if (buffer && buf_len > len)
|
|
|
|
{
|
|
|
|
if (dll_directory) memcpy( buffer, dll_directory, (len + 1) * sizeof(WCHAR) );
|
|
|
|
else *buffer = 0;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
len++; /* for terminating null */
|
|
|
|
if (buffer) *buffer = 0;
|
|
|
|
}
|
|
|
|
RtlLeaveCriticalSection( &dlldir_section );
|
|
|
|
return len;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/****************************************************************************
|
|
|
|
* SetDllDirectoryA (KERNEL32.@)
|
|
|
|
*/
|
|
|
|
BOOL WINAPI SetDllDirectoryA( LPCSTR dir )
|
|
|
|
{
|
|
|
|
WCHAR *dirW;
|
|
|
|
BOOL ret;
|
|
|
|
|
|
|
|
if (!(dirW = FILE_name_AtoW( dir, TRUE ))) return FALSE;
|
|
|
|
ret = SetDllDirectoryW( dirW );
|
|
|
|
HeapFree( GetProcessHeap(), 0, dirW );
|
|
|
|
return ret;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/****************************************************************************
|
|
|
|
* SetDllDirectoryW (KERNEL32.@)
|
|
|
|
*/
|
|
|
|
BOOL WINAPI SetDllDirectoryW( LPCWSTR dir )
|
|
|
|
{
|
|
|
|
WCHAR *newdir = NULL;
|
|
|
|
|
|
|
|
if (dir)
|
|
|
|
{
|
|
|
|
DWORD len = (strlenW(dir) + 1) * sizeof(WCHAR);
|
|
|
|
if (!(newdir = HeapAlloc( GetProcessHeap(), 0, len )))
|
|
|
|
{
|
|
|
|
SetLastError( ERROR_NOT_ENOUGH_MEMORY );
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
memcpy( newdir, dir, len );
|
|
|
|
}
|
|
|
|
|
|
|
|
RtlEnterCriticalSection( &dlldir_section );
|
|
|
|
HeapFree( GetProcessHeap(), 0, dll_directory );
|
|
|
|
dll_directory = newdir;
|
|
|
|
RtlLeaveCriticalSection( &dlldir_section );
|
2017-08-29 08:16:52 +02:00
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/****************************************************************************
|
|
|
|
* AddDllDirectory (KERNEL32.@)
|
|
|
|
*/
|
|
|
|
DLL_DIRECTORY_COOKIE WINAPI AddDllDirectory( const WCHAR *dir )
|
|
|
|
{
|
|
|
|
WCHAR path[MAX_PATH];
|
|
|
|
DWORD len;
|
|
|
|
struct dll_dir_entry *ptr;
|
|
|
|
DOS_PATHNAME_TYPE type = RtlDetermineDosPathNameType_U( dir );
|
|
|
|
|
|
|
|
if (type != ABSOLUTE_PATH && type != ABSOLUTE_DRIVE_PATH)
|
|
|
|
{
|
|
|
|
SetLastError( ERROR_INVALID_PARAMETER );
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
if (!(len = GetFullPathNameW( dir, MAX_PATH, path, NULL ))) return NULL;
|
|
|
|
if (GetFileAttributesW( path ) == INVALID_FILE_ATTRIBUTES) return NULL;
|
|
|
|
|
|
|
|
if (!(ptr = HeapAlloc( GetProcessHeap(), 0, offsetof(struct dll_dir_entry, dir[++len] )))) return NULL;
|
|
|
|
memcpy( ptr->dir, path, len * sizeof(WCHAR) );
|
|
|
|
TRACE( "%s\n", debugstr_w( ptr->dir ));
|
|
|
|
|
|
|
|
RtlEnterCriticalSection( &dlldir_section );
|
|
|
|
list_add_head( &dll_dir_list, &ptr->entry );
|
|
|
|
RtlLeaveCriticalSection( &dlldir_section );
|
|
|
|
return ptr;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/****************************************************************************
|
|
|
|
* RemoveDllDirectory (KERNEL32.@)
|
|
|
|
*/
|
|
|
|
BOOL WINAPI RemoveDllDirectory( DLL_DIRECTORY_COOKIE cookie )
|
|
|
|
{
|
|
|
|
struct dll_dir_entry *ptr = cookie;
|
|
|
|
|
|
|
|
TRACE( "%s\n", debugstr_w( ptr->dir ));
|
|
|
|
|
|
|
|
RtlEnterCriticalSection( &dlldir_section );
|
|
|
|
list_remove( &ptr->entry );
|
|
|
|
HeapFree( GetProcessHeap(), 0, ptr );
|
|
|
|
RtlLeaveCriticalSection( &dlldir_section );
|
2005-08-02 16:56:53 +02:00
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2017-08-28 13:29:09 +02:00
|
|
|
/*************************************************************************
|
|
|
|
* SetDefaultDllDirectories (KERNEL32.@)
|
|
|
|
*/
|
|
|
|
BOOL WINAPI SetDefaultDllDirectories( DWORD flags )
|
|
|
|
{
|
2017-08-29 09:37:06 +02:00
|
|
|
/* LOAD_LIBRARY_SEARCH_DLL_LOAD_DIR doesn't make sense in default dirs */
|
|
|
|
const DWORD load_library_search_flags = (LOAD_LIBRARY_SEARCH_APPLICATION_DIR |
|
|
|
|
LOAD_LIBRARY_SEARCH_USER_DIRS |
|
|
|
|
LOAD_LIBRARY_SEARCH_SYSTEM32 |
|
|
|
|
LOAD_LIBRARY_SEARCH_DEFAULT_DIRS);
|
|
|
|
|
2017-08-28 13:29:09 +02:00
|
|
|
if (!flags || (flags & ~load_library_search_flags))
|
|
|
|
{
|
|
|
|
SetLastError( ERROR_INVALID_PARAMETER );
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
default_search_flags = flags;
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
1999-03-27 17:45:57 +01:00
|
|
|
/****************************************************************************
|
2001-06-13 22:13:18 +02:00
|
|
|
* DisableThreadLibraryCalls (KERNEL32.@)
|
1999-04-18 14:14:06 +02:00
|
|
|
*
|
2003-10-01 05:20:21 +02:00
|
|
|
* Inform the module loader that thread notifications are not required for a dll.
|
|
|
|
*
|
|
|
|
* PARAMS
|
|
|
|
* hModule [I] Module handle to skip calls for
|
|
|
|
*
|
|
|
|
* RETURNS
|
|
|
|
* Success: TRUE. Thread attach and detach notifications will not be sent
|
|
|
|
* to hModule.
|
|
|
|
* Failure: FALSE. Use GetLastError() to determine the cause.
|
|
|
|
*
|
|
|
|
* NOTES
|
|
|
|
* This is typically called from the dll entry point of a dll during process
|
|
|
|
* attachment, for dlls that do not need to process thread notifications.
|
1999-03-27 17:45:57 +01:00
|
|
|
*/
|
1999-04-18 14:14:06 +02:00
|
|
|
BOOL WINAPI DisableThreadLibraryCalls( HMODULE hModule )
|
1999-03-27 17:45:57 +01:00
|
|
|
{
|
2003-03-04 05:36:56 +01:00
|
|
|
NTSTATUS nts = LdrDisableThreadCalloutsForDll( hModule );
|
|
|
|
if (nts == STATUS_SUCCESS) return TRUE;
|
1999-03-27 17:45:57 +01:00
|
|
|
|
2003-03-04 05:36:56 +01:00
|
|
|
SetLastError( RtlNtStatusToDosError( nts ) );
|
|
|
|
return FALSE;
|
1999-03-27 17:45:57 +01:00
|
|
|
}
|
|
|
|
|
Release 950606
Tue Jun 6 12:11:41 1995 Alexandre Julliard (julliard@sunsite.unc.edu)
* [controls/menu.c]
Fixed bug with drawing multi-column menus with vertical separator.
* [debugger/debug.l]
Fixed NULL-pointer reference after readline().
* [if1632/winprocs.spec] [miscemu/int21.c] [miscemu/interrupts.c]
Added interrupt vector emulation. Allows to retrieve an interrupt
vector and jump to it without crashing.
* [loader/ldt.c]
Moved ldt.c to memory directory.
* [loader/task.c]
Implemented LockCurrentTask() and GetInstanceData().
* [objects/bitblt.c]
Fixed a bug that caused StretchBlt() to use wrong colors when
stretching a monochrome bitmap to a color display.
* [objects/bitmap.c]
Fixed a segmented pointer bug in CreateBitmapIndirect().
* [tools/build.c]
Added possibility to have arguments for register functions; used
by interrupt vectors to remove the flags from the stack.
Generate a new function CallTo32_LargeStack(), that allows calling
a 32-bit function using the original 32-bit stack, for functions
that need more that 64k of stack.
Tue May 30 10:29:56 1995 Martin von Loewis <martin@informatik.hu-berlin.de>
* [if1632/shell.spec] [misc/shell.c]
DoEnvironmentSubst: fixed prototype
* [if1632/gdi.spec] [objects/palette.c]
SetSystemPaletteUse: new function
* [if1632/kernel.spec] [loader/resource.c]
DirectResAlloc: new function
* [if1632/user.spec] [windows/keyboard.c]
SetKeyboardState: new function
Mon May 29 12:58:28 1995 Bernd Schmidt <crux@pool.informatik.rwth-aachen.de>
* [tools/build.c]
Prevent interrupts from destroying the args for a 32 bit function
by loading the correct value into %esp directly after %ss.
* [loader/ne_image.c] [loader/module.c]
The new instance must be created earlier in LoadModule(), so that
fixups referencing it will be handled correctly.
Initialize the local heap for a DGROUP in NE_LoadSegment().
* [objects/dib.c]
Like RLE8 bitmaps, RLE4 bitmaps don't always end with a proper code.
This used to crash Wine. Fixed.
* [objects/text.c]
Fix possible null pointer dereference in debugging output.
* [misc/commdlg.c]
Handle user input in the edit control better. Some bugs fixed.
* [memory/local.c]
Started implementing moveable blocks. This is unfinished (!), but
at least it does not seem to break things.
Wed May 24 13:26:36 1995 Bernd Schmidt <crux@pool.informatik.rwth-aachen.de>
* [loader/module.c]
LoadModule(): DLLs occasionally have a data segment, and they work
much better if it is loaded :-)
LoadLibrary(): pass HMODULE instead of HINSTANCE to NE_InitializeDLLs.
FindModule(): also strip off the last backslash of the pathnames
(Winhelp tried to load C:\WINDOWS\SYSTEM\COMMDLG.DLL).
GetModuleHandle(): just call MODULE_FindModule, it does the same job,
only better.
* [loader/ne_image.c]
LocalInit() the heap of a DLL in NE_InitDLL. (This is probably
not really correct, it seems that all programs and DLLs try to do
this themselves. But they pass weird parameters.)
NE_InitializeDLLs should also call NE_InitDLL for the passed hModule.
* [loader/task.c] [misc/user.c]
Finish global initializations in InitTask instead of InitApp, or
all the DLLs will be initialized in InitTask without any available
window classes!
1995-06-06 18:40:35 +02:00
|
|
|
|
2000-07-26 20:02:28 +02:00
|
|
|
/* Check whether a file is an OS/2 or a very old Windows executable
|
|
|
|
* by testing on import of KERNEL.
|
|
|
|
*
|
2017-12-13 11:21:00 +01:00
|
|
|
* Reading the module imports is the only reasonable way of discerning
|
|
|
|
* old Windows binaries from OS/2 ones.
|
2000-07-26 20:02:28 +02:00
|
|
|
*/
|
2009-08-12 15:43:08 +02:00
|
|
|
static DWORD MODULE_Decide_OS2_OldWin(HANDLE hfile, const IMAGE_DOS_HEADER *mz, const IMAGE_OS2_HEADER *ne)
|
2000-07-26 20:02:28 +02:00
|
|
|
{
|
|
|
|
DWORD currpos = SetFilePointer( hfile, 0, NULL, SEEK_CUR);
|
2009-08-12 15:43:08 +02:00
|
|
|
DWORD ret = BINARY_OS216;
|
2000-07-26 20:02:28 +02:00
|
|
|
LPWORD modtab = NULL;
|
|
|
|
LPSTR nametab = NULL;
|
|
|
|
DWORD len;
|
|
|
|
int i;
|
|
|
|
|
|
|
|
/* read modref table */
|
|
|
|
if ( (SetFilePointer( hfile, mz->e_lfanew + ne->ne_modtab, NULL, SEEK_SET ) == -1)
|
|
|
|
|| (!(modtab = HeapAlloc( GetProcessHeap(), 0, ne->ne_cmod*sizeof(WORD))))
|
|
|
|
|| (!(ReadFile(hfile, modtab, ne->ne_cmod*sizeof(WORD), &len, NULL)))
|
|
|
|
|| (len != ne->ne_cmod*sizeof(WORD)) )
|
2017-12-13 11:21:00 +01:00
|
|
|
goto done;
|
2000-07-26 20:02:28 +02:00
|
|
|
|
|
|
|
/* read imported names table */
|
|
|
|
if ( (SetFilePointer( hfile, mz->e_lfanew + ne->ne_imptab, NULL, SEEK_SET ) == -1)
|
|
|
|
|| (!(nametab = HeapAlloc( GetProcessHeap(), 0, ne->ne_enttab - ne->ne_imptab)))
|
|
|
|
|| (!(ReadFile(hfile, nametab, ne->ne_enttab - ne->ne_imptab, &len, NULL)))
|
|
|
|
|| (len != ne->ne_enttab - ne->ne_imptab) )
|
2017-12-13 11:21:00 +01:00
|
|
|
goto done;
|
2000-07-26 20:02:28 +02:00
|
|
|
|
|
|
|
for (i=0; i < ne->ne_cmod; i++)
|
|
|
|
{
|
2017-12-13 11:21:00 +01:00
|
|
|
LPSTR module = &nametab[modtab[i]];
|
|
|
|
TRACE("modref: %.*s\n", module[0], &module[1]);
|
|
|
|
if (!(strncmp(&module[1], "KERNEL", module[0])))
|
|
|
|
{ /* very old Windows file */
|
|
|
|
MESSAGE("This seems to be a very old (pre-3.0) Windows executable. Expect crashes, especially if this is a real-mode binary !\n");
|
2002-05-22 23:32:49 +02:00
|
|
|
ret = BINARY_WIN16;
|
2017-12-13 11:21:00 +01:00
|
|
|
break;
|
|
|
|
}
|
2000-07-26 20:02:28 +02:00
|
|
|
}
|
|
|
|
|
2017-12-13 11:21:00 +01:00
|
|
|
done:
|
2000-07-26 20:02:28 +02:00
|
|
|
HeapFree( GetProcessHeap(), 0, modtab);
|
|
|
|
HeapFree( GetProcessHeap(), 0, nametab);
|
|
|
|
SetFilePointer( hfile, currpos, NULL, SEEK_SET); /* restore filepos */
|
2002-05-22 23:32:49 +02:00
|
|
|
return ret;
|
2000-07-26 20:02:28 +02:00
|
|
|
}
|
|
|
|
|
1999-02-28 12:14:32 +01:00
|
|
|
/***********************************************************************
|
|
|
|
* MODULE_GetBinaryType
|
2002-05-22 23:32:49 +02:00
|
|
|
*/
|
2009-10-27 19:30:30 +01:00
|
|
|
void MODULE_get_binary_info( HANDLE hfile, struct binary_info *info )
|
2002-05-22 23:32:49 +02:00
|
|
|
{
|
|
|
|
union
|
|
|
|
{
|
|
|
|
struct
|
|
|
|
{
|
|
|
|
unsigned char magic[4];
|
2009-08-12 15:50:47 +02:00
|
|
|
unsigned char class;
|
|
|
|
unsigned char data;
|
2017-12-18 11:16:13 +01:00
|
|
|
unsigned char ignored1[10];
|
2002-05-22 23:32:49 +02:00
|
|
|
unsigned short type;
|
2009-08-12 15:50:47 +02:00
|
|
|
unsigned short machine;
|
2017-12-18 11:16:13 +01:00
|
|
|
unsigned char ignored2[8];
|
|
|
|
unsigned int phoff;
|
|
|
|
unsigned char ignored3[12];
|
|
|
|
unsigned short phnum;
|
2002-05-22 23:32:49 +02:00
|
|
|
} elf;
|
2003-07-21 22:02:50 +02:00
|
|
|
struct
|
2017-12-18 11:16:13 +01:00
|
|
|
{
|
|
|
|
unsigned char magic[4];
|
|
|
|
unsigned char class;
|
|
|
|
unsigned char data;
|
|
|
|
unsigned char ignored1[10];
|
|
|
|
unsigned short type;
|
|
|
|
unsigned short machine;
|
|
|
|
unsigned char ignored2[12];
|
|
|
|
unsigned __int64 phoff;
|
|
|
|
unsigned char ignored3[16];
|
|
|
|
unsigned short phnum;
|
|
|
|
} elf64;
|
|
|
|
struct
|
2003-07-21 22:02:50 +02:00
|
|
|
{
|
2009-08-12 15:50:47 +02:00
|
|
|
unsigned int magic;
|
|
|
|
unsigned int cputype;
|
|
|
|
unsigned int cpusubtype;
|
|
|
|
unsigned int filetype;
|
2003-07-21 22:02:50 +02:00
|
|
|
} macho;
|
2002-05-22 23:32:49 +02:00
|
|
|
IMAGE_DOS_HEADER mz;
|
|
|
|
} header;
|
|
|
|
|
|
|
|
DWORD len;
|
|
|
|
|
2009-10-27 19:30:30 +01:00
|
|
|
memset( info, 0, sizeof(*info) );
|
|
|
|
|
2002-05-22 23:32:49 +02:00
|
|
|
/* Seek to the start of the file and read the header information. */
|
2009-10-27 19:30:30 +01:00
|
|
|
if (SetFilePointer( hfile, 0, NULL, SEEK_SET ) == -1) return;
|
|
|
|
if (!ReadFile( hfile, &header, sizeof(header), &len, NULL ) || len != sizeof(header)) return;
|
2002-05-22 23:32:49 +02:00
|
|
|
|
|
|
|
if (!memcmp( header.elf.magic, "\177ELF", 4 ))
|
|
|
|
{
|
2013-11-22 12:18:31 +01:00
|
|
|
#ifdef WORDS_BIGENDIAN
|
2017-12-18 11:16:13 +01:00
|
|
|
BOOL byteswap = (header.elf.data == 1);
|
2013-11-22 12:18:31 +01:00
|
|
|
#else
|
2017-12-18 11:16:13 +01:00
|
|
|
BOOL byteswap = (header.elf.data == 2);
|
2013-11-22 12:18:31 +01:00
|
|
|
#endif
|
2017-12-18 11:16:13 +01:00
|
|
|
if (header.elf.class == 2) info->flags |= BINARY_FLAG_64BIT;
|
|
|
|
if (byteswap)
|
2013-11-22 12:18:31 +01:00
|
|
|
{
|
|
|
|
header.elf.type = RtlUshortByteSwap( header.elf.type );
|
|
|
|
header.elf.machine = RtlUshortByteSwap( header.elf.machine );
|
|
|
|
}
|
2002-05-22 23:32:49 +02:00
|
|
|
switch(header.elf.type)
|
|
|
|
{
|
2017-12-18 11:16:13 +01:00
|
|
|
case 2:
|
|
|
|
info->type = BINARY_UNIX_EXE;
|
|
|
|
break;
|
|
|
|
case 3:
|
|
|
|
{
|
|
|
|
LARGE_INTEGER phoff;
|
|
|
|
unsigned short phnum;
|
|
|
|
unsigned int type;
|
|
|
|
if (header.elf.class == 2)
|
|
|
|
{
|
|
|
|
phoff.QuadPart = byteswap ? RtlUlonglongByteSwap( header.elf64.phoff ) : header.elf64.phoff;
|
|
|
|
phnum = byteswap ? RtlUshortByteSwap( header.elf64.phnum ) : header.elf64.phnum;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
phoff.QuadPart = byteswap ? RtlUlongByteSwap( header.elf.phoff ) : header.elf.phoff;
|
|
|
|
phnum = byteswap ? RtlUshortByteSwap( header.elf.phnum ) : header.elf.phnum;
|
|
|
|
}
|
|
|
|
while (phnum--)
|
|
|
|
{
|
|
|
|
if (SetFilePointerEx( hfile, phoff, NULL, FILE_BEGIN ) == -1) return;
|
|
|
|
if (!ReadFile( hfile, &type, sizeof(type), &len, NULL ) || len < sizeof(type)) return;
|
|
|
|
if (byteswap) type = RtlUlongByteSwap( type );
|
|
|
|
if (type == 3)
|
|
|
|
{
|
|
|
|
info->type = BINARY_UNIX_EXE;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
phoff.QuadPart += (header.elf.class == 2) ? 56 : 32;
|
|
|
|
}
|
|
|
|
if (!info->type) info->type = BINARY_UNIX_LIB;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
default:
|
|
|
|
return;
|
2002-05-22 23:32:49 +02:00
|
|
|
}
|
2013-11-22 12:18:31 +01:00
|
|
|
switch(header.elf.machine)
|
|
|
|
{
|
|
|
|
case 3: info->arch = IMAGE_FILE_MACHINE_I386; break;
|
|
|
|
case 20: info->arch = IMAGE_FILE_MACHINE_POWERPC; break;
|
|
|
|
case 40: info->arch = IMAGE_FILE_MACHINE_ARMNT; break;
|
|
|
|
case 50: info->arch = IMAGE_FILE_MACHINE_IA64; break;
|
|
|
|
case 62: info->arch = IMAGE_FILE_MACHINE_AMD64; break;
|
|
|
|
case 183: info->arch = IMAGE_FILE_MACHINE_ARM64; break;
|
|
|
|
}
|
2002-05-22 23:32:49 +02:00
|
|
|
}
|
2004-09-10 23:16:02 +02:00
|
|
|
/* Mach-o File with Endian set to Big Endian or Little Endian */
|
2015-01-23 07:30:55 +01:00
|
|
|
else if (header.macho.magic == 0xfeedface || header.macho.magic == 0xcefaedfe ||
|
|
|
|
header.macho.magic == 0xfeedfacf || header.macho.magic == 0xcffaedfe)
|
2003-07-21 22:02:50 +02:00
|
|
|
{
|
2009-10-27 19:30:30 +01:00
|
|
|
if ((header.macho.cputype >> 24) == 1) info->flags |= BINARY_FLAG_64BIT;
|
2015-01-23 07:30:55 +01:00
|
|
|
if (header.macho.magic == 0xcefaedfe || header.macho.magic == 0xcffaedfe)
|
2013-11-22 12:18:31 +01:00
|
|
|
{
|
|
|
|
header.macho.filetype = RtlUlongByteSwap( header.macho.filetype );
|
|
|
|
header.macho.cputype = RtlUlongByteSwap( header.macho.cputype );
|
|
|
|
}
|
2003-07-21 22:02:50 +02:00
|
|
|
switch(header.macho.filetype)
|
|
|
|
{
|
2009-10-27 19:30:30 +01:00
|
|
|
case 2: info->type = BINARY_UNIX_EXE; break;
|
|
|
|
case 8: info->type = BINARY_UNIX_LIB; break;
|
2003-07-21 22:02:50 +02:00
|
|
|
}
|
2013-11-22 12:18:31 +01:00
|
|
|
switch(header.macho.cputype)
|
|
|
|
{
|
|
|
|
case 0x00000007: info->arch = IMAGE_FILE_MACHINE_I386; break;
|
|
|
|
case 0x01000007: info->arch = IMAGE_FILE_MACHINE_AMD64; break;
|
|
|
|
case 0x0000000c: info->arch = IMAGE_FILE_MACHINE_ARMNT; break;
|
|
|
|
case 0x0100000c: info->arch = IMAGE_FILE_MACHINE_ARM64; break;
|
|
|
|
case 0x00000012: info->arch = IMAGE_FILE_MACHINE_POWERPC; break;
|
|
|
|
}
|
2003-07-21 22:02:50 +02:00
|
|
|
}
|
2002-05-22 23:32:49 +02:00
|
|
|
/* Not ELF, try DOS */
|
2009-10-27 19:30:30 +01:00
|
|
|
else if (header.mz.e_magic == IMAGE_DOS_SIGNATURE)
|
2002-05-22 23:32:49 +02:00
|
|
|
{
|
2004-06-03 02:25:08 +02:00
|
|
|
union
|
|
|
|
{
|
|
|
|
IMAGE_OS2_HEADER os2;
|
2009-08-12 15:47:57 +02:00
|
|
|
IMAGE_NT_HEADERS32 nt;
|
2017-10-23 11:35:24 +02:00
|
|
|
IMAGE_NT_HEADERS64 nt64;
|
2004-06-03 02:25:08 +02:00
|
|
|
} ext_header;
|
|
|
|
|
2002-05-22 23:32:49 +02:00
|
|
|
/* We do have a DOS image so we will now try to seek into
|
|
|
|
* the file by the amount indicated by the field
|
|
|
|
* "Offset to extended header" and read in the
|
|
|
|
* "magic" field information at that location.
|
|
|
|
* This will tell us if there is more header information
|
|
|
|
* to read or not.
|
|
|
|
*/
|
2009-10-27 19:30:30 +01:00
|
|
|
info->type = BINARY_DOS;
|
2013-11-22 12:18:31 +01:00
|
|
|
info->arch = IMAGE_FILE_MACHINE_I386;
|
2009-10-27 19:30:30 +01:00
|
|
|
if (SetFilePointer( hfile, header.mz.e_lfanew, NULL, SEEK_SET ) == -1) return;
|
|
|
|
if (!ReadFile( hfile, &ext_header, sizeof(ext_header), &len, NULL ) || len < 4) return;
|
2002-05-22 23:32:49 +02:00
|
|
|
|
|
|
|
/* Reading the magic field succeeded so
|
|
|
|
* we will try to determine what type it is.
|
|
|
|
*/
|
2004-06-03 02:25:08 +02:00
|
|
|
if (!memcmp( &ext_header.nt.Signature, "PE\0\0", 4 ))
|
2002-05-22 23:32:49 +02:00
|
|
|
{
|
2004-06-03 02:25:08 +02:00
|
|
|
if (len >= sizeof(ext_header.nt.FileHeader))
|
2002-05-22 23:32:49 +02:00
|
|
|
{
|
2014-08-22 12:44:24 +02:00
|
|
|
static const char fakedll_signature[] = "Wine placeholder DLL";
|
|
|
|
char buffer[sizeof(fakedll_signature)];
|
|
|
|
|
2009-10-27 19:30:30 +01:00
|
|
|
info->type = BINARY_PE;
|
2013-11-22 12:18:31 +01:00
|
|
|
info->arch = ext_header.nt.FileHeader.Machine;
|
2009-10-27 19:30:30 +01:00
|
|
|
if (ext_header.nt.FileHeader.Characteristics & IMAGE_FILE_DLL)
|
|
|
|
info->flags |= BINARY_FLAG_DLL;
|
2017-10-23 11:35:24 +02:00
|
|
|
if (len < sizeof(ext_header)) /* clear remaining part of header if missing */
|
|
|
|
memset( (char *)&ext_header + len, 0, sizeof(ext_header) - len );
|
2009-08-12 15:47:57 +02:00
|
|
|
switch (ext_header.nt.OptionalHeader.Magic)
|
|
|
|
{
|
|
|
|
case IMAGE_NT_OPTIONAL_HDR32_MAGIC:
|
2017-10-23 11:35:24 +02:00
|
|
|
info->res_start = ext_header.nt.OptionalHeader.ImageBase;
|
|
|
|
info->res_end = info->res_start + ext_header.nt.OptionalHeader.SizeOfImage;
|
2009-10-27 19:30:30 +01:00
|
|
|
break;
|
2009-08-12 15:47:57 +02:00
|
|
|
case IMAGE_NT_OPTIONAL_HDR64_MAGIC:
|
2017-10-23 11:35:24 +02:00
|
|
|
info->res_start = ext_header.nt64.OptionalHeader.ImageBase;
|
|
|
|
info->res_end = info->res_start + ext_header.nt64.OptionalHeader.SizeOfImage;
|
2009-10-27 19:30:30 +01:00
|
|
|
info->flags |= BINARY_FLAG_64BIT;
|
|
|
|
break;
|
2009-08-12 15:47:57 +02:00
|
|
|
}
|
2014-08-22 12:44:24 +02:00
|
|
|
|
|
|
|
if (header.mz.e_lfanew >= sizeof(header.mz) + sizeof(fakedll_signature) &&
|
|
|
|
SetFilePointer( hfile, sizeof(header.mz), NULL, SEEK_SET ) == sizeof(header.mz) &&
|
|
|
|
ReadFile( hfile, buffer, sizeof(fakedll_signature), &len, NULL ) &&
|
|
|
|
len == sizeof(fakedll_signature) &&
|
|
|
|
!memcmp( buffer, fakedll_signature, sizeof(fakedll_signature) ))
|
|
|
|
{
|
|
|
|
info->flags |= BINARY_FLAG_FAKEDLL;
|
|
|
|
}
|
2002-05-22 23:32:49 +02:00
|
|
|
}
|
|
|
|
}
|
2009-10-27 19:30:30 +01:00
|
|
|
else if (!memcmp( &ext_header.os2.ne_magic, "NE", 2 ))
|
2002-05-22 23:32:49 +02:00
|
|
|
{
|
|
|
|
/* This is a Windows executable (NE) header. This can
|
|
|
|
* mean either a 16-bit OS/2 or a 16-bit Windows or even a
|
|
|
|
* DOS program (running under a DOS extender). To decide
|
|
|
|
* which, we'll have to read the NE header.
|
|
|
|
*/
|
2004-06-03 02:25:08 +02:00
|
|
|
if (len >= sizeof(ext_header.os2))
|
2002-05-22 23:32:49 +02:00
|
|
|
{
|
2009-10-27 19:30:30 +01:00
|
|
|
if (ext_header.os2.ne_flags & NE_FFLAGS_LIBMODULE) info->flags |= BINARY_FLAG_DLL;
|
2004-06-03 02:25:08 +02:00
|
|
|
switch ( ext_header.os2.ne_exetyp )
|
2002-05-22 23:32:49 +02:00
|
|
|
{
|
2009-10-27 19:30:30 +01:00
|
|
|
case 1: info->type = BINARY_OS216; break; /* OS/2 */
|
|
|
|
case 2: info->type = BINARY_WIN16; break; /* Windows */
|
|
|
|
case 3: info->type = BINARY_DOS; break; /* European MS-DOS 4.x */
|
|
|
|
case 4: info->type = BINARY_WIN16; break; /* Windows 386; FIXME: is this 32bit??? */
|
|
|
|
case 5: info->type = BINARY_DOS; break; /* BOSS, Borland Operating System Services */
|
2004-09-10 23:16:02 +02:00
|
|
|
/* other types, e.g. 0 is: "unknown" */
|
2009-10-27 19:30:30 +01:00
|
|
|
default: info->type = MODULE_Decide_OS2_OldWin(hfile, &header.mz, &ext_header.os2); break;
|
2002-05-22 23:32:49 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/***********************************************************************
|
2003-10-14 03:16:59 +02:00
|
|
|
* GetBinaryTypeW [KERNEL32.@]
|
1999-02-28 12:14:32 +01:00
|
|
|
*
|
2003-10-01 05:20:21 +02:00
|
|
|
* Determine whether a file is executable, and if so, what kind.
|
|
|
|
*
|
|
|
|
* PARAMS
|
|
|
|
* lpApplicationName [I] Path of the file to check
|
|
|
|
* lpBinaryType [O] Destination for the binary type
|
|
|
|
*
|
|
|
|
* RETURNS
|
|
|
|
* TRUE, if the file is an executable, in which case lpBinaryType is set.
|
|
|
|
* FALSE, if the file is not an executable or if the function fails.
|
|
|
|
*
|
|
|
|
* NOTES
|
2008-05-06 20:01:59 +02:00
|
|
|
* The type of executable is a property that determines which subsystem an
|
2003-10-01 05:20:21 +02:00
|
|
|
* executable file runs under. lpBinaryType can be set to one of the following
|
|
|
|
* values:
|
|
|
|
* SCS_32BIT_BINARY: A Win32 based application
|
2010-10-27 19:49:13 +02:00
|
|
|
* SCS_64BIT_BINARY: A Win64 based application
|
2003-10-01 05:20:21 +02:00
|
|
|
* SCS_DOS_BINARY: An MS-Dos based application
|
|
|
|
* SCS_WOW_BINARY: A Win16 based application
|
|
|
|
* SCS_PIF_BINARY: A PIF file that executes an MS-Dos based app
|
|
|
|
* SCS_POSIX_BINARY: A POSIX based application ( Not implemented )
|
|
|
|
* SCS_OS216_BINARY: A 16bit OS/2 based application
|
|
|
|
*
|
|
|
|
* To find the binary type, this function reads in the files header information.
|
|
|
|
* If extended header information is not present it will assume that the file
|
|
|
|
* is a DOS executable. If extended header information is present it will
|
2010-10-27 19:49:13 +02:00
|
|
|
* determine if the file is a 16, 32 or 64 bit Windows executable by checking the
|
2003-10-01 05:20:21 +02:00
|
|
|
* flags in the header.
|
|
|
|
*
|
|
|
|
* ".com" and ".pif" files are only recognized by their file name extension,
|
|
|
|
* as per native Windows.
|
Release 950430
Sat Apr 29 20:42:01 1995 Alexandre Julliard (julliard@sunsite.unc.edu)
* [controls/static.c]
Fixed painting of SS_*FRAME controls.
* [if1632/callback.c]
Pass the window instance as DS to the 16-bit window procedure.
Rewrote Catch() and Throw() to make them work with multiple tasks.
* [loader/main.c]
New function MAIN_Init() to perform initializations before the
first task is started instead of doing them in InitApp().
Temporary hack to command-line parsing to load one program per
command-line argument, to make testing task-switching easier.
* [loader/*.c]
Reimplemented modules to use a Windows-compatible layout and to
allow multiple tasks and multiple module instances. Not really
finished yet.
* [loader/task.c] [misc/exec.c]
Reimplemented tasks to use a common address space, and implemented
preliminary task-switching capabilities.
* [memory/global.c]
Fixed bug in GlobalNext().
* [misc/main.c]
Updated the list of contributors. Let me know if I forgot someone.
* [miscemu/int21.c]
Use one DTA per task instead of a global one.
* [objects/bitblt.c]
Fixed bug in BitBlt() that could cause BadMatch errors.
* [tools/build.c]
Added new function type 'stub', that makes possible to export an
unimplemented function by name as well as by ordinal. This will
avoid loading errors for unimplemented functions.
Generate an in-memory module layout for built-in DLLs so that the
same code can be used for built-in and loaded modules.
Changed relay code to make it unnecessary to save the value of the
BP register.
* [windows/message.c]
Implemented multiple message queues and preliminary task-switching
capabilities. Inter-task SendMessage() calls are not implemented
yet and will probably cause crashes if used.
* [windows/property.c]
Reimplemented properties and allocate them on the USER heap.
* [windows/win.c]
Fixed bug in SetWindowWord().
Reimplemented EnumWindows() and EnumTaskWindows().
Tue Apr 18 09:48:38 1995 Bernd Schmidt <crux@pool.informatik.rwth-aachen.de>
* [misc/main.c]
GetSystemParametersInfo(): Additional action SPI_GETICONTITLEFONT.
* [loader/resource.c]
Removed the check for NE_SEGFLAGS_EXECUTEONLY, since it broke
control.exe.
Fixed icon loading.
* [objects/font.c] [include/windows.h]
Fixed a bug in InitFontsList() and worked on the EnumFonts()
functions to make them comprehensible.
* [controls/button.c]
Fixed my previous patch to handle LBUTTONUP messages.
Fri Apr 14 11:41:28 1995 Cameron Heide (heide@ee.ualberta.ca)
* [misc/network.c, misc/dos_fs.c]
Implemented WNetGetConnection. All that is currently
supported are drives, for which the remote name is simply
the redirected UNIX directory name.
* [miscemu/int2?.c]
More drive number validity checking.
Wed Apr 12 11:28:37 1995 Bernd Schmidt <crux@pool.informatik.rwth-aachen.de>
* [controls/listbox.c]
Oops, my previous change to ListBoxDirectory broke the Borland
file open dialog. Fixed.
Mon Apr 10 23:17:12 1995 Martin von Loewis <loewis@informatik.hu-berlin.de>
* [if1632/ole2nls.spec] [misc/ole2nls.c] [misc/Imakefile]
New file ole2nls.c. Added stubs for GetUserDefaultLCID,
GetSystemDefaultLCID, GetUserDefaultLangID, GetSystemDefaultLangID.
Mon Apr 10 10:05:18 1995 Bernd Schmidt <crux@pool.informatik.rwth-aachen.de>
* [memory/global.c] [memory/local.c] [include/windows.h]
GlobalReAlloc(): If GMEM_MODIFY is set, don't resize the block.
LocalReAlloc(): Same for LMEM_MODIFY.
* [controls/listbox.c]
Fixed a bug in ListBoxDirectory that prevented commdlg from working.
Check for errors in some more places.
* [if1632/gdi.spec] [if1632/user.spec]
16 bit callback functions should be passed as segptrs.
* [include/dlls.h] [loader/ne_image.c] [loader/selector.c]
[loader/library.c]
Prevent a DLL from being initialized twice (Borlands Resource
Workshop used to do this).
Provide an additional flag for each w_file that indicates whether
it's an EXE or a DLL, for combinations like pbrush.exe/.dll.
* [controls/button.c]
Handle LBUTTONUP messages even if the button no longer has the
capture (for WinHelp).
* [include/wintypes.h]
FARPROC is now a segptr for the emulator and a function
pointer for the library.
* [misc/commdlg.c] [misc/commdlg.h]
Cleaned the file dialogs up a little. They now work reasonably well,
although there are still some problems (e.g. files are initially
invisible).
* [windows/class.c] [if1632/user.spec] [include/windows.h]
GetClassInfo() must take a segptr, as it checks whether the
highword is zero.
GetClassName() called the wrong atom function. No surprise it didn't
find anything.
* [misc/lstr.c]
AnsiToOem() and OemToAnsi() didn't terminate the strings. Fixed.
Removed some warnings.
* [if1632/relay.c] [if1632/ddeml.spec] [include/dlls.h]
New spec file for the 3.1 DDEML DDL.
* [controls/menu.c]
Small fix to ChangeMenu - mask out the obsolete flags
(MF_APPEND == MF_OWNERDRAW, this led to problems). It also had
problems with the MF_BYPOSITION flag.
* [windows/message.c]
SendMessage(): call the WH_CALLWNDPROC hook function. This is rather
ugly, I'm afraid. Windows probably passes a pointer to the 16 bit
stack for speed reasons.
* [windows/hook.c] [include/windows.h]
Set/HookWindowsHook() shouldn't just call their *Ex counterparts, as
they have slightly different semantics.
MS Hearts now works somewhat, if you disable the new builtin DDEML.
The graphics are completely messed up, though.
1995-04-30 12:05:20 +02:00
|
|
|
*/
|
2003-10-14 03:16:59 +02:00
|
|
|
BOOL WINAPI GetBinaryTypeW( LPCWSTR lpApplicationName, LPDWORD lpBinaryType )
|
1999-02-28 12:14:32 +01:00
|
|
|
{
|
|
|
|
BOOL ret = FALSE;
|
1999-12-04 05:04:58 +01:00
|
|
|
HANDLE hfile;
|
2009-10-27 19:30:30 +01:00
|
|
|
struct binary_info binary_info;
|
1996-08-18 18:21:52 +02:00
|
|
|
|
2003-10-14 03:16:59 +02:00
|
|
|
TRACE("%s\n", debugstr_w(lpApplicationName) );
|
Release 950606
Tue Jun 6 12:11:41 1995 Alexandre Julliard (julliard@sunsite.unc.edu)
* [controls/menu.c]
Fixed bug with drawing multi-column menus with vertical separator.
* [debugger/debug.l]
Fixed NULL-pointer reference after readline().
* [if1632/winprocs.spec] [miscemu/int21.c] [miscemu/interrupts.c]
Added interrupt vector emulation. Allows to retrieve an interrupt
vector and jump to it without crashing.
* [loader/ldt.c]
Moved ldt.c to memory directory.
* [loader/task.c]
Implemented LockCurrentTask() and GetInstanceData().
* [objects/bitblt.c]
Fixed a bug that caused StretchBlt() to use wrong colors when
stretching a monochrome bitmap to a color display.
* [objects/bitmap.c]
Fixed a segmented pointer bug in CreateBitmapIndirect().
* [tools/build.c]
Added possibility to have arguments for register functions; used
by interrupt vectors to remove the flags from the stack.
Generate a new function CallTo32_LargeStack(), that allows calling
a 32-bit function using the original 32-bit stack, for functions
that need more that 64k of stack.
Tue May 30 10:29:56 1995 Martin von Loewis <martin@informatik.hu-berlin.de>
* [if1632/shell.spec] [misc/shell.c]
DoEnvironmentSubst: fixed prototype
* [if1632/gdi.spec] [objects/palette.c]
SetSystemPaletteUse: new function
* [if1632/kernel.spec] [loader/resource.c]
DirectResAlloc: new function
* [if1632/user.spec] [windows/keyboard.c]
SetKeyboardState: new function
Mon May 29 12:58:28 1995 Bernd Schmidt <crux@pool.informatik.rwth-aachen.de>
* [tools/build.c]
Prevent interrupts from destroying the args for a 32 bit function
by loading the correct value into %esp directly after %ss.
* [loader/ne_image.c] [loader/module.c]
The new instance must be created earlier in LoadModule(), so that
fixups referencing it will be handled correctly.
Initialize the local heap for a DGROUP in NE_LoadSegment().
* [objects/dib.c]
Like RLE8 bitmaps, RLE4 bitmaps don't always end with a proper code.
This used to crash Wine. Fixed.
* [objects/text.c]
Fix possible null pointer dereference in debugging output.
* [misc/commdlg.c]
Handle user input in the edit control better. Some bugs fixed.
* [memory/local.c]
Started implementing moveable blocks. This is unfinished (!), but
at least it does not seem to break things.
Wed May 24 13:26:36 1995 Bernd Schmidt <crux@pool.informatik.rwth-aachen.de>
* [loader/module.c]
LoadModule(): DLLs occasionally have a data segment, and they work
much better if it is loaded :-)
LoadLibrary(): pass HMODULE instead of HINSTANCE to NE_InitializeDLLs.
FindModule(): also strip off the last backslash of the pathnames
(Winhelp tried to load C:\WINDOWS\SYSTEM\COMMDLG.DLL).
GetModuleHandle(): just call MODULE_FindModule, it does the same job,
only better.
* [loader/ne_image.c]
LocalInit() the heap of a DLL in NE_InitDLL. (This is probably
not really correct, it seems that all programs and DLLs try to do
this themselves. But they pass weird parameters.)
NE_InitializeDLLs should also call NE_InitDLL for the passed hModule.
* [loader/task.c] [misc/user.c]
Finish global initializations in InitTask instead of InitApp, or
all the DLLs will be initialized in InitTask without any available
window classes!
1995-06-06 18:40:35 +02:00
|
|
|
|
1999-02-28 12:14:32 +01:00
|
|
|
/* Sanity check.
|
|
|
|
*/
|
|
|
|
if ( lpApplicationName == NULL || lpBinaryType == NULL )
|
|
|
|
return FALSE;
|
|
|
|
|
|
|
|
/* Open the file indicated by lpApplicationName for reading.
|
|
|
|
*/
|
2003-10-14 03:16:59 +02:00
|
|
|
hfile = CreateFileW( lpApplicationName, GENERIC_READ, FILE_SHARE_READ,
|
2001-01-06 02:29:18 +01:00
|
|
|
NULL, OPEN_EXISTING, 0, 0 );
|
1999-12-04 05:04:58 +01:00
|
|
|
if ( hfile == INVALID_HANDLE_VALUE )
|
1999-02-28 12:14:32 +01:00
|
|
|
return FALSE;
|
|
|
|
|
|
|
|
/* Check binary type
|
|
|
|
*/
|
2009-10-27 19:30:30 +01:00
|
|
|
MODULE_get_binary_info( hfile, &binary_info );
|
|
|
|
switch (binary_info.type)
|
2002-05-22 23:32:49 +02:00
|
|
|
{
|
|
|
|
case BINARY_UNKNOWN:
|
2003-10-14 03:16:59 +02:00
|
|
|
{
|
|
|
|
static const WCHAR comW[] = { '.','C','O','M',0 };
|
|
|
|
static const WCHAR pifW[] = { '.','P','I','F',0 };
|
|
|
|
const WCHAR *ptr;
|
|
|
|
|
2002-05-22 23:32:49 +02:00
|
|
|
/* try to determine from file name */
|
2003-10-14 03:16:59 +02:00
|
|
|
ptr = strrchrW( lpApplicationName, '.' );
|
2002-05-22 23:32:49 +02:00
|
|
|
if (!ptr) break;
|
2003-10-14 03:16:59 +02:00
|
|
|
if (!strcmpiW( ptr, comW ))
|
2002-05-22 23:32:49 +02:00
|
|
|
{
|
|
|
|
*lpBinaryType = SCS_DOS_BINARY;
|
|
|
|
ret = TRUE;
|
|
|
|
}
|
2003-10-14 03:16:59 +02:00
|
|
|
else if (!strcmpiW( ptr, pifW ))
|
2002-05-22 23:32:49 +02:00
|
|
|
{
|
|
|
|
*lpBinaryType = SCS_PIF_BINARY;
|
|
|
|
ret = TRUE;
|
|
|
|
}
|
|
|
|
break;
|
2003-10-14 03:16:59 +02:00
|
|
|
}
|
2009-08-12 15:43:08 +02:00
|
|
|
case BINARY_PE:
|
2009-10-27 19:30:30 +01:00
|
|
|
*lpBinaryType = (binary_info.flags & BINARY_FLAG_64BIT) ? SCS_64BIT_BINARY : SCS_32BIT_BINARY;
|
2002-05-22 23:32:49 +02:00
|
|
|
ret = TRUE;
|
|
|
|
break;
|
|
|
|
case BINARY_WIN16:
|
|
|
|
*lpBinaryType = SCS_WOW_BINARY;
|
|
|
|
ret = TRUE;
|
|
|
|
break;
|
|
|
|
case BINARY_OS216:
|
|
|
|
*lpBinaryType = SCS_OS216_BINARY;
|
|
|
|
ret = TRUE;
|
|
|
|
break;
|
|
|
|
case BINARY_DOS:
|
|
|
|
*lpBinaryType = SCS_DOS_BINARY;
|
|
|
|
ret = TRUE;
|
|
|
|
break;
|
|
|
|
case BINARY_UNIX_EXE:
|
|
|
|
case BINARY_UNIX_LIB:
|
|
|
|
ret = FALSE;
|
|
|
|
break;
|
|
|
|
}
|
1999-02-28 12:14:32 +01:00
|
|
|
|
|
|
|
CloseHandle( hfile );
|
|
|
|
return ret;
|
Release 950522
Sun May 21 12:30:30 1995 Alexandre Julliard (julliard@sunsite.unc.edu)
* [debugger/hash.c] [debugger/info.c]
Added support for symbolic segmented addresses. Add symbols for all
built-in API entry points.
* [if1632/relay.c] [include/dlls.h]
Removed dll_table structure, as we now use the built-in module
structures.
* [if1632/relay.c] [loader/main.c]
Removed winestat option, as it was no longer very meaningful.
* [include/stackframe.h]
New macro MAKE_SEGPTR that creates a segmented pointer to a local
variable on the 32-bit stack.
* [loader/module.c]
Added support for multiple instances of an application.
Implemented LoadModule() and FreeModule().
* [loader/ne_image.c] [loader/task.c]
Moved initialisation of built-in DLLs to InitTask().
* [memory/global.c]
Implemented discardable blocks.
* [misc/file.c]
Search path of current executable in OpenFile().
Fixed bug with searching in Windows path.
* [misc/lstr.c]
Hard-coded translation tables for Ansi<->Oem.
* [misc/user.c]
Moved some global initializations to InitApp(), because they need
a task context to be performed.
* [objects/dc.c]
Handle R2_BLACK and R2_WHITE specially so that they work correctly
with palette displays.
* [tools/build.c]
Suppressed generation of the C file for DLL specs, because it's no
longer needed. Output all the assembly code directly to stdout.
Some changes to integrate Win32 support from Martin von Loewis.
* [windows/msgbox.c]
Moved message box code from misc/ to windows/.
Mon May 15 23:40:04 1995 Martin Ayotte (wine@trgcorp.mksinfo.qc.ca)
* [misc/audio.c] [misc/mcicda.c] [misc/mcianim.c] [misc/midi.c]
[misc/mmaux.c] [misc/mmsystem.c]
Modify code & use pointers conversion macros.
Make cdaudio & wave devices work again (only using some applets).
* [misc/profile.c]
Change getc() to fgetc() where needed.
Mon May 15 22:10:56 1995 Martin von Loewis <loewis@informatik.hu-berlin.de>
* [if1632/Imakefile]
added entries for the new files gdi32.spec, kernel32.spec,
user32.spec, shell32.spec and winprocs32.spec.
* [if1632/commdlg.spec][if1632/kernel.spec][if1632/shell.spec]
[if1632/storage.spec][if1632/system.spec][if1632/user.spec]
ChooseFont, RESERVED5, InternalExtractIcon: Marked as stubs
ExtractAssociatedIcon, DoEnvironmentSubst, DumpIcon:
stub implementations provided
marked storage.dll,storege.sys functions as stubs
* [include/pe_image.h]
Added structures WIN32_builtin and WIN32_function
* [include/peexe.h]
PE_Import_Directory: renamed reserved fields to
TimeDate, Forwarder, Thunk_List
* [include/winerror.h]
New file.
* [loader/main.c]
called RELAY32_Init
* [loader/pe_image.c]
xmmap: map BSS anonymous
dump_imports: renamed to fixup_imports, do the fixup of imported
symbols
PE_LoadImage: pass raw data size to xmmap
* [loader/resource.c]
DumpIcon: new function
* [misc/kernel32.c]
New file.
* [misc/main.c]
make stdout and stderr unbuffered
* [misc/shell.c]
DoEnvironmentSubst: new function
* [objects/font.c]
FONT_MatchFont: try oblique if there is no italic
* [rc/Imakefile][rc/parser.l]
yywrap: new function
Don't link with libfl.a on Linux
* [tools/build.c]
Added keywords stdcall, subsystem, base
GenerateForWin32: new function
BuildSpecFiles: call GenerateForWin32 if subsystem is win32
Mon May 15 10:38:14 1995 Bernd Schmidt <crux@pool.informatik.rwth-aachen.de>
* [controls/listbox.c] [controls/combo.c] [windows/defwnd.c]
Minor fixes.
* [misc/message.c] [misc/main.c] [rc/sysres*.rc] [include/texts.h]
Rewrote message box handling.
* [windows/dialog.c]
Dialogs should be invisible until after WM_INITDIALOG is seent.
Don't switch to invisible dialog items on a TAB keypress.
* [windows/mdi.c]
Send WM_NCPAINT message in MDIRestoreChild().
* [windows/painting.c]
Fixed typo (&& -> &).
* [windows/message.c] [if1632/user.spec]
Implemented PostAppMessage().
* [windows/event.c]
SetCapture(0) should act like ReleaseCapture().
Tue May 9 11:55:52 1995 Eddie C. Dost (ecd@dressler.de)
* [Imakefile]
Changed CDEBUGFLAGS for systems running __ELF__ (temporarily)
Added ASFLAGS to exported variables.
* [debugger/readline/Imakefile]
Moved defines for libreadline from DEFINES to EXTRA_DEFINES
* [memory/local.c] [miscemu/int21.c]
Added some more debugging outputs.
Mon May 8 00:55:27 MET DST 1995 Dag Asheim (dash@ifi.uio.no)
* [misc/message.c]
Fixed a "FIXME" concerning norwegian translation.
Sun May 7 23:25:23 1995 Bernd Schmidt <crux@pool.informatik.rwth-aachen.de>
* [*/*]
Removed warnings in a couple of files and deleted some obsolete code.
* [controls/listbox.c]
Cleanup, speed improvements & lots of bug fixes.
* [controls/combo.c]
Mostly rewritten. This is still very buggy, but not quite as bad as
before.
* [include/commdlg.h] [misc/commdlg.c]
Removed the need for sysres.dll. Small bug fixes.
* [objects/oembitmap.c] [include/bitmaps/<many>] [include/windows.h]
[loader/library.c] [loader/main.c] [rc/sysres*.rc]
Removed sysres.dll and replaced the remaining bitmaps/icons with
XPM equivalents.
* [misc/message.c] [windows/nonclient.c] [misc/main.c]
[if1632/winprocs.spec]
"About Wine..." now brings up a standard ShellAbout() window with
the Wine icon and the list of contributors.
* [misc/shell.c]
Fixed ShellAbout()/AboutDialogProc() to show the right icon.
* [windows/event.c]
Small hack for non-alphanumeric keys: Dont't send the ascii value in
the WM_KEYDOWN message, but some unused code instead. Should be done
properly by sending different codes for each key. The edit control
used to get a VK_DELETE message each time the user typed '.'.
* [windows/class.c]
Removed a check for CS_GLOBALCLASS in CLASS_FindClassByName().
This used to be no problem, but breaks Resource Workshop in 950403.
* [objects/dib.c]
New diagnostic for a bug I've been encountering. If it shows up,
please report it.
Sun May 7 23:11:18 EDT 1995 William Magro (wmagro@tc.cornell.edu)
* [objects/color.c]
Handle situation when 'dc' exists, but palette mapping
does not. (Fixes kidpix2 demo.)
Sun May 7 03:32:00 1995 Charles M. Hannum (mycroft@mit.edu)
* [loader/ldt.c]
LDT_Print: Only show the number of entries that the kernel
returned. Make this work for NetBSD.
Fri May 5 02:53:26 1995 Charles M. Hannum (mycroft@mit.edu)
* [debugger/dbg.y] [include/wine.h] [loader/signal.c]
Modify cs and ds selector values for NetBSD-current.
* [debugger/debug.l]
$sp, $esp: Use RN_ESP_AT_SIGNAL rather than RN_ESP.
* [debugger/regpos.h]
Modify sigcontext format for NetBSD-current.
SC_ESP: Use RN_ESP_AT_SIGNAL rather than RN_ESP.
* [include/ldt.h]
SELECTOR_TO_ENTRY: Explicitly clear the top half of the selector
value, since only 16 bits of it may have been saved.
* [misc/winsocket.c]
Set structure packing with `#pragma pack' to accomodate
other/older compilers.
Tue May 2 18:15:01 1995 Paal Beyer (beyer@idt.unit.no)
* [misc/commdlg.c]
Fixed path-names so when changing directory the listboxes
changes too.
* [debugger/dbg.y debugger/debug.l wine.ini]
Added SymbolTableFile to wine.ini so symbols can be read
without standing in the directory containing wine.sym.
Added the possibility to specify full name of wine.sym from
the debugger prompt.
1995-05-22 20:23:01 +02:00
|
|
|
}
|
|
|
|
|
1999-02-28 12:14:32 +01:00
|
|
|
/***********************************************************************
|
2003-10-14 03:16:59 +02:00
|
|
|
* GetBinaryTypeA [KERNEL32.@]
|
|
|
|
* GetBinaryType [KERNEL32.@]
|
2005-11-08 12:01:03 +01:00
|
|
|
*
|
|
|
|
* See GetBinaryTypeW.
|
1999-02-28 12:14:32 +01:00
|
|
|
*/
|
2003-10-14 03:16:59 +02:00
|
|
|
BOOL WINAPI GetBinaryTypeA( LPCSTR lpApplicationName, LPDWORD lpBinaryType )
|
1999-02-28 12:14:32 +01:00
|
|
|
{
|
2003-10-14 03:16:59 +02:00
|
|
|
ANSI_STRING app_nameA;
|
|
|
|
NTSTATUS status;
|
1999-02-28 12:14:32 +01:00
|
|
|
|
2003-10-14 03:16:59 +02:00
|
|
|
TRACE("%s\n", debugstr_a(lpApplicationName));
|
1999-02-28 12:14:32 +01:00
|
|
|
|
|
|
|
/* Sanity check.
|
|
|
|
*/
|
|
|
|
if ( lpApplicationName == NULL || lpBinaryType == NULL )
|
|
|
|
return FALSE;
|
|
|
|
|
2003-10-14 03:16:59 +02:00
|
|
|
RtlInitAnsiString(&app_nameA, lpApplicationName);
|
|
|
|
status = RtlAnsiStringToUnicodeString(&NtCurrentTeb()->StaticUnicodeString,
|
|
|
|
&app_nameA, FALSE);
|
|
|
|
if (!status)
|
|
|
|
return GetBinaryTypeW(NtCurrentTeb()->StaticUnicodeString.Buffer, lpBinaryType);
|
1999-02-28 12:14:32 +01:00
|
|
|
|
2003-10-14 03:16:59 +02:00
|
|
|
SetLastError(RtlNtStatusToDosError(status));
|
|
|
|
return FALSE;
|
1999-02-28 12:14:32 +01:00
|
|
|
}
|
Release 950522
Sun May 21 12:30:30 1995 Alexandre Julliard (julliard@sunsite.unc.edu)
* [debugger/hash.c] [debugger/info.c]
Added support for symbolic segmented addresses. Add symbols for all
built-in API entry points.
* [if1632/relay.c] [include/dlls.h]
Removed dll_table structure, as we now use the built-in module
structures.
* [if1632/relay.c] [loader/main.c]
Removed winestat option, as it was no longer very meaningful.
* [include/stackframe.h]
New macro MAKE_SEGPTR that creates a segmented pointer to a local
variable on the 32-bit stack.
* [loader/module.c]
Added support for multiple instances of an application.
Implemented LoadModule() and FreeModule().
* [loader/ne_image.c] [loader/task.c]
Moved initialisation of built-in DLLs to InitTask().
* [memory/global.c]
Implemented discardable blocks.
* [misc/file.c]
Search path of current executable in OpenFile().
Fixed bug with searching in Windows path.
* [misc/lstr.c]
Hard-coded translation tables for Ansi<->Oem.
* [misc/user.c]
Moved some global initializations to InitApp(), because they need
a task context to be performed.
* [objects/dc.c]
Handle R2_BLACK and R2_WHITE specially so that they work correctly
with palette displays.
* [tools/build.c]
Suppressed generation of the C file for DLL specs, because it's no
longer needed. Output all the assembly code directly to stdout.
Some changes to integrate Win32 support from Martin von Loewis.
* [windows/msgbox.c]
Moved message box code from misc/ to windows/.
Mon May 15 23:40:04 1995 Martin Ayotte (wine@trgcorp.mksinfo.qc.ca)
* [misc/audio.c] [misc/mcicda.c] [misc/mcianim.c] [misc/midi.c]
[misc/mmaux.c] [misc/mmsystem.c]
Modify code & use pointers conversion macros.
Make cdaudio & wave devices work again (only using some applets).
* [misc/profile.c]
Change getc() to fgetc() where needed.
Mon May 15 22:10:56 1995 Martin von Loewis <loewis@informatik.hu-berlin.de>
* [if1632/Imakefile]
added entries for the new files gdi32.spec, kernel32.spec,
user32.spec, shell32.spec and winprocs32.spec.
* [if1632/commdlg.spec][if1632/kernel.spec][if1632/shell.spec]
[if1632/storage.spec][if1632/system.spec][if1632/user.spec]
ChooseFont, RESERVED5, InternalExtractIcon: Marked as stubs
ExtractAssociatedIcon, DoEnvironmentSubst, DumpIcon:
stub implementations provided
marked storage.dll,storege.sys functions as stubs
* [include/pe_image.h]
Added structures WIN32_builtin and WIN32_function
* [include/peexe.h]
PE_Import_Directory: renamed reserved fields to
TimeDate, Forwarder, Thunk_List
* [include/winerror.h]
New file.
* [loader/main.c]
called RELAY32_Init
* [loader/pe_image.c]
xmmap: map BSS anonymous
dump_imports: renamed to fixup_imports, do the fixup of imported
symbols
PE_LoadImage: pass raw data size to xmmap
* [loader/resource.c]
DumpIcon: new function
* [misc/kernel32.c]
New file.
* [misc/main.c]
make stdout and stderr unbuffered
* [misc/shell.c]
DoEnvironmentSubst: new function
* [objects/font.c]
FONT_MatchFont: try oblique if there is no italic
* [rc/Imakefile][rc/parser.l]
yywrap: new function
Don't link with libfl.a on Linux
* [tools/build.c]
Added keywords stdcall, subsystem, base
GenerateForWin32: new function
BuildSpecFiles: call GenerateForWin32 if subsystem is win32
Mon May 15 10:38:14 1995 Bernd Schmidt <crux@pool.informatik.rwth-aachen.de>
* [controls/listbox.c] [controls/combo.c] [windows/defwnd.c]
Minor fixes.
* [misc/message.c] [misc/main.c] [rc/sysres*.rc] [include/texts.h]
Rewrote message box handling.
* [windows/dialog.c]
Dialogs should be invisible until after WM_INITDIALOG is seent.
Don't switch to invisible dialog items on a TAB keypress.
* [windows/mdi.c]
Send WM_NCPAINT message in MDIRestoreChild().
* [windows/painting.c]
Fixed typo (&& -> &).
* [windows/message.c] [if1632/user.spec]
Implemented PostAppMessage().
* [windows/event.c]
SetCapture(0) should act like ReleaseCapture().
Tue May 9 11:55:52 1995 Eddie C. Dost (ecd@dressler.de)
* [Imakefile]
Changed CDEBUGFLAGS for systems running __ELF__ (temporarily)
Added ASFLAGS to exported variables.
* [debugger/readline/Imakefile]
Moved defines for libreadline from DEFINES to EXTRA_DEFINES
* [memory/local.c] [miscemu/int21.c]
Added some more debugging outputs.
Mon May 8 00:55:27 MET DST 1995 Dag Asheim (dash@ifi.uio.no)
* [misc/message.c]
Fixed a "FIXME" concerning norwegian translation.
Sun May 7 23:25:23 1995 Bernd Schmidt <crux@pool.informatik.rwth-aachen.de>
* [*/*]
Removed warnings in a couple of files and deleted some obsolete code.
* [controls/listbox.c]
Cleanup, speed improvements & lots of bug fixes.
* [controls/combo.c]
Mostly rewritten. This is still very buggy, but not quite as bad as
before.
* [include/commdlg.h] [misc/commdlg.c]
Removed the need for sysres.dll. Small bug fixes.
* [objects/oembitmap.c] [include/bitmaps/<many>] [include/windows.h]
[loader/library.c] [loader/main.c] [rc/sysres*.rc]
Removed sysres.dll and replaced the remaining bitmaps/icons with
XPM equivalents.
* [misc/message.c] [windows/nonclient.c] [misc/main.c]
[if1632/winprocs.spec]
"About Wine..." now brings up a standard ShellAbout() window with
the Wine icon and the list of contributors.
* [misc/shell.c]
Fixed ShellAbout()/AboutDialogProc() to show the right icon.
* [windows/event.c]
Small hack for non-alphanumeric keys: Dont't send the ascii value in
the WM_KEYDOWN message, but some unused code instead. Should be done
properly by sending different codes for each key. The edit control
used to get a VK_DELETE message each time the user typed '.'.
* [windows/class.c]
Removed a check for CS_GLOBALCLASS in CLASS_FindClassByName().
This used to be no problem, but breaks Resource Workshop in 950403.
* [objects/dib.c]
New diagnostic for a bug I've been encountering. If it shows up,
please report it.
Sun May 7 23:11:18 EDT 1995 William Magro (wmagro@tc.cornell.edu)
* [objects/color.c]
Handle situation when 'dc' exists, but palette mapping
does not. (Fixes kidpix2 demo.)
Sun May 7 03:32:00 1995 Charles M. Hannum (mycroft@mit.edu)
* [loader/ldt.c]
LDT_Print: Only show the number of entries that the kernel
returned. Make this work for NetBSD.
Fri May 5 02:53:26 1995 Charles M. Hannum (mycroft@mit.edu)
* [debugger/dbg.y] [include/wine.h] [loader/signal.c]
Modify cs and ds selector values for NetBSD-current.
* [debugger/debug.l]
$sp, $esp: Use RN_ESP_AT_SIGNAL rather than RN_ESP.
* [debugger/regpos.h]
Modify sigcontext format for NetBSD-current.
SC_ESP: Use RN_ESP_AT_SIGNAL rather than RN_ESP.
* [include/ldt.h]
SELECTOR_TO_ENTRY: Explicitly clear the top half of the selector
value, since only 16 bits of it may have been saved.
* [misc/winsocket.c]
Set structure packing with `#pragma pack' to accomodate
other/older compilers.
Tue May 2 18:15:01 1995 Paal Beyer (beyer@idt.unit.no)
* [misc/commdlg.c]
Fixed path-names so when changing directory the listboxes
changes too.
* [debugger/dbg.y debugger/debug.l wine.ini]
Added SymbolTableFile to wine.ini so symbols can be read
without standing in the directory containing wine.sym.
Added the possibility to specify full name of wine.sym from
the debugger prompt.
1995-05-22 20:23:01 +02:00
|
|
|
|
2006-05-27 10:57:17 +02:00
|
|
|
/***********************************************************************
|
|
|
|
* GetModuleHandleExA (KERNEL32.@)
|
|
|
|
*/
|
|
|
|
BOOL WINAPI GetModuleHandleExA( DWORD flags, LPCSTR name, HMODULE *module )
|
|
|
|
{
|
|
|
|
WCHAR *nameW;
|
|
|
|
|
|
|
|
if (!name || (flags & GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS))
|
|
|
|
return GetModuleHandleExW( flags, (LPCWSTR)name, module );
|
|
|
|
|
|
|
|
if (!(nameW = FILE_name_AtoW( name, FALSE ))) return FALSE;
|
|
|
|
return GetModuleHandleExW( flags, nameW, module );
|
|
|
|
}
|
|
|
|
|
|
|
|
/***********************************************************************
|
|
|
|
* GetModuleHandleExW (KERNEL32.@)
|
|
|
|
*/
|
|
|
|
BOOL WINAPI GetModuleHandleExW( DWORD flags, LPCWSTR name, HMODULE *module )
|
|
|
|
{
|
|
|
|
NTSTATUS status = STATUS_SUCCESS;
|
|
|
|
HMODULE ret;
|
2014-05-28 06:58:59 +02:00
|
|
|
ULONG_PTR magic;
|
2013-10-15 08:20:31 +02:00
|
|
|
BOOL lock;
|
2007-05-16 16:47:11 +02:00
|
|
|
|
2012-04-05 11:15:50 +02:00
|
|
|
if (!module)
|
|
|
|
{
|
|
|
|
SetLastError( ERROR_INVALID_PARAMETER );
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
2007-05-16 16:47:11 +02:00
|
|
|
/* if we are messing with the refcount, grab the loader lock */
|
2013-10-15 08:20:31 +02:00
|
|
|
lock = (flags & GET_MODULE_HANDLE_EX_FLAG_PIN) || !(flags & GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT);
|
|
|
|
if (lock)
|
2007-05-16 16:47:11 +02:00
|
|
|
LdrLockLoaderLock( 0, NULL, &magic );
|
2006-05-27 10:57:17 +02:00
|
|
|
|
|
|
|
if (!name)
|
|
|
|
{
|
|
|
|
ret = NtCurrentTeb()->Peb->ImageBaseAddress;
|
|
|
|
}
|
|
|
|
else if (flags & GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS)
|
|
|
|
{
|
|
|
|
void *dummy;
|
|
|
|
if (!(ret = RtlPcToFileHeader( (void *)name, &dummy ))) status = STATUS_DLL_NOT_FOUND;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
UNICODE_STRING wstr;
|
|
|
|
RtlInitUnicodeString( &wstr, name );
|
2007-05-16 16:47:11 +02:00
|
|
|
status = LdrGetDllHandle( NULL, 0, &wstr, &ret );
|
2006-05-27 10:57:17 +02:00
|
|
|
}
|
|
|
|
|
2007-05-16 16:47:11 +02:00
|
|
|
if (status == STATUS_SUCCESS)
|
2006-05-27 10:57:17 +02:00
|
|
|
{
|
2007-05-16 16:47:11 +02:00
|
|
|
if (flags & GET_MODULE_HANDLE_EX_FLAG_PIN)
|
2013-10-15 08:20:31 +02:00
|
|
|
LdrAddRefDll( LDR_ADDREF_DLL_PIN, ret );
|
2007-05-16 16:47:11 +02:00
|
|
|
else if (!(flags & GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT))
|
|
|
|
LdrAddRefDll( 0, ret );
|
2006-05-27 10:57:17 +02:00
|
|
|
}
|
2007-05-16 16:47:11 +02:00
|
|
|
else SetLastError( RtlNtStatusToDosError( status ) );
|
2006-05-27 10:57:17 +02:00
|
|
|
|
2013-10-15 08:20:31 +02:00
|
|
|
if (lock)
|
2007-05-16 16:47:11 +02:00
|
|
|
LdrUnlockLoaderLock( 0, magic );
|
2006-05-27 10:57:17 +02:00
|
|
|
|
2012-04-05 11:16:08 +02:00
|
|
|
if (status == STATUS_SUCCESS) *module = ret;
|
|
|
|
else *module = NULL;
|
|
|
|
|
2007-05-16 16:47:11 +02:00
|
|
|
return (status == STATUS_SUCCESS);
|
2006-05-27 10:57:17 +02:00
|
|
|
}
|
Release 980913
Fri Sep 11 13:14:35 1998 Andreas Mohr <100.30936@germany.net>
* [files/file.c] [include/file.h]
Fixed SetFilePointer to allow negative positions as in DOS.
* [graphics/ddraw.c]
Added some methods to IDirect3D.
* [ole/compobj.c] [if1632/compobj.spec]
Added/implemented CoCreateStandardMalloc16,
CoGetClassObject, CoCreateInstance,
LookupETask, SetETask, CoGetState16.
* [loader/task.c]
MakeProcInstance: return 0 if func == NULL.
* [*/*] [tools/winapi-check]
Added zillions of missing WINAPI's and __cdecl's.
(oops, several caused by myself)
Wrote script for automated checking.
* [if1632/compobj.spec]
Many stub names.
* [misc/ddeml.c] [ole/compobj.c]
Some stubs.
Tue Sep 9 21:36:48 1998 Anders Carlsson <anders.carlsson@linux.nu>
* [dlls/comctl32/Makefile.in] [dlls/comctl32/commctrl.c]
[dlls/comctl32/tab.c] [include/commctrl.h] [include/tab.h]
Added preliminary tab control support.
Sat Sep 5 16:27:20 1998 Huw D M Davies <daviesh@abacus.physics.ox.ac.uk>
* [graphics/psdrv/*]
More changes to the PostScript driver:
Implemented pens and solid brushes.
Colour/greyscale for fonts, pens and brushes.
To get coloured output you need to have *ColorDevice set to true
in your PPD, otherwise you'll get greyscale.
Landscape mode now works, as does non-A4 page sizes.
Encoding of fonts to ANSI is better, Symbol works again.
* [objects/dc.c] [include/gdi.h] [*/*]
Moved dc->w.{text,background}Pixel to X11DRV_PDEVICE where they
belong.
Sat Sep 5 05:12:09 1998 Ove Kaaven <ovek@arcticnet.no>
* [include/dosexe.h] [include/miscemu.h] [include/msdos.h]
[loader/dos/dosvm.c] [loader/dos/module.c] [msdos/dpmi.c]
[msdos/int2f.c] [msdos/interrupts.c]
Fixed portability. Adapted some code to make it easier to
integrate the DOS subsystem with the DPMI subsystem, made
the DPMI simulated real-mode interrupts be handled the V86
way. Added support for .COM files. Made int2f DPMI check
fail, to avoid pkunzip crashing in attempting to use DPMI.
Generally moved stuff around a little.
It is now technically possible to load several DOS programs
into the same memory space. Not tested, though.
Fri Sep 4 21:40:45 1998 Marcus Meissner <marcus@jet.franken.de>
* [if1632/kernel.spec]
Changed 500-53x stubnames accordingly to nt3.51 krnl386.exe.
* [win32/except.c]
Fixed one bad program behaviour, (deleting SEH while in
first walk). RtlUnwind is broken too I think (it should unwind
on success, not while walking the exception chain).
* [ole/ole2nls.c]
Get*DefaultLCID returns 0x400|id. expected by one application.
* [if1632/snoop.c]
Handle non-standard SP returns more graceful.
* [windows/class.c]
hinstances are mostly irrelevant for win32.
* [memory/string.c] [misc/registry.c]
lstrcmpi32W: use toupper for characters < 0x100. (speedup hack
for registry.c)
Some small speedup hacks for registry.c
Thu Sep 3 20:40:16 1998 Eric Kohl <ekohl@abo.rhein-zeitung.de>
* [Makefile.in][configure][configure.in][dlls/Makefile.in]
[dlls/comctl32/Makefile.in]
Created dlls/comctl32 and moved the common controls stuff to it.
* [misc/version.c]
Removed COMCTL32_DllGetVersion. The fixed function is part
of the common controls stuff.
* [dlls/comctl32/*.c][include/commctrl.h]
Added structure size tests.
* [dlls/comctl32/toolbar.c]
Fixed a bug in TOOLBAR_GetMaxWidth().
* [dlls/comctl32/animate.c][include/animate.h]
[dlls/comctl32/comboex.c][include/comboex.h]
[dlls/comctl32/hotkey.c][include/hotkey.h]
[dlls/comctl32/listview.c][include/listview.h]
[dlls/comctl32/commctrl.c][include/commctrl.h]
New files. Added Animation, ComboBoxEx, Hotkey and
Listview control dummies.
* [dlls/comctl32/tooltips.c]
Fixed a display bug and font selection.
* [dlls/comctl32/comctl32undoc.c][include/commctrl.h]
Added missing DPA functions. Fixed bugs and published the
function prototypes.
* [documentation/common_controls]
Updated.
Wed Sep 2 15:43:45 1998 Patrik Stridvall <ps@leissner.se>
* [AUTHORS] [include/authors.h]
Added myself as a Wine author.
* [memory/virtual.c] [objects/dc.c]
Fixed runtime errors for Solaris.
* [misc/ddeml.c] [objects/gdiobj.c]
Minor fixes.
* [win32/device.c]
Added stubs for IFSMgr VxDCall and
a partial implementation of IFSMgr DeviceIo.
* [relay32/Makefile.in] [relay32/builtin32.c] [relay32/imm32.spec]
[relay32/msnet32.spec] [relay32/oledlg.spec]
Added new spec files for IMM32.DLL, MSNET32.DLL, OLEDLG.DLL.
* [misc/Makefile.in] [misc/imm.c] [include/imm.h]
Added news files for implementation of IMM32.DLL.
All functions return 0 as is correct for all Western Languages.
* [ole/Makefile.in] [ole/oledlg.c] [include/oledlg.h]
Added new files for implementation of OLEDLG.DLL.
Added stubs with FIXME:s for all functions.
Wed Sep 2 10:50:00 1998 Juergen Schmied <juergen.schmied@metronet.de>
* [dlls/shell32/contmenu.c][dlls/shell32/shellole.c]
[dlls/shell32/shlfolder.c][dlls/shell32/shlview.c]
[documentation/shell32][include/shell.h]
Clean up, bugfixes.
* [dlls/shell32/enumidlist.c]
Fileattributes implemented.
* [dlls/shell32/pidl.c]
Class pidlmgr splited into functions, structures changed,
some functions rewritten.
* [dlls/shell32/shell32_main.c]
Small changes and bugfixes SHGetFileInfoA, SHGetSpecialFolderLocation.
* [dlls/shell32/shellord.c][relay32/shell32.spec]
Parameter documented, implemented SHCloneSpecialIDList.
Stub improved ShellExecuteEx32A.
New stubs SHFind_InitMenuPopup, FileMenu_InitMenuPopup,
FileMenu_Create, FileMenu_TrackPopupMenuEx, SHWinHelp,
SHRunConrolPanel, DAD_ShowDragImage, FileMenu_Destroy,
SHGetDataFromIDListA, SHFileOperationA.
* [include/winnls.h][include/ole2nls.c]
TIME_FORCE24HOURFORMAT, TIME_NOTIMEMARKER implemented
in OLE_GetFormatA, GetTimeFormat32A.
* [win32/code_page.c]
WideCharToMultiByte: parameter checking and returning of strlen
implemented.
* [windows/keyboard.c][windows/defwnd.c]
Debug messages added.
* [windows/win.c]
WIN_SetWindowLong GWL_STYLE and GWL_EXSTYLE implemented.
* [controls/menu.c]
Missing line added.
* [include/winerror.h]
Macros for SUCCEEDED and FAILED added.
Mon Aug 31 00:55:31 1998 Ulrich Weigand <weigand@informatik.uni-erlangen.de>
* [loader/module.c]
Bugfix: LoadModule16 should *not* call LoadModule32.
* [files/dos_fs.c]
Bugfix: don't crash if given directory doesn't exist.
Sat Aug 29 15:00:49 1998 Turchanov Sergey <turchanov@usa.net>
* [include/mmsystem.h][multimedia/mmsystem.c][relay32/winmm.spec]
Almost completed implementation of [snd]PlaySound (except
flags SND_ALIAS_ID and SND_APPLICATION).
* [if1632/user.spec][windows/winpos.c]
Added SetWindowRgn16 stub.
Sat Aug 29 02:53:31 1998 Alexander Lukyanov <lav@long.yar.ru>
* [files/drive.c]
GetDriveType32A: return DRIVE_DOESNOTEXIST in case of non
existent drive.
* [msdos/int21.c]
INT21_FindFirstFCB: check drive validity to prevent oops.
* [win32/file.c]
CreateFile32A: duplicate STD_{INPUT,OUTPUT}_HANDLE.
* [files/dos_fs.c]
Make DOSFS_OpenDir treat "" as "/".
DOSFS_OpenDevice: duplicate STD_{INPUT,OUTPUT}_HANDLE.
* [windows/dialog.c]
GetNextDlgTabItem32: use last/first item instead of first/last
when hwndCtrl==0. This fixes initial focus.
Sat Aug 29 02:46:32 1998 Adrian Harvey <adrian@select.com.au>
* [include/process.h] [include/process.c]
Renamed PROCESS_SELF to CURRENT_PROCESS_PSEUDOHANDLE in line
with thread constant, and Win32 documentation (which calls it
a pseudohandle.) Made GetCurrentProcess actually use this
constant instead of the value.
* [include/process.h] [include/thread.h] [scheduler/thread.c]
[scheduler/process.c] [scheduler/handle.c]
Modify HANDLE_GetObjPtr to understand about
CURRENT_THREAD_PSEUDOHANDLE and CURRENT_PROCESS_PSEUDOHANDLE.
This allows DuplicateHandle to do the correct thing with these
handles. Removed now duplicate functionality from THREAD_GetPtr
and PROCESS_GetPtr.
* [loader/ne/segment.c]
Fixed two places where HFILE32s were being created and passed to
16-bit code. This should unbreak NE self-loading code.
Added two casts to remove compile time warnings.
Fri Aug 28 21:04:13 1998 Joseph Pranevich <knight@baltimore.wwaves.com>
* [msdos/dosmem.c] [msdos/int2f.c]
Added beginnings of DOS error table.
* [msdos/int1a.c]
Stub for subfunction 0xb0.
* [msdos/int10.c] [loader/dos/dosvm.c]
INT 10 support completely rewritten and lots of debugging
added. Now, DOS apps that use INT 10 to write to the screen will
work. (Beyond Zork does, at least. Somewhat.)
* [include/miscemu.h] [msdos/dosmem.c] [msdos/int21.c]
Another shot at getting MS's generic error message facility
right.
* [msdos/int21.c]
Command.Com wanted to set its own PSP address. I let it.
Wed Aug 26 12:26:20 1998 Matthew Toseland <Matthew.Toseland@btinternet.com>
* [include/file.h] [misc/lzexpand.c]
Fixed LZCopy16 by fixing HFILE16/HFILE32 convertor macros so don't
convert lzw handles.
Tue Aug 25 22:22:55 1998 Uwe Bonnes <bon@elektron.ikp.physik.tu-darmstadt.de>
* [misc/registry.c]
In RegEnumvalue, ivalue == 0 is a legal request and should
return the first entry.
* [msdos/int21.c]
Add handling for Int21-48/49 in Win16. Makes blinker demo work.
* [windows/winproc.c]
Add Msg32A<->Msg32W translation for LB_ADDSTRING.
Tue Aug 25 21:03:31 1998 Kristian Nielsen <kristian.nielsen@risoe.dk>
* [windows/win.c]
Fix for SetParent(): MS Windows 3.11 does not clear the WS_CHILD
flag when a child window is reparented to the desktop window.
Mon Aug 24 20:55:22 1998 Berend Reitsma <berend at asset-control dot com>
* [controls/menu.c]
Menus created with SetMenuItemInfo and InsertMenuItem should
work now.
Sun Aug 23 23:23:23 1998 Alex Korobka <korobka@ams.sunysb.edu>
* [controls/combo.c]
Added CB_GETITEMHEIGHT.
* [windows/winpos.c]
WM_NCHITTEST, SWP_FRAMECHANGED bugfixes.
Sat Aug 22 21:15:29 1998 Alex Priem <alexp@sci.kun.nl>
* [files/profile.c] [include/windows.h]
Added GetPrivateProfileSectionNames[AW],GetPrivateProfileSectionW,
GetPrivateProfileStructW, GetProfileSectionW,
WriteProfileSection[AW], WritePrivateProfileStructW.
1998-09-13 18:32:00 +02:00
|
|
|
|
Release 970914
Thu Sep 11 18:24:56 1997 Philippe De Muyter <phdm@info.ucl.ac.be>
* [objects/dc.c]
In DC_SetupGCForPatBlt, replace R2_NOT by GXxor with (black xor white).
Tue Sep 9 23:04:02 1997 U. Bonnes <bon@elektron.ikp.physik.th-darmstadt.de>
* [memory/virtual.c]
Do not write debugging info unconditionally to stderr.
* [files/profile.c]
Call PROFILE_GetSection in PROFILE_GetString for key_name "" too.
* [misc/crtdll.c]
Many new functions.
* [include/windows.h] [windows/winpos.c]
ClientToScreen16 doesn't have a return value.
Sun Sep 7 10:06:39 1997 Alexandre Julliard <julliard@lrc.epfl.ch>
* [misc/main.c] [AUTHORS]
Update the list of contributors. Please let me know if I forgot
someone.
* [if1632/*.spec] [if1632/builtin.c] [tools/build.c]
Ordinal base for Win32 DLLs is now computed automatically from the
lowest ordinal found.
* [include/wintypes.h]
WINAPI is now defined as attribute((stdcall)). This will require
gcc to compile.
* [if1632/thunk.c]
Removed Win32 thunks (no longer needed with stdcall).
* [if1632/crtdll.spec] [misc/crtdll.c]
Make sure we only reference cdecl functions in the spec file.
* [objects/dc.c]
Use CapNotLast drawing style for 1-pixel wide lines.
* [tools/build.c]
Added 'double' argument type.
Added 'varargs' function type for Win32.
Made CallTo16_xxx functions stdcall.
Fri Sep 5 14:50:49 1997 Alex Korobka <alex@trantor.pharm.sunysb.edu>
* [tools/build.c] [windows/win.c] [windows/event.c] [windows/message.c]
More fixes to get message exchange closer to the original.
* [misc/spy.c]
Message logs now contain window names.
* [loader/resource.c] [loader/ne_resource.c] [loader/task.c]
[objects/cursoricon.c] [windows/user.c]
Added some obscure features to fix memory leaks.
Fri Sep 5 00:46:28 1997 Jan Willamowius <jan@janhh.shnet.org>
* [if1632/kernel32.spec] [win32/newfns.c]
Added stub for UTRegister() and UTUnRegister().
Thu Sep 4 12:03:12 1997 Frans van Dorsselaer <dorssel@rulhmpc49.LeidenUniv.nl>
* [controls/edit.c]
Allow ASCII codes > 127 in WM_CHAR.
Mon Sep 1 17:23:24 1997 Dimitrie O. Paun <dimi@mail.cs.toronto.edu>
* [controls/widgets.c]
In InitCommonControls, remember the name of the class
because lpszClassName was made to point to a local array
Added the ProgressBar to the list of implemented controls.
Call InitCommonControls from WIDGETS_Init to register all
implemented Common Controls.
* [include/commctrl.h]
Added misc decl for the Progress Bar.
* [controls/progress.c] [include/progress.h]
First attempt at implementiong the Progress Bar class.
* [objects/brush.h]
Implementation for GetSysColorBrush[16|32]
* [controls/status.c]
Use DrawEdge to draw the borders and fill the background
* [controls/uitools.c]
Added DrawDiagEdge32 and DrawRectEdge32
* [graphics/painting.c]
Implement DrawEdge[16|32]
Started DrawFrameControl32
Mon Sep 1 10:07:09 1997 Lawson Whitney <lawson_whitney@juno.com>
* [misc/comm.c] [include/windows.h]
SetCommEventMask returns a SEGPTR.
Sun Aug 31 23:28:32 1997 Marcus Meissner <msmeissn@cip.informatik.uni-erlangen.de>
* [loader/pe_image.c][loader/module.c][include/pe_image.h]
[include/module.h]
Cleaned up the whole Win32 library mess (a bit).
* [debugger/stabs.c]
If 'wine' has no absolute path and isn't found, check $PATH too.
* [misc/ole2nls.c]
Some fixes.
* [misc/ver.c]
Added support for PE style version resources.
* [memory/string.c]
Check for NULL pointers to _lstr* functions, just as Windows95 does.
* [multimedia/time.c]
Made list of timers a simple linked list.
* [loader/resource.c]
Netscape 3 seems to pass NEGATIVE resource Ids (in an
unsigned int, yes). Don't know why, fixed it anyway.
* [objects/bitmap.c]
LoadImageW added.
* [include/win.h][windows/win.c]
Change wIDmenu from UINT16 to UINT32 and changed the
SetWindow(Long|Word) accordingly.
Thu Aug 28 19:30:08 1997 Morten Welinder <terra@diku.dk>
* [include/windows.h]
Add a few more colors defined for Win95.
Add a few more brush styles.
* [windows/syscolor.c]
Add error checks for SYSCOLOR_SetColor, SYSCOLOR_Init,
GetSysColor16, GetSysColor32. Add support for above colors.
Sun Aug 24 16:22:57 1997 Andrew Taylor <andrew@riscan.com>
* [multimedia/mmsystem.c]
Changed mmioDescend to use mmio functions for file I/O, neccessary
for memory files.
1997-09-14 19:17:23 +02:00
|
|
|
/***********************************************************************
|
2001-06-13 22:13:18 +02:00
|
|
|
* GetModuleHandleA (KERNEL32.@)
|
2003-10-01 05:20:21 +02:00
|
|
|
*
|
|
|
|
* Get the handle of a dll loaded into the process address space.
|
|
|
|
*
|
|
|
|
* PARAMS
|
|
|
|
* module [I] Name of the dll
|
|
|
|
*
|
|
|
|
* RETURNS
|
|
|
|
* Success: A handle to the loaded dll.
|
|
|
|
* Failure: A NULL handle. Use GetLastError() to determine the cause.
|
Release 970914
Thu Sep 11 18:24:56 1997 Philippe De Muyter <phdm@info.ucl.ac.be>
* [objects/dc.c]
In DC_SetupGCForPatBlt, replace R2_NOT by GXxor with (black xor white).
Tue Sep 9 23:04:02 1997 U. Bonnes <bon@elektron.ikp.physik.th-darmstadt.de>
* [memory/virtual.c]
Do not write debugging info unconditionally to stderr.
* [files/profile.c]
Call PROFILE_GetSection in PROFILE_GetString for key_name "" too.
* [misc/crtdll.c]
Many new functions.
* [include/windows.h] [windows/winpos.c]
ClientToScreen16 doesn't have a return value.
Sun Sep 7 10:06:39 1997 Alexandre Julliard <julliard@lrc.epfl.ch>
* [misc/main.c] [AUTHORS]
Update the list of contributors. Please let me know if I forgot
someone.
* [if1632/*.spec] [if1632/builtin.c] [tools/build.c]
Ordinal base for Win32 DLLs is now computed automatically from the
lowest ordinal found.
* [include/wintypes.h]
WINAPI is now defined as attribute((stdcall)). This will require
gcc to compile.
* [if1632/thunk.c]
Removed Win32 thunks (no longer needed with stdcall).
* [if1632/crtdll.spec] [misc/crtdll.c]
Make sure we only reference cdecl functions in the spec file.
* [objects/dc.c]
Use CapNotLast drawing style for 1-pixel wide lines.
* [tools/build.c]
Added 'double' argument type.
Added 'varargs' function type for Win32.
Made CallTo16_xxx functions stdcall.
Fri Sep 5 14:50:49 1997 Alex Korobka <alex@trantor.pharm.sunysb.edu>
* [tools/build.c] [windows/win.c] [windows/event.c] [windows/message.c]
More fixes to get message exchange closer to the original.
* [misc/spy.c]
Message logs now contain window names.
* [loader/resource.c] [loader/ne_resource.c] [loader/task.c]
[objects/cursoricon.c] [windows/user.c]
Added some obscure features to fix memory leaks.
Fri Sep 5 00:46:28 1997 Jan Willamowius <jan@janhh.shnet.org>
* [if1632/kernel32.spec] [win32/newfns.c]
Added stub for UTRegister() and UTUnRegister().
Thu Sep 4 12:03:12 1997 Frans van Dorsselaer <dorssel@rulhmpc49.LeidenUniv.nl>
* [controls/edit.c]
Allow ASCII codes > 127 in WM_CHAR.
Mon Sep 1 17:23:24 1997 Dimitrie O. Paun <dimi@mail.cs.toronto.edu>
* [controls/widgets.c]
In InitCommonControls, remember the name of the class
because lpszClassName was made to point to a local array
Added the ProgressBar to the list of implemented controls.
Call InitCommonControls from WIDGETS_Init to register all
implemented Common Controls.
* [include/commctrl.h]
Added misc decl for the Progress Bar.
* [controls/progress.c] [include/progress.h]
First attempt at implementiong the Progress Bar class.
* [objects/brush.h]
Implementation for GetSysColorBrush[16|32]
* [controls/status.c]
Use DrawEdge to draw the borders and fill the background
* [controls/uitools.c]
Added DrawDiagEdge32 and DrawRectEdge32
* [graphics/painting.c]
Implement DrawEdge[16|32]
Started DrawFrameControl32
Mon Sep 1 10:07:09 1997 Lawson Whitney <lawson_whitney@juno.com>
* [misc/comm.c] [include/windows.h]
SetCommEventMask returns a SEGPTR.
Sun Aug 31 23:28:32 1997 Marcus Meissner <msmeissn@cip.informatik.uni-erlangen.de>
* [loader/pe_image.c][loader/module.c][include/pe_image.h]
[include/module.h]
Cleaned up the whole Win32 library mess (a bit).
* [debugger/stabs.c]
If 'wine' has no absolute path and isn't found, check $PATH too.
* [misc/ole2nls.c]
Some fixes.
* [misc/ver.c]
Added support for PE style version resources.
* [memory/string.c]
Check for NULL pointers to _lstr* functions, just as Windows95 does.
* [multimedia/time.c]
Made list of timers a simple linked list.
* [loader/resource.c]
Netscape 3 seems to pass NEGATIVE resource Ids (in an
unsigned int, yes). Don't know why, fixed it anyway.
* [objects/bitmap.c]
LoadImageW added.
* [include/win.h][windows/win.c]
Change wIDmenu from UINT16 to UINT32 and changed the
SetWindow(Long|Word) accordingly.
Thu Aug 28 19:30:08 1997 Morten Welinder <terra@diku.dk>
* [include/windows.h]
Add a few more colors defined for Win95.
Add a few more brush styles.
* [windows/syscolor.c]
Add error checks for SYSCOLOR_SetColor, SYSCOLOR_Init,
GetSysColor16, GetSysColor32. Add support for above colors.
Sun Aug 24 16:22:57 1997 Andrew Taylor <andrew@riscan.com>
* [multimedia/mmsystem.c]
Changed mmioDescend to use mmio functions for file I/O, neccessary
for memory files.
1997-09-14 19:17:23 +02:00
|
|
|
*/
|
2012-03-08 15:00:25 +01:00
|
|
|
HMODULE WINAPI DECLSPEC_HOTPATCH GetModuleHandleA(LPCSTR module)
|
Release 970914
Thu Sep 11 18:24:56 1997 Philippe De Muyter <phdm@info.ucl.ac.be>
* [objects/dc.c]
In DC_SetupGCForPatBlt, replace R2_NOT by GXxor with (black xor white).
Tue Sep 9 23:04:02 1997 U. Bonnes <bon@elektron.ikp.physik.th-darmstadt.de>
* [memory/virtual.c]
Do not write debugging info unconditionally to stderr.
* [files/profile.c]
Call PROFILE_GetSection in PROFILE_GetString for key_name "" too.
* [misc/crtdll.c]
Many new functions.
* [include/windows.h] [windows/winpos.c]
ClientToScreen16 doesn't have a return value.
Sun Sep 7 10:06:39 1997 Alexandre Julliard <julliard@lrc.epfl.ch>
* [misc/main.c] [AUTHORS]
Update the list of contributors. Please let me know if I forgot
someone.
* [if1632/*.spec] [if1632/builtin.c] [tools/build.c]
Ordinal base for Win32 DLLs is now computed automatically from the
lowest ordinal found.
* [include/wintypes.h]
WINAPI is now defined as attribute((stdcall)). This will require
gcc to compile.
* [if1632/thunk.c]
Removed Win32 thunks (no longer needed with stdcall).
* [if1632/crtdll.spec] [misc/crtdll.c]
Make sure we only reference cdecl functions in the spec file.
* [objects/dc.c]
Use CapNotLast drawing style for 1-pixel wide lines.
* [tools/build.c]
Added 'double' argument type.
Added 'varargs' function type for Win32.
Made CallTo16_xxx functions stdcall.
Fri Sep 5 14:50:49 1997 Alex Korobka <alex@trantor.pharm.sunysb.edu>
* [tools/build.c] [windows/win.c] [windows/event.c] [windows/message.c]
More fixes to get message exchange closer to the original.
* [misc/spy.c]
Message logs now contain window names.
* [loader/resource.c] [loader/ne_resource.c] [loader/task.c]
[objects/cursoricon.c] [windows/user.c]
Added some obscure features to fix memory leaks.
Fri Sep 5 00:46:28 1997 Jan Willamowius <jan@janhh.shnet.org>
* [if1632/kernel32.spec] [win32/newfns.c]
Added stub for UTRegister() and UTUnRegister().
Thu Sep 4 12:03:12 1997 Frans van Dorsselaer <dorssel@rulhmpc49.LeidenUniv.nl>
* [controls/edit.c]
Allow ASCII codes > 127 in WM_CHAR.
Mon Sep 1 17:23:24 1997 Dimitrie O. Paun <dimi@mail.cs.toronto.edu>
* [controls/widgets.c]
In InitCommonControls, remember the name of the class
because lpszClassName was made to point to a local array
Added the ProgressBar to the list of implemented controls.
Call InitCommonControls from WIDGETS_Init to register all
implemented Common Controls.
* [include/commctrl.h]
Added misc decl for the Progress Bar.
* [controls/progress.c] [include/progress.h]
First attempt at implementiong the Progress Bar class.
* [objects/brush.h]
Implementation for GetSysColorBrush[16|32]
* [controls/status.c]
Use DrawEdge to draw the borders and fill the background
* [controls/uitools.c]
Added DrawDiagEdge32 and DrawRectEdge32
* [graphics/painting.c]
Implement DrawEdge[16|32]
Started DrawFrameControl32
Mon Sep 1 10:07:09 1997 Lawson Whitney <lawson_whitney@juno.com>
* [misc/comm.c] [include/windows.h]
SetCommEventMask returns a SEGPTR.
Sun Aug 31 23:28:32 1997 Marcus Meissner <msmeissn@cip.informatik.uni-erlangen.de>
* [loader/pe_image.c][loader/module.c][include/pe_image.h]
[include/module.h]
Cleaned up the whole Win32 library mess (a bit).
* [debugger/stabs.c]
If 'wine' has no absolute path and isn't found, check $PATH too.
* [misc/ole2nls.c]
Some fixes.
* [misc/ver.c]
Added support for PE style version resources.
* [memory/string.c]
Check for NULL pointers to _lstr* functions, just as Windows95 does.
* [multimedia/time.c]
Made list of timers a simple linked list.
* [loader/resource.c]
Netscape 3 seems to pass NEGATIVE resource Ids (in an
unsigned int, yes). Don't know why, fixed it anyway.
* [objects/bitmap.c]
LoadImageW added.
* [include/win.h][windows/win.c]
Change wIDmenu from UINT16 to UINT32 and changed the
SetWindow(Long|Word) accordingly.
Thu Aug 28 19:30:08 1997 Morten Welinder <terra@diku.dk>
* [include/windows.h]
Add a few more colors defined for Win95.
Add a few more brush styles.
* [windows/syscolor.c]
Add error checks for SYSCOLOR_SetColor, SYSCOLOR_Init,
GetSysColor16, GetSysColor32. Add support for above colors.
Sun Aug 24 16:22:57 1997 Andrew Taylor <andrew@riscan.com>
* [multimedia/mmsystem.c]
Changed mmioDescend to use mmio functions for file I/O, neccessary
for memory files.
1997-09-14 19:17:23 +02:00
|
|
|
{
|
2006-05-27 10:57:17 +02:00
|
|
|
HMODULE ret;
|
1999-04-18 14:14:06 +02:00
|
|
|
|
2012-04-05 11:16:37 +02:00
|
|
|
GetModuleHandleExA( GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT, module, &ret );
|
2006-05-27 10:57:17 +02:00
|
|
|
return ret;
|
Release 970914
Thu Sep 11 18:24:56 1997 Philippe De Muyter <phdm@info.ucl.ac.be>
* [objects/dc.c]
In DC_SetupGCForPatBlt, replace R2_NOT by GXxor with (black xor white).
Tue Sep 9 23:04:02 1997 U. Bonnes <bon@elektron.ikp.physik.th-darmstadt.de>
* [memory/virtual.c]
Do not write debugging info unconditionally to stderr.
* [files/profile.c]
Call PROFILE_GetSection in PROFILE_GetString for key_name "" too.
* [misc/crtdll.c]
Many new functions.
* [include/windows.h] [windows/winpos.c]
ClientToScreen16 doesn't have a return value.
Sun Sep 7 10:06:39 1997 Alexandre Julliard <julliard@lrc.epfl.ch>
* [misc/main.c] [AUTHORS]
Update the list of contributors. Please let me know if I forgot
someone.
* [if1632/*.spec] [if1632/builtin.c] [tools/build.c]
Ordinal base for Win32 DLLs is now computed automatically from the
lowest ordinal found.
* [include/wintypes.h]
WINAPI is now defined as attribute((stdcall)). This will require
gcc to compile.
* [if1632/thunk.c]
Removed Win32 thunks (no longer needed with stdcall).
* [if1632/crtdll.spec] [misc/crtdll.c]
Make sure we only reference cdecl functions in the spec file.
* [objects/dc.c]
Use CapNotLast drawing style for 1-pixel wide lines.
* [tools/build.c]
Added 'double' argument type.
Added 'varargs' function type for Win32.
Made CallTo16_xxx functions stdcall.
Fri Sep 5 14:50:49 1997 Alex Korobka <alex@trantor.pharm.sunysb.edu>
* [tools/build.c] [windows/win.c] [windows/event.c] [windows/message.c]
More fixes to get message exchange closer to the original.
* [misc/spy.c]
Message logs now contain window names.
* [loader/resource.c] [loader/ne_resource.c] [loader/task.c]
[objects/cursoricon.c] [windows/user.c]
Added some obscure features to fix memory leaks.
Fri Sep 5 00:46:28 1997 Jan Willamowius <jan@janhh.shnet.org>
* [if1632/kernel32.spec] [win32/newfns.c]
Added stub for UTRegister() and UTUnRegister().
Thu Sep 4 12:03:12 1997 Frans van Dorsselaer <dorssel@rulhmpc49.LeidenUniv.nl>
* [controls/edit.c]
Allow ASCII codes > 127 in WM_CHAR.
Mon Sep 1 17:23:24 1997 Dimitrie O. Paun <dimi@mail.cs.toronto.edu>
* [controls/widgets.c]
In InitCommonControls, remember the name of the class
because lpszClassName was made to point to a local array
Added the ProgressBar to the list of implemented controls.
Call InitCommonControls from WIDGETS_Init to register all
implemented Common Controls.
* [include/commctrl.h]
Added misc decl for the Progress Bar.
* [controls/progress.c] [include/progress.h]
First attempt at implementiong the Progress Bar class.
* [objects/brush.h]
Implementation for GetSysColorBrush[16|32]
* [controls/status.c]
Use DrawEdge to draw the borders and fill the background
* [controls/uitools.c]
Added DrawDiagEdge32 and DrawRectEdge32
* [graphics/painting.c]
Implement DrawEdge[16|32]
Started DrawFrameControl32
Mon Sep 1 10:07:09 1997 Lawson Whitney <lawson_whitney@juno.com>
* [misc/comm.c] [include/windows.h]
SetCommEventMask returns a SEGPTR.
Sun Aug 31 23:28:32 1997 Marcus Meissner <msmeissn@cip.informatik.uni-erlangen.de>
* [loader/pe_image.c][loader/module.c][include/pe_image.h]
[include/module.h]
Cleaned up the whole Win32 library mess (a bit).
* [debugger/stabs.c]
If 'wine' has no absolute path and isn't found, check $PATH too.
* [misc/ole2nls.c]
Some fixes.
* [misc/ver.c]
Added support for PE style version resources.
* [memory/string.c]
Check for NULL pointers to _lstr* functions, just as Windows95 does.
* [multimedia/time.c]
Made list of timers a simple linked list.
* [loader/resource.c]
Netscape 3 seems to pass NEGATIVE resource Ids (in an
unsigned int, yes). Don't know why, fixed it anyway.
* [objects/bitmap.c]
LoadImageW added.
* [include/win.h][windows/win.c]
Change wIDmenu from UINT16 to UINT32 and changed the
SetWindow(Long|Word) accordingly.
Thu Aug 28 19:30:08 1997 Morten Welinder <terra@diku.dk>
* [include/windows.h]
Add a few more colors defined for Win95.
Add a few more brush styles.
* [windows/syscolor.c]
Add error checks for SYSCOLOR_SetColor, SYSCOLOR_Init,
GetSysColor16, GetSysColor32. Add support for above colors.
Sun Aug 24 16:22:57 1997 Andrew Taylor <andrew@riscan.com>
* [multimedia/mmsystem.c]
Changed mmioDescend to use mmio functions for file I/O, neccessary
for memory files.
1997-09-14 19:17:23 +02:00
|
|
|
}
|
|
|
|
|
2000-03-28 22:22:59 +02:00
|
|
|
/***********************************************************************
|
2001-06-21 01:03:14 +02:00
|
|
|
* GetModuleHandleW (KERNEL32.@)
|
2003-10-01 05:20:21 +02:00
|
|
|
*
|
|
|
|
* Unicode version of GetModuleHandleA.
|
2000-03-28 22:22:59 +02:00
|
|
|
*/
|
1999-02-26 12:11:13 +01:00
|
|
|
HMODULE WINAPI GetModuleHandleW(LPCWSTR module)
|
Release 970914
Thu Sep 11 18:24:56 1997 Philippe De Muyter <phdm@info.ucl.ac.be>
* [objects/dc.c]
In DC_SetupGCForPatBlt, replace R2_NOT by GXxor with (black xor white).
Tue Sep 9 23:04:02 1997 U. Bonnes <bon@elektron.ikp.physik.th-darmstadt.de>
* [memory/virtual.c]
Do not write debugging info unconditionally to stderr.
* [files/profile.c]
Call PROFILE_GetSection in PROFILE_GetString for key_name "" too.
* [misc/crtdll.c]
Many new functions.
* [include/windows.h] [windows/winpos.c]
ClientToScreen16 doesn't have a return value.
Sun Sep 7 10:06:39 1997 Alexandre Julliard <julliard@lrc.epfl.ch>
* [misc/main.c] [AUTHORS]
Update the list of contributors. Please let me know if I forgot
someone.
* [if1632/*.spec] [if1632/builtin.c] [tools/build.c]
Ordinal base for Win32 DLLs is now computed automatically from the
lowest ordinal found.
* [include/wintypes.h]
WINAPI is now defined as attribute((stdcall)). This will require
gcc to compile.
* [if1632/thunk.c]
Removed Win32 thunks (no longer needed with stdcall).
* [if1632/crtdll.spec] [misc/crtdll.c]
Make sure we only reference cdecl functions in the spec file.
* [objects/dc.c]
Use CapNotLast drawing style for 1-pixel wide lines.
* [tools/build.c]
Added 'double' argument type.
Added 'varargs' function type for Win32.
Made CallTo16_xxx functions stdcall.
Fri Sep 5 14:50:49 1997 Alex Korobka <alex@trantor.pharm.sunysb.edu>
* [tools/build.c] [windows/win.c] [windows/event.c] [windows/message.c]
More fixes to get message exchange closer to the original.
* [misc/spy.c]
Message logs now contain window names.
* [loader/resource.c] [loader/ne_resource.c] [loader/task.c]
[objects/cursoricon.c] [windows/user.c]
Added some obscure features to fix memory leaks.
Fri Sep 5 00:46:28 1997 Jan Willamowius <jan@janhh.shnet.org>
* [if1632/kernel32.spec] [win32/newfns.c]
Added stub for UTRegister() and UTUnRegister().
Thu Sep 4 12:03:12 1997 Frans van Dorsselaer <dorssel@rulhmpc49.LeidenUniv.nl>
* [controls/edit.c]
Allow ASCII codes > 127 in WM_CHAR.
Mon Sep 1 17:23:24 1997 Dimitrie O. Paun <dimi@mail.cs.toronto.edu>
* [controls/widgets.c]
In InitCommonControls, remember the name of the class
because lpszClassName was made to point to a local array
Added the ProgressBar to the list of implemented controls.
Call InitCommonControls from WIDGETS_Init to register all
implemented Common Controls.
* [include/commctrl.h]
Added misc decl for the Progress Bar.
* [controls/progress.c] [include/progress.h]
First attempt at implementiong the Progress Bar class.
* [objects/brush.h]
Implementation for GetSysColorBrush[16|32]
* [controls/status.c]
Use DrawEdge to draw the borders and fill the background
* [controls/uitools.c]
Added DrawDiagEdge32 and DrawRectEdge32
* [graphics/painting.c]
Implement DrawEdge[16|32]
Started DrawFrameControl32
Mon Sep 1 10:07:09 1997 Lawson Whitney <lawson_whitney@juno.com>
* [misc/comm.c] [include/windows.h]
SetCommEventMask returns a SEGPTR.
Sun Aug 31 23:28:32 1997 Marcus Meissner <msmeissn@cip.informatik.uni-erlangen.de>
* [loader/pe_image.c][loader/module.c][include/pe_image.h]
[include/module.h]
Cleaned up the whole Win32 library mess (a bit).
* [debugger/stabs.c]
If 'wine' has no absolute path and isn't found, check $PATH too.
* [misc/ole2nls.c]
Some fixes.
* [misc/ver.c]
Added support for PE style version resources.
* [memory/string.c]
Check for NULL pointers to _lstr* functions, just as Windows95 does.
* [multimedia/time.c]
Made list of timers a simple linked list.
* [loader/resource.c]
Netscape 3 seems to pass NEGATIVE resource Ids (in an
unsigned int, yes). Don't know why, fixed it anyway.
* [objects/bitmap.c]
LoadImageW added.
* [include/win.h][windows/win.c]
Change wIDmenu from UINT16 to UINT32 and changed the
SetWindow(Long|Word) accordingly.
Thu Aug 28 19:30:08 1997 Morten Welinder <terra@diku.dk>
* [include/windows.h]
Add a few more colors defined for Win95.
Add a few more brush styles.
* [windows/syscolor.c]
Add error checks for SYSCOLOR_SetColor, SYSCOLOR_Init,
GetSysColor16, GetSysColor32. Add support for above colors.
Sun Aug 24 16:22:57 1997 Andrew Taylor <andrew@riscan.com>
* [multimedia/mmsystem.c]
Changed mmioDescend to use mmio functions for file I/O, neccessary
for memory files.
1997-09-14 19:17:23 +02:00
|
|
|
{
|
2006-05-27 10:57:17 +02:00
|
|
|
HMODULE ret;
|
2003-03-07 00:41:37 +01:00
|
|
|
|
2012-04-05 11:16:37 +02:00
|
|
|
GetModuleHandleExW( GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT, module, &ret );
|
2003-03-07 00:41:37 +01:00
|
|
|
return ret;
|
Release 970914
Thu Sep 11 18:24:56 1997 Philippe De Muyter <phdm@info.ucl.ac.be>
* [objects/dc.c]
In DC_SetupGCForPatBlt, replace R2_NOT by GXxor with (black xor white).
Tue Sep 9 23:04:02 1997 U. Bonnes <bon@elektron.ikp.physik.th-darmstadt.de>
* [memory/virtual.c]
Do not write debugging info unconditionally to stderr.
* [files/profile.c]
Call PROFILE_GetSection in PROFILE_GetString for key_name "" too.
* [misc/crtdll.c]
Many new functions.
* [include/windows.h] [windows/winpos.c]
ClientToScreen16 doesn't have a return value.
Sun Sep 7 10:06:39 1997 Alexandre Julliard <julliard@lrc.epfl.ch>
* [misc/main.c] [AUTHORS]
Update the list of contributors. Please let me know if I forgot
someone.
* [if1632/*.spec] [if1632/builtin.c] [tools/build.c]
Ordinal base for Win32 DLLs is now computed automatically from the
lowest ordinal found.
* [include/wintypes.h]
WINAPI is now defined as attribute((stdcall)). This will require
gcc to compile.
* [if1632/thunk.c]
Removed Win32 thunks (no longer needed with stdcall).
* [if1632/crtdll.spec] [misc/crtdll.c]
Make sure we only reference cdecl functions in the spec file.
* [objects/dc.c]
Use CapNotLast drawing style for 1-pixel wide lines.
* [tools/build.c]
Added 'double' argument type.
Added 'varargs' function type for Win32.
Made CallTo16_xxx functions stdcall.
Fri Sep 5 14:50:49 1997 Alex Korobka <alex@trantor.pharm.sunysb.edu>
* [tools/build.c] [windows/win.c] [windows/event.c] [windows/message.c]
More fixes to get message exchange closer to the original.
* [misc/spy.c]
Message logs now contain window names.
* [loader/resource.c] [loader/ne_resource.c] [loader/task.c]
[objects/cursoricon.c] [windows/user.c]
Added some obscure features to fix memory leaks.
Fri Sep 5 00:46:28 1997 Jan Willamowius <jan@janhh.shnet.org>
* [if1632/kernel32.spec] [win32/newfns.c]
Added stub for UTRegister() and UTUnRegister().
Thu Sep 4 12:03:12 1997 Frans van Dorsselaer <dorssel@rulhmpc49.LeidenUniv.nl>
* [controls/edit.c]
Allow ASCII codes > 127 in WM_CHAR.
Mon Sep 1 17:23:24 1997 Dimitrie O. Paun <dimi@mail.cs.toronto.edu>
* [controls/widgets.c]
In InitCommonControls, remember the name of the class
because lpszClassName was made to point to a local array
Added the ProgressBar to the list of implemented controls.
Call InitCommonControls from WIDGETS_Init to register all
implemented Common Controls.
* [include/commctrl.h]
Added misc decl for the Progress Bar.
* [controls/progress.c] [include/progress.h]
First attempt at implementiong the Progress Bar class.
* [objects/brush.h]
Implementation for GetSysColorBrush[16|32]
* [controls/status.c]
Use DrawEdge to draw the borders and fill the background
* [controls/uitools.c]
Added DrawDiagEdge32 and DrawRectEdge32
* [graphics/painting.c]
Implement DrawEdge[16|32]
Started DrawFrameControl32
Mon Sep 1 10:07:09 1997 Lawson Whitney <lawson_whitney@juno.com>
* [misc/comm.c] [include/windows.h]
SetCommEventMask returns a SEGPTR.
Sun Aug 31 23:28:32 1997 Marcus Meissner <msmeissn@cip.informatik.uni-erlangen.de>
* [loader/pe_image.c][loader/module.c][include/pe_image.h]
[include/module.h]
Cleaned up the whole Win32 library mess (a bit).
* [debugger/stabs.c]
If 'wine' has no absolute path and isn't found, check $PATH too.
* [misc/ole2nls.c]
Some fixes.
* [misc/ver.c]
Added support for PE style version resources.
* [memory/string.c]
Check for NULL pointers to _lstr* functions, just as Windows95 does.
* [multimedia/time.c]
Made list of timers a simple linked list.
* [loader/resource.c]
Netscape 3 seems to pass NEGATIVE resource Ids (in an
unsigned int, yes). Don't know why, fixed it anyway.
* [objects/bitmap.c]
LoadImageW added.
* [include/win.h][windows/win.c]
Change wIDmenu from UINT16 to UINT32 and changed the
SetWindow(Long|Word) accordingly.
Thu Aug 28 19:30:08 1997 Morten Welinder <terra@diku.dk>
* [include/windows.h]
Add a few more colors defined for Win95.
Add a few more brush styles.
* [windows/syscolor.c]
Add error checks for SYSCOLOR_SetColor, SYSCOLOR_Init,
GetSysColor16, GetSysColor32. Add support for above colors.
Sun Aug 24 16:22:57 1997 Andrew Taylor <andrew@riscan.com>
* [multimedia/mmsystem.c]
Changed mmioDescend to use mmio functions for file I/O, neccessary
for memory files.
1997-09-14 19:17:23 +02:00
|
|
|
}
|
|
|
|
|
Release 950430
Sat Apr 29 20:42:01 1995 Alexandre Julliard (julliard@sunsite.unc.edu)
* [controls/static.c]
Fixed painting of SS_*FRAME controls.
* [if1632/callback.c]
Pass the window instance as DS to the 16-bit window procedure.
Rewrote Catch() and Throw() to make them work with multiple tasks.
* [loader/main.c]
New function MAIN_Init() to perform initializations before the
first task is started instead of doing them in InitApp().
Temporary hack to command-line parsing to load one program per
command-line argument, to make testing task-switching easier.
* [loader/*.c]
Reimplemented modules to use a Windows-compatible layout and to
allow multiple tasks and multiple module instances. Not really
finished yet.
* [loader/task.c] [misc/exec.c]
Reimplemented tasks to use a common address space, and implemented
preliminary task-switching capabilities.
* [memory/global.c]
Fixed bug in GlobalNext().
* [misc/main.c]
Updated the list of contributors. Let me know if I forgot someone.
* [miscemu/int21.c]
Use one DTA per task instead of a global one.
* [objects/bitblt.c]
Fixed bug in BitBlt() that could cause BadMatch errors.
* [tools/build.c]
Added new function type 'stub', that makes possible to export an
unimplemented function by name as well as by ordinal. This will
avoid loading errors for unimplemented functions.
Generate an in-memory module layout for built-in DLLs so that the
same code can be used for built-in and loaded modules.
Changed relay code to make it unnecessary to save the value of the
BP register.
* [windows/message.c]
Implemented multiple message queues and preliminary task-switching
capabilities. Inter-task SendMessage() calls are not implemented
yet and will probably cause crashes if used.
* [windows/property.c]
Reimplemented properties and allocate them on the USER heap.
* [windows/win.c]
Fixed bug in SetWindowWord().
Reimplemented EnumWindows() and EnumTaskWindows().
Tue Apr 18 09:48:38 1995 Bernd Schmidt <crux@pool.informatik.rwth-aachen.de>
* [misc/main.c]
GetSystemParametersInfo(): Additional action SPI_GETICONTITLEFONT.
* [loader/resource.c]
Removed the check for NE_SEGFLAGS_EXECUTEONLY, since it broke
control.exe.
Fixed icon loading.
* [objects/font.c] [include/windows.h]
Fixed a bug in InitFontsList() and worked on the EnumFonts()
functions to make them comprehensible.
* [controls/button.c]
Fixed my previous patch to handle LBUTTONUP messages.
Fri Apr 14 11:41:28 1995 Cameron Heide (heide@ee.ualberta.ca)
* [misc/network.c, misc/dos_fs.c]
Implemented WNetGetConnection. All that is currently
supported are drives, for which the remote name is simply
the redirected UNIX directory name.
* [miscemu/int2?.c]
More drive number validity checking.
Wed Apr 12 11:28:37 1995 Bernd Schmidt <crux@pool.informatik.rwth-aachen.de>
* [controls/listbox.c]
Oops, my previous change to ListBoxDirectory broke the Borland
file open dialog. Fixed.
Mon Apr 10 23:17:12 1995 Martin von Loewis <loewis@informatik.hu-berlin.de>
* [if1632/ole2nls.spec] [misc/ole2nls.c] [misc/Imakefile]
New file ole2nls.c. Added stubs for GetUserDefaultLCID,
GetSystemDefaultLCID, GetUserDefaultLangID, GetSystemDefaultLangID.
Mon Apr 10 10:05:18 1995 Bernd Schmidt <crux@pool.informatik.rwth-aachen.de>
* [memory/global.c] [memory/local.c] [include/windows.h]
GlobalReAlloc(): If GMEM_MODIFY is set, don't resize the block.
LocalReAlloc(): Same for LMEM_MODIFY.
* [controls/listbox.c]
Fixed a bug in ListBoxDirectory that prevented commdlg from working.
Check for errors in some more places.
* [if1632/gdi.spec] [if1632/user.spec]
16 bit callback functions should be passed as segptrs.
* [include/dlls.h] [loader/ne_image.c] [loader/selector.c]
[loader/library.c]
Prevent a DLL from being initialized twice (Borlands Resource
Workshop used to do this).
Provide an additional flag for each w_file that indicates whether
it's an EXE or a DLL, for combinations like pbrush.exe/.dll.
* [controls/button.c]
Handle LBUTTONUP messages even if the button no longer has the
capture (for WinHelp).
* [include/wintypes.h]
FARPROC is now a segptr for the emulator and a function
pointer for the library.
* [misc/commdlg.c] [misc/commdlg.h]
Cleaned the file dialogs up a little. They now work reasonably well,
although there are still some problems (e.g. files are initially
invisible).
* [windows/class.c] [if1632/user.spec] [include/windows.h]
GetClassInfo() must take a segptr, as it checks whether the
highword is zero.
GetClassName() called the wrong atom function. No surprise it didn't
find anything.
* [misc/lstr.c]
AnsiToOem() and OemToAnsi() didn't terminate the strings. Fixed.
Removed some warnings.
* [if1632/relay.c] [if1632/ddeml.spec] [include/dlls.h]
New spec file for the 3.1 DDEML DDL.
* [controls/menu.c]
Small fix to ChangeMenu - mask out the obsolete flags
(MF_APPEND == MF_OWNERDRAW, this led to problems). It also had
problems with the MF_BYPOSITION flag.
* [windows/message.c]
SendMessage(): call the WH_CALLWNDPROC hook function. This is rather
ugly, I'm afraid. Windows probably passes a pointer to the 16 bit
stack for speed reasons.
* [windows/hook.c] [include/windows.h]
Set/HookWindowsHook() shouldn't just call their *Ex counterparts, as
they have slightly different semantics.
MS Hearts now works somewhat, if you disable the new builtin DDEML.
The graphics are completely messed up, though.
1995-04-30 12:05:20 +02:00
|
|
|
|
Release 961215
Sun Dec 15 16:18:15 1996 Alexandre Julliard <julliard@lrc.epfl.ch>
* [graphics/x11drv/bitblt.c]
Fixed BITBLT_StretchImage for partially covered or inverted
bitmaps.
* [objects/dib.c]
Fixed the upside-down bitmap problem.
Sat Dec 14 02:49:57 1996 Thomas Sandford <t.d.g.sandford@prds-grn.demon.co.uk>
* [if1632/user32.spec]
IsMenu and RemoveMenu added (use existing Win16 functions).
* [include/windows.h]
Corrections to BITMAPINFOHEADER structure.
* [loader/module.c] [if1632/kernel32.spec]
New function GetModuleFileName32A (heavily based on original
Win16 version).
* [loader/pe_image.c]
Hack to allow files with short PE header to be loaded (e.g.
COMDLG32.DLL from Win32s).
* [misc/winsock_async.c]
#if out EIDRM case (not present in FreeBSD).
* [tools/build.c]
Remove trailing comments from .s files generated by build
as these break assembly when not run through pre-processor.
* [windows/graphics.c] [if1632/gdi32.spec]
New function Polyline32 - based on original Polyline. Needs
metafile support adding still.
Fri Dec 13 13:04:06 1996 Bruce Milner <Bruce.Milner@genetics.utah.edu>
* [win32/findfile.c] [if1632/kernel.spec]
FindFirstFile32A(): Use dos current directory for drive prefixes.
FindNextFile32A(): Fill in file attribute information.
Implement FindFirstFile16, FindNextFile16, FindClose16.
* [files/drive.c]
GetCurrentDirectory32A - Fix problem with null 3rd character in
string.
Tue Dec 10 14:49:07 1996 Marcus Meissner <msmeissn@cip.informatik.uni-erlangen.de>
* [windows/painting.c][windows/message.c]
Don't use linked lists to call SendMessage(), for it might destroy
the current listentry.
* [misc/registry.c]
Fixed temporary file saving (rename doesn't work across
partitions).
* [files/*.c]
GetFullPathName*,GetDriveType32A fixed, CreateDirectoryEx*,
GetVolumeInformation32W fixed.
* [win32/process.c][if1632/kernel.spec][if1632/kernel32.spec]
LoadLibrary* updated to new naming std., *32W added.
* [win32/console.c] [include/wincon.h]
Additions for NT commandline executables.
* [if1632/advapi32.spec][if1632/kernel32.spec][win32/init.c]
GetUserName32W added, GetComputerName32W added,
GetStartupInfo32W added, GetSystemInfo updated to NT standard.
* [windows/msgbox.c][misc/shell.c][windows/graphics.c]
MessageBox32W, ShellAbout32W, CommandLineToArgvW, Polygon32 added.
* [misc/crtdll.c][include/crtdll.h][if1632/crtdll.spec][misc/ntdll.c]
[if1632/ntdll.spec]
Lot of new unicode functions added (needed for NT).
* [loader/pe_image.c]
NtCurrentTeb added.
Tue Dec 10 22:39:33 1996 Albrecht Kleine <kleine@ak.sax.de>
* [windows/keyboard.c]
Rewrote function TranslateAccelerator().
Mon Dec 9 14:52:13 1996 Slaven Rezic <eserte@cs.tu-berlin.de>
* [windows/defwnd.c]
DEFWND_SetText(): Set icon name.
Sun Dec 8 23:30:00 1996 Alex Korobka <alex@trantor.pharm.sunysb.edu>
* [loader/signal.c] [misc/winsock.c] [misc/winsock_async.c]
[if1632/winsock.spec]
IPC resource cleanup, bugfixes.
* [windows/dialog.c] [windows/defdlg.c]
More DefDlgProc() fixes.
Sun Dec 8 14:01:42 1996 Vadim Strizhevsky <striv@ms.com>
* [misc/clipboard.c] [objects/font.c] [win32/init.c]
[win32/newfns.c] [windows/graphics.c]
Added a few WIN32 functions which needed to run some win32
accessories. Clock should now work almost as well as 16 bit version.
Add: RegisterClipboardFormat32W GetTextExtentExPoint32*
GetModuleHandleW, DisableThreadLibraryCalls (empty stub),
Polygon32
Fix: Polygon16 possible memory leak on error return.
1996-12-15 20:45:59 +01:00
|
|
|
/***********************************************************************
|
2001-06-13 22:13:18 +02:00
|
|
|
* GetModuleFileNameA (KERNEL32.@)
|
2000-02-20 20:15:34 +01:00
|
|
|
*
|
2003-10-01 05:20:21 +02:00
|
|
|
* Get the file name of a loaded module from its handle.
|
|
|
|
*
|
|
|
|
* RETURNS
|
|
|
|
* Success: The length of the file name, excluding the terminating NUL.
|
|
|
|
* Failure: 0. Use GetLastError() to determine the cause.
|
|
|
|
*
|
|
|
|
* NOTES
|
2010-05-14 17:08:37 +02:00
|
|
|
* This function always returns the long path of hModule
|
2004-12-17 20:01:22 +01:00
|
|
|
* The function doesn't write a terminating '\0' if the buffer is too
|
2004-05-19 05:22:55 +02:00
|
|
|
* small.
|
Release 961215
Sun Dec 15 16:18:15 1996 Alexandre Julliard <julliard@lrc.epfl.ch>
* [graphics/x11drv/bitblt.c]
Fixed BITBLT_StretchImage for partially covered or inverted
bitmaps.
* [objects/dib.c]
Fixed the upside-down bitmap problem.
Sat Dec 14 02:49:57 1996 Thomas Sandford <t.d.g.sandford@prds-grn.demon.co.uk>
* [if1632/user32.spec]
IsMenu and RemoveMenu added (use existing Win16 functions).
* [include/windows.h]
Corrections to BITMAPINFOHEADER structure.
* [loader/module.c] [if1632/kernel32.spec]
New function GetModuleFileName32A (heavily based on original
Win16 version).
* [loader/pe_image.c]
Hack to allow files with short PE header to be loaded (e.g.
COMDLG32.DLL from Win32s).
* [misc/winsock_async.c]
#if out EIDRM case (not present in FreeBSD).
* [tools/build.c]
Remove trailing comments from .s files generated by build
as these break assembly when not run through pre-processor.
* [windows/graphics.c] [if1632/gdi32.spec]
New function Polyline32 - based on original Polyline. Needs
metafile support adding still.
Fri Dec 13 13:04:06 1996 Bruce Milner <Bruce.Milner@genetics.utah.edu>
* [win32/findfile.c] [if1632/kernel.spec]
FindFirstFile32A(): Use dos current directory for drive prefixes.
FindNextFile32A(): Fill in file attribute information.
Implement FindFirstFile16, FindNextFile16, FindClose16.
* [files/drive.c]
GetCurrentDirectory32A - Fix problem with null 3rd character in
string.
Tue Dec 10 14:49:07 1996 Marcus Meissner <msmeissn@cip.informatik.uni-erlangen.de>
* [windows/painting.c][windows/message.c]
Don't use linked lists to call SendMessage(), for it might destroy
the current listentry.
* [misc/registry.c]
Fixed temporary file saving (rename doesn't work across
partitions).
* [files/*.c]
GetFullPathName*,GetDriveType32A fixed, CreateDirectoryEx*,
GetVolumeInformation32W fixed.
* [win32/process.c][if1632/kernel.spec][if1632/kernel32.spec]
LoadLibrary* updated to new naming std., *32W added.
* [win32/console.c] [include/wincon.h]
Additions for NT commandline executables.
* [if1632/advapi32.spec][if1632/kernel32.spec][win32/init.c]
GetUserName32W added, GetComputerName32W added,
GetStartupInfo32W added, GetSystemInfo updated to NT standard.
* [windows/msgbox.c][misc/shell.c][windows/graphics.c]
MessageBox32W, ShellAbout32W, CommandLineToArgvW, Polygon32 added.
* [misc/crtdll.c][include/crtdll.h][if1632/crtdll.spec][misc/ntdll.c]
[if1632/ntdll.spec]
Lot of new unicode functions added (needed for NT).
* [loader/pe_image.c]
NtCurrentTeb added.
Tue Dec 10 22:39:33 1996 Albrecht Kleine <kleine@ak.sax.de>
* [windows/keyboard.c]
Rewrote function TranslateAccelerator().
Mon Dec 9 14:52:13 1996 Slaven Rezic <eserte@cs.tu-berlin.de>
* [windows/defwnd.c]
DEFWND_SetText(): Set icon name.
Sun Dec 8 23:30:00 1996 Alex Korobka <alex@trantor.pharm.sunysb.edu>
* [loader/signal.c] [misc/winsock.c] [misc/winsock_async.c]
[if1632/winsock.spec]
IPC resource cleanup, bugfixes.
* [windows/dialog.c] [windows/defdlg.c]
More DefDlgProc() fixes.
Sun Dec 8 14:01:42 1996 Vadim Strizhevsky <striv@ms.com>
* [misc/clipboard.c] [objects/font.c] [win32/init.c]
[win32/newfns.c] [windows/graphics.c]
Added a few WIN32 functions which needed to run some win32
accessories. Clock should now work almost as well as 16 bit version.
Add: RegisterClipboardFormat32W GetTextExtentExPoint32*
GetModuleHandleW, DisableThreadLibraryCalls (empty stub),
Polygon32
Fix: Polygon16 possible memory leak on error return.
1996-12-15 20:45:59 +01:00
|
|
|
*/
|
2002-06-01 01:06:46 +02:00
|
|
|
DWORD WINAPI GetModuleFileNameA(
|
2003-10-01 05:20:21 +02:00
|
|
|
HMODULE hModule, /* [in] Module handle (32 bit) */
|
|
|
|
LPSTR lpFileName, /* [out] Destination for file name */
|
|
|
|
DWORD size ) /* [in] Size of lpFileName in characters */
|
2000-08-07 06:12:41 +02:00
|
|
|
{
|
2003-03-18 21:07:12 +01:00
|
|
|
LPWSTR filenameW = HeapAlloc( GetProcessHeap(), 0, size * sizeof(WCHAR) );
|
2004-05-19 05:22:55 +02:00
|
|
|
DWORD len;
|
Release 980517
Sun May 17 16:23:56 1998 Uwe Bonnes <bon@elektron.ikp.physik.tu-darmstadt.de>
* [file/profile.c]
Fix the return value of PROFILE_GetSection
* [misc/crtdll.c]
Do _getdrive, fix _chdrive.
* [misc/commdlg.c]
First cut at ChooseColor[WA].
* [misc/network.c]
Do something sensible for WNetGetDirectoryType16.
Sun May 17 10:21:35 1998 Andreas Mohr <100.30936@germany.net>
* [controls/menu.c]
Fixed disabled sub menus with MF_BYPOSITION that were not disabled.
* [misc/crtdll.c] [relay32/crtdll.spec] [include/winerror.h]
Implemented fscanf, fsetpos, _access, _fpreset (thanks to Uwe Bonnes),
and _ltoa.
* [loader/task.c]
MakeProcInstance: must use CURRENT_DS if hInst == NULL.
* [misc/shell.c]
SHELL_GetResourceTable, InternalExtractIcon: fixed broken .ICO handling
* [windows/winpos.c]
DeferWindowPos: removed "same parent" requirement.
Which doc states that this is required ?
Sat May 16 20:08:11 1998 Alexandre Julliard <julliard@lrc.epfl.ch>
* [loader/module.c] [loader/ne/module.c]
More NE module cleanups.
* [loader/task.c]
Fixed SwitchStackBack().
Fri May 15 10:04:27 1998 Marcus Meissner <marcus@jet.franken.de>
* [configure.in][inlcude/acconfig.h]
Fixed broken OSS check, added check for working sigaltstack,
fixed broken statfs checks on some linux systems.
* [files/directory.c][loader/pe_image.c][relay32/builtin.c]
[loader/module.c]
Added handling of win32 module pathnames.
* [relay32/wnaspi32.spec]
New file.
* [misc/lzexpand.c]
LZCopy auto-decompresses LZ compressed files, even if they are not
specially flagged. Fixes some InstallShield problems.
* [misc/registry.c]
Some fixes for RegQueryInfoKey (reference program monkey.exe
from Win32 SDK works now better). Probably still has faults.
Fri May 15 08:58:58 1998 Martin Boehme <boehme@informatik.mu-luebeck.de>
* [graphics/mapping.c] [include/dc.h] [include/gdi.h] [objects/dc.c]
Reworked the way world transformations and mapping modes are handled
so that both of these transformations can be computed in a single
step.
* [graphics/painting.c] [graphics/path.c] [include/path.h]
More GDI path support.
* [graphics/x11drv/graphics.c]
Fixed the return value of GRAPH_DrawArc for the zero height /
zero width case to reflect Windows' behaviour.
* [include/windows.h] [relay32/gdi32.spec] [objects/dc.c]
Implemented ModifyWorldTransform and CombineTransform.
Tue May 14 18:03:46 1998 Eric Kohl <ekohl@abo.rhein-zeitung.de>
* [controls/commctrl.c][relay32/comctl32.spec]
[controls/*.c][include/*.h]
Implemented InitCommonControlsEx (dll version 4.72 compatible).
InitCommonControls calls ImageCommonControlsEx.
Registering code of the common controls had to be changed
(see XXXX_Register functions).
* [controls/status.c][include/commctrl.h][include/status.h]
Implemented most new features and fixed the look and feel.
* [contols/commctrl.c][include/commctrl.h][relay32/comctl32.spec]
Implemented MenuHelp (incomplete).
* [controls/status.c][controls/progress.c]
Changed allocation strategy for control specific memory.
* [controls/header.c][include/header.h][include/commctrl.h]
First implementation of header control.
* [windows/defwnd.c][windows/syscolors.c]
Fixed default control colors for Win95 look.
* [windows/nonclient.c]
Fixed off by one error for Win95 look. Top border of child windows
should be visible.
* [misc/imagelist.h]
Improved documentation and fixed some bugs.
Thu May 14 15:42:21 1998 Robert Wilhelm <robert@physiol.med.tu-muenchen.de>
* [relay32/crtdll.spec]
Added hypot,j0,j1,jn and ceil.
Wed May 13 19:10:10 1998 Pascal Cuoq <pcuoq@ens-lyon.fr>
* [controls/listbox.c]
Item height is now exactly font height.
Wine listboxes now behave like Windows' when they are
created without WS_VSCROLL but the program subsequently
calls ShowScrollBar or SetScrollInfo.
Wed May 13 18:33:01 1998 Ulrich Weigand <weigand@informatik.uni-erlangen.de>
* [relay32/relay386.c]
Restore ES also in the non-debug case.
* [windows/event.c]
Bugfix: Blocking TSXNextEvent could deadlock Wine.
* [win32/process.c] [windows/message.c]
Silly stubs for MsgWaitForMultipleObjects / PostThreadMessage
that make some programs run better.
* [windows/winproc.c]
WINPROC_MapMsg32Ato16/16To32A: added WM_NOTIFY.
* [win32/kernel32.c]
Added 16->32 thunking and improved 32->16 thunking functions.
* [tools/build.c]
Added new variant of CallFrom16 stub for use with Win95 thunks.
* [if1632/kernel.spec] [if1632/builtin.c] [win32/kernel32.c]
Added a few undocumented KERNEL functions.
* [loader/ne/module.c] [loader/ne/segment.c]
Call DllEntryPoint for 16-bit DLLs with subsystem >= 4.0.
* [win32/kernel32.spec] [win32/wow32.spec] [win32/ordinals.c]
Use names from the Oct 94 beta release for undoc. functions.
Wed May 13 14:18:26 1998 Matthew Becker <mbecker@glasscity.net>
* [misc/registry.c]
Code cleanup.
* [misc/cpu.c]
Commented out the registry puts temporarily.
* [programs/regtest/*]
New registry testing program.
Tue May 12 22:54:03 1998 Michael Mess <michael@kawo2.rwth-aachen.de>
* [multimedia/audio.c]
ioctl's do not commute in /dev/dsp initialization.
Tue May 12 20:11:42 1998 Karl Garrison <karlos@eznet.net>
* [win32/console.c]
Implemented SetConsoleTextAttribute, FillConsoleOutputCharacter.
Improved cursor positioning.
This allows for text colors in an xterm, rxvt, or console.
Tue May 12 17:57:52 1998 Petter Reinholdtsen <pere@td.org.uit.no>
* [Makefile.in]
Create prefix/{bin|lib} directories if missing during install.
Sun May 10 19:37:51 1998 Jan Willamowius <jan@janhh.shnet.org>
* [multimedia/mmio.c]
Have mmioSetBuffer return success (0), so Corel Draw 4
keeps working. (IO is still unbuffered)
Wed May 6 16:57:55 1998 James Juran <jrj120@psu.edu>
* [Makefile.in] [Make.rules.in]
Changed "make clean" to remove `textedit` backup files (*%)
* [controls/menu.c][graphics/x11drv/xfont.c][include/libres.h]
[loader/main.c][loader/ne/module.c][scheduler/synchro.c]
[win32/time.c][windows/winpos.c][include/windows.h]
Fixed miscellaneous compilation warnings.
* [misc/main.c][miscemu/main.c][include/main.h]
Moved prototypes to new include file main.h, various cleanups.
Tue May 5 21:05:06 1998 Morten Welinder <terra@diku.dk>
* [misc/winsock.c]
Don't refer to __FreeBSD__ when HAVE_STRERROR is meant.
* [misc/debugstr.c]
For debug_dumpstrSend, send strings to stderr.
Tue May 5 21:47:40 1998 Huw D M Davies <h.davies1@physics.oxford.ac.uk>
* [objects/region.c]
Fix for REGION_RegionOp() if newReg is one of the source regions.
Tue May 5 18:27:32 1998 Jim Peterson <jspeter@roanoke.infi.net>
* [misc/main.c]
Add '-h/-help' option and print WINE_RELEASE_INFO with usage message.
* [misc/spy.c]
Realign trace messages.
Tue May 5 15:46:47 1998 Donnie V. Savage <dsavage@cisco.com>
* [graphics/ddraw.c]
Fixed compile warnings
* [misc/winsock.c]
Warnings should not be errors.
Tue May 5 13:40:42 1998 Jim Peterson <jspeter@roanoke.infi.net>
* [*/*]
Remove many warnings through explicit casts, added #include's,
and corrected printf formats.
Tue May 5 05:18:12 1998 Insomnia (Stea Greene) <insomnia@core.binghamton.edu>
* [graphics/ddraw.c]
Kept unchanged portion of old palette when changing only a few
palette entries. Really should only deallocate the changed cells.
This make StarCraft work almost perfectly (sound overflows still
cause static).
Mon May 4 15:04:57 1998 Alexander V. Lukyanov <lav@long.yar.ru>
* [misc/lstr.c]
FormatMessage: terminate string on %0, undo linefeed strip.
1998-05-17 19:13:43 +02:00
|
|
|
|
2003-03-18 21:07:12 +01:00
|
|
|
if (!filenameW)
|
2002-07-05 02:16:41 +02:00
|
|
|
{
|
2003-03-18 21:07:12 +01:00
|
|
|
SetLastError( ERROR_NOT_ENOUGH_MEMORY );
|
|
|
|
return 0;
|
2002-07-05 02:16:41 +02:00
|
|
|
}
|
2004-05-19 05:22:55 +02:00
|
|
|
if ((len = GetModuleFileNameW( hModule, filenameW, size )))
|
|
|
|
{
|
|
|
|
len = FILE_name_WtoA( filenameW, len, lpFileName, size );
|
2008-06-18 05:35:03 +02:00
|
|
|
if (len < size)
|
|
|
|
lpFileName[len] = '\0';
|
|
|
|
else
|
|
|
|
SetLastError( ERROR_INSUFFICIENT_BUFFER );
|
2004-05-19 05:22:55 +02:00
|
|
|
}
|
2003-03-18 21:07:12 +01:00
|
|
|
HeapFree( GetProcessHeap(), 0, filenameW );
|
2004-05-19 05:22:55 +02:00
|
|
|
return len;
|
2002-06-01 01:06:46 +02:00
|
|
|
}
|
|
|
|
|
Release 961215
Sun Dec 15 16:18:15 1996 Alexandre Julliard <julliard@lrc.epfl.ch>
* [graphics/x11drv/bitblt.c]
Fixed BITBLT_StretchImage for partially covered or inverted
bitmaps.
* [objects/dib.c]
Fixed the upside-down bitmap problem.
Sat Dec 14 02:49:57 1996 Thomas Sandford <t.d.g.sandford@prds-grn.demon.co.uk>
* [if1632/user32.spec]
IsMenu and RemoveMenu added (use existing Win16 functions).
* [include/windows.h]
Corrections to BITMAPINFOHEADER structure.
* [loader/module.c] [if1632/kernel32.spec]
New function GetModuleFileName32A (heavily based on original
Win16 version).
* [loader/pe_image.c]
Hack to allow files with short PE header to be loaded (e.g.
COMDLG32.DLL from Win32s).
* [misc/winsock_async.c]
#if out EIDRM case (not present in FreeBSD).
* [tools/build.c]
Remove trailing comments from .s files generated by build
as these break assembly when not run through pre-processor.
* [windows/graphics.c] [if1632/gdi32.spec]
New function Polyline32 - based on original Polyline. Needs
metafile support adding still.
Fri Dec 13 13:04:06 1996 Bruce Milner <Bruce.Milner@genetics.utah.edu>
* [win32/findfile.c] [if1632/kernel.spec]
FindFirstFile32A(): Use dos current directory for drive prefixes.
FindNextFile32A(): Fill in file attribute information.
Implement FindFirstFile16, FindNextFile16, FindClose16.
* [files/drive.c]
GetCurrentDirectory32A - Fix problem with null 3rd character in
string.
Tue Dec 10 14:49:07 1996 Marcus Meissner <msmeissn@cip.informatik.uni-erlangen.de>
* [windows/painting.c][windows/message.c]
Don't use linked lists to call SendMessage(), for it might destroy
the current listentry.
* [misc/registry.c]
Fixed temporary file saving (rename doesn't work across
partitions).
* [files/*.c]
GetFullPathName*,GetDriveType32A fixed, CreateDirectoryEx*,
GetVolumeInformation32W fixed.
* [win32/process.c][if1632/kernel.spec][if1632/kernel32.spec]
LoadLibrary* updated to new naming std., *32W added.
* [win32/console.c] [include/wincon.h]
Additions for NT commandline executables.
* [if1632/advapi32.spec][if1632/kernel32.spec][win32/init.c]
GetUserName32W added, GetComputerName32W added,
GetStartupInfo32W added, GetSystemInfo updated to NT standard.
* [windows/msgbox.c][misc/shell.c][windows/graphics.c]
MessageBox32W, ShellAbout32W, CommandLineToArgvW, Polygon32 added.
* [misc/crtdll.c][include/crtdll.h][if1632/crtdll.spec][misc/ntdll.c]
[if1632/ntdll.spec]
Lot of new unicode functions added (needed for NT).
* [loader/pe_image.c]
NtCurrentTeb added.
Tue Dec 10 22:39:33 1996 Albrecht Kleine <kleine@ak.sax.de>
* [windows/keyboard.c]
Rewrote function TranslateAccelerator().
Mon Dec 9 14:52:13 1996 Slaven Rezic <eserte@cs.tu-berlin.de>
* [windows/defwnd.c]
DEFWND_SetText(): Set icon name.
Sun Dec 8 23:30:00 1996 Alex Korobka <alex@trantor.pharm.sunysb.edu>
* [loader/signal.c] [misc/winsock.c] [misc/winsock_async.c]
[if1632/winsock.spec]
IPC resource cleanup, bugfixes.
* [windows/dialog.c] [windows/defdlg.c]
More DefDlgProc() fixes.
Sun Dec 8 14:01:42 1996 Vadim Strizhevsky <striv@ms.com>
* [misc/clipboard.c] [objects/font.c] [win32/init.c]
[win32/newfns.c] [windows/graphics.c]
Added a few WIN32 functions which needed to run some win32
accessories. Clock should now work almost as well as 16 bit version.
Add: RegisterClipboardFormat32W GetTextExtentExPoint32*
GetModuleHandleW, DisableThreadLibraryCalls (empty stub),
Polygon32
Fix: Polygon16 possible memory leak on error return.
1996-12-15 20:45:59 +01:00
|
|
|
/***********************************************************************
|
2001-06-13 22:13:18 +02:00
|
|
|
* GetModuleFileNameW (KERNEL32.@)
|
2003-10-01 05:20:21 +02:00
|
|
|
*
|
|
|
|
* Unicode version of GetModuleFileNameA.
|
Release 961215
Sun Dec 15 16:18:15 1996 Alexandre Julliard <julliard@lrc.epfl.ch>
* [graphics/x11drv/bitblt.c]
Fixed BITBLT_StretchImage for partially covered or inverted
bitmaps.
* [objects/dib.c]
Fixed the upside-down bitmap problem.
Sat Dec 14 02:49:57 1996 Thomas Sandford <t.d.g.sandford@prds-grn.demon.co.uk>
* [if1632/user32.spec]
IsMenu and RemoveMenu added (use existing Win16 functions).
* [include/windows.h]
Corrections to BITMAPINFOHEADER structure.
* [loader/module.c] [if1632/kernel32.spec]
New function GetModuleFileName32A (heavily based on original
Win16 version).
* [loader/pe_image.c]
Hack to allow files with short PE header to be loaded (e.g.
COMDLG32.DLL from Win32s).
* [misc/winsock_async.c]
#if out EIDRM case (not present in FreeBSD).
* [tools/build.c]
Remove trailing comments from .s files generated by build
as these break assembly when not run through pre-processor.
* [windows/graphics.c] [if1632/gdi32.spec]
New function Polyline32 - based on original Polyline. Needs
metafile support adding still.
Fri Dec 13 13:04:06 1996 Bruce Milner <Bruce.Milner@genetics.utah.edu>
* [win32/findfile.c] [if1632/kernel.spec]
FindFirstFile32A(): Use dos current directory for drive prefixes.
FindNextFile32A(): Fill in file attribute information.
Implement FindFirstFile16, FindNextFile16, FindClose16.
* [files/drive.c]
GetCurrentDirectory32A - Fix problem with null 3rd character in
string.
Tue Dec 10 14:49:07 1996 Marcus Meissner <msmeissn@cip.informatik.uni-erlangen.de>
* [windows/painting.c][windows/message.c]
Don't use linked lists to call SendMessage(), for it might destroy
the current listentry.
* [misc/registry.c]
Fixed temporary file saving (rename doesn't work across
partitions).
* [files/*.c]
GetFullPathName*,GetDriveType32A fixed, CreateDirectoryEx*,
GetVolumeInformation32W fixed.
* [win32/process.c][if1632/kernel.spec][if1632/kernel32.spec]
LoadLibrary* updated to new naming std., *32W added.
* [win32/console.c] [include/wincon.h]
Additions for NT commandline executables.
* [if1632/advapi32.spec][if1632/kernel32.spec][win32/init.c]
GetUserName32W added, GetComputerName32W added,
GetStartupInfo32W added, GetSystemInfo updated to NT standard.
* [windows/msgbox.c][misc/shell.c][windows/graphics.c]
MessageBox32W, ShellAbout32W, CommandLineToArgvW, Polygon32 added.
* [misc/crtdll.c][include/crtdll.h][if1632/crtdll.spec][misc/ntdll.c]
[if1632/ntdll.spec]
Lot of new unicode functions added (needed for NT).
* [loader/pe_image.c]
NtCurrentTeb added.
Tue Dec 10 22:39:33 1996 Albrecht Kleine <kleine@ak.sax.de>
* [windows/keyboard.c]
Rewrote function TranslateAccelerator().
Mon Dec 9 14:52:13 1996 Slaven Rezic <eserte@cs.tu-berlin.de>
* [windows/defwnd.c]
DEFWND_SetText(): Set icon name.
Sun Dec 8 23:30:00 1996 Alex Korobka <alex@trantor.pharm.sunysb.edu>
* [loader/signal.c] [misc/winsock.c] [misc/winsock_async.c]
[if1632/winsock.spec]
IPC resource cleanup, bugfixes.
* [windows/dialog.c] [windows/defdlg.c]
More DefDlgProc() fixes.
Sun Dec 8 14:01:42 1996 Vadim Strizhevsky <striv@ms.com>
* [misc/clipboard.c] [objects/font.c] [win32/init.c]
[win32/newfns.c] [windows/graphics.c]
Added a few WIN32 functions which needed to run some win32
accessories. Clock should now work almost as well as 16 bit version.
Add: RegisterClipboardFormat32W GetTextExtentExPoint32*
GetModuleHandleW, DisableThreadLibraryCalls (empty stub),
Polygon32
Fix: Polygon16 possible memory leak on error return.
1996-12-15 20:45:59 +01:00
|
|
|
*/
|
2002-07-05 03:27:19 +02:00
|
|
|
DWORD WINAPI GetModuleFileNameW( HMODULE hModule, LPWSTR lpFileName, DWORD size )
|
Release 961215
Sun Dec 15 16:18:15 1996 Alexandre Julliard <julliard@lrc.epfl.ch>
* [graphics/x11drv/bitblt.c]
Fixed BITBLT_StretchImage for partially covered or inverted
bitmaps.
* [objects/dib.c]
Fixed the upside-down bitmap problem.
Sat Dec 14 02:49:57 1996 Thomas Sandford <t.d.g.sandford@prds-grn.demon.co.uk>
* [if1632/user32.spec]
IsMenu and RemoveMenu added (use existing Win16 functions).
* [include/windows.h]
Corrections to BITMAPINFOHEADER structure.
* [loader/module.c] [if1632/kernel32.spec]
New function GetModuleFileName32A (heavily based on original
Win16 version).
* [loader/pe_image.c]
Hack to allow files with short PE header to be loaded (e.g.
COMDLG32.DLL from Win32s).
* [misc/winsock_async.c]
#if out EIDRM case (not present in FreeBSD).
* [tools/build.c]
Remove trailing comments from .s files generated by build
as these break assembly when not run through pre-processor.
* [windows/graphics.c] [if1632/gdi32.spec]
New function Polyline32 - based on original Polyline. Needs
metafile support adding still.
Fri Dec 13 13:04:06 1996 Bruce Milner <Bruce.Milner@genetics.utah.edu>
* [win32/findfile.c] [if1632/kernel.spec]
FindFirstFile32A(): Use dos current directory for drive prefixes.
FindNextFile32A(): Fill in file attribute information.
Implement FindFirstFile16, FindNextFile16, FindClose16.
* [files/drive.c]
GetCurrentDirectory32A - Fix problem with null 3rd character in
string.
Tue Dec 10 14:49:07 1996 Marcus Meissner <msmeissn@cip.informatik.uni-erlangen.de>
* [windows/painting.c][windows/message.c]
Don't use linked lists to call SendMessage(), for it might destroy
the current listentry.
* [misc/registry.c]
Fixed temporary file saving (rename doesn't work across
partitions).
* [files/*.c]
GetFullPathName*,GetDriveType32A fixed, CreateDirectoryEx*,
GetVolumeInformation32W fixed.
* [win32/process.c][if1632/kernel.spec][if1632/kernel32.spec]
LoadLibrary* updated to new naming std., *32W added.
* [win32/console.c] [include/wincon.h]
Additions for NT commandline executables.
* [if1632/advapi32.spec][if1632/kernel32.spec][win32/init.c]
GetUserName32W added, GetComputerName32W added,
GetStartupInfo32W added, GetSystemInfo updated to NT standard.
* [windows/msgbox.c][misc/shell.c][windows/graphics.c]
MessageBox32W, ShellAbout32W, CommandLineToArgvW, Polygon32 added.
* [misc/crtdll.c][include/crtdll.h][if1632/crtdll.spec][misc/ntdll.c]
[if1632/ntdll.spec]
Lot of new unicode functions added (needed for NT).
* [loader/pe_image.c]
NtCurrentTeb added.
Tue Dec 10 22:39:33 1996 Albrecht Kleine <kleine@ak.sax.de>
* [windows/keyboard.c]
Rewrote function TranslateAccelerator().
Mon Dec 9 14:52:13 1996 Slaven Rezic <eserte@cs.tu-berlin.de>
* [windows/defwnd.c]
DEFWND_SetText(): Set icon name.
Sun Dec 8 23:30:00 1996 Alex Korobka <alex@trantor.pharm.sunysb.edu>
* [loader/signal.c] [misc/winsock.c] [misc/winsock_async.c]
[if1632/winsock.spec]
IPC resource cleanup, bugfixes.
* [windows/dialog.c] [windows/defdlg.c]
More DefDlgProc() fixes.
Sun Dec 8 14:01:42 1996 Vadim Strizhevsky <striv@ms.com>
* [misc/clipboard.c] [objects/font.c] [win32/init.c]
[win32/newfns.c] [windows/graphics.c]
Added a few WIN32 functions which needed to run some win32
accessories. Clock should now work almost as well as 16 bit version.
Add: RegisterClipboardFormat32W GetTextExtentExPoint32*
GetModuleHandleW, DisableThreadLibraryCalls (empty stub),
Polygon32
Fix: Polygon16 possible memory leak on error return.
1996-12-15 20:45:59 +01:00
|
|
|
{
|
2014-05-28 06:58:59 +02:00
|
|
|
ULONG len = 0;
|
|
|
|
ULONG_PTR magic;
|
2004-04-15 02:04:05 +02:00
|
|
|
LDR_MODULE *pldr;
|
|
|
|
NTSTATUS nts;
|
|
|
|
WIN16_SUBSYSTEM_TIB *win16_tib;
|
2003-03-20 05:29:21 +01:00
|
|
|
|
2004-04-15 02:04:05 +02:00
|
|
|
if (!hModule && ((win16_tib = NtCurrentTeb()->Tib.SubSystemTib)) && win16_tib->exe_name)
|
2003-03-18 19:29:13 +01:00
|
|
|
{
|
2004-05-19 05:22:55 +02:00
|
|
|
len = min(size, win16_tib->exe_name->Length / sizeof(WCHAR));
|
|
|
|
memcpy( lpFileName, win16_tib->exe_name->Buffer, len * sizeof(WCHAR) );
|
|
|
|
if (len < size) lpFileName[len] = '\0';
|
2004-04-15 02:04:05 +02:00
|
|
|
goto done;
|
2003-03-18 19:29:13 +01:00
|
|
|
}
|
|
|
|
|
2004-04-15 02:04:05 +02:00
|
|
|
LdrLockLoaderLock( 0, NULL, &magic );
|
2003-03-18 19:29:13 +01:00
|
|
|
|
2004-04-15 02:04:05 +02:00
|
|
|
if (!hModule) hModule = NtCurrentTeb()->Peb->ImageBaseAddress;
|
|
|
|
nts = LdrFindEntryForAddress( hModule, &pldr );
|
2004-05-19 05:22:55 +02:00
|
|
|
if (nts == STATUS_SUCCESS)
|
|
|
|
{
|
|
|
|
len = min(size, pldr->FullDllName.Length / sizeof(WCHAR));
|
|
|
|
memcpy(lpFileName, pldr->FullDllName.Buffer, len * sizeof(WCHAR));
|
2008-06-18 05:35:03 +02:00
|
|
|
if (len < size)
|
2011-10-03 23:38:29 +02:00
|
|
|
{
|
2008-06-18 05:35:03 +02:00
|
|
|
lpFileName[len] = '\0';
|
2011-10-03 23:38:29 +02:00
|
|
|
SetLastError( 0 );
|
|
|
|
}
|
2008-06-18 05:35:03 +02:00
|
|
|
else
|
|
|
|
SetLastError( ERROR_INSUFFICIENT_BUFFER );
|
2004-05-19 05:22:55 +02:00
|
|
|
}
|
2004-04-15 02:04:05 +02:00
|
|
|
else SetLastError( RtlNtStatusToDosError( nts ) );
|
2003-03-18 19:29:13 +01:00
|
|
|
|
2004-04-15 02:04:05 +02:00
|
|
|
LdrUnlockLoaderLock( 0, magic );
|
|
|
|
done:
|
2004-05-19 05:22:55 +02:00
|
|
|
TRACE( "%s\n", debugstr_wn(lpFileName, len) );
|
|
|
|
return len;
|
Release 961215
Sun Dec 15 16:18:15 1996 Alexandre Julliard <julliard@lrc.epfl.ch>
* [graphics/x11drv/bitblt.c]
Fixed BITBLT_StretchImage for partially covered or inverted
bitmaps.
* [objects/dib.c]
Fixed the upside-down bitmap problem.
Sat Dec 14 02:49:57 1996 Thomas Sandford <t.d.g.sandford@prds-grn.demon.co.uk>
* [if1632/user32.spec]
IsMenu and RemoveMenu added (use existing Win16 functions).
* [include/windows.h]
Corrections to BITMAPINFOHEADER structure.
* [loader/module.c] [if1632/kernel32.spec]
New function GetModuleFileName32A (heavily based on original
Win16 version).
* [loader/pe_image.c]
Hack to allow files with short PE header to be loaded (e.g.
COMDLG32.DLL from Win32s).
* [misc/winsock_async.c]
#if out EIDRM case (not present in FreeBSD).
* [tools/build.c]
Remove trailing comments from .s files generated by build
as these break assembly when not run through pre-processor.
* [windows/graphics.c] [if1632/gdi32.spec]
New function Polyline32 - based on original Polyline. Needs
metafile support adding still.
Fri Dec 13 13:04:06 1996 Bruce Milner <Bruce.Milner@genetics.utah.edu>
* [win32/findfile.c] [if1632/kernel.spec]
FindFirstFile32A(): Use dos current directory for drive prefixes.
FindNextFile32A(): Fill in file attribute information.
Implement FindFirstFile16, FindNextFile16, FindClose16.
* [files/drive.c]
GetCurrentDirectory32A - Fix problem with null 3rd character in
string.
Tue Dec 10 14:49:07 1996 Marcus Meissner <msmeissn@cip.informatik.uni-erlangen.de>
* [windows/painting.c][windows/message.c]
Don't use linked lists to call SendMessage(), for it might destroy
the current listentry.
* [misc/registry.c]
Fixed temporary file saving (rename doesn't work across
partitions).
* [files/*.c]
GetFullPathName*,GetDriveType32A fixed, CreateDirectoryEx*,
GetVolumeInformation32W fixed.
* [win32/process.c][if1632/kernel.spec][if1632/kernel32.spec]
LoadLibrary* updated to new naming std., *32W added.
* [win32/console.c] [include/wincon.h]
Additions for NT commandline executables.
* [if1632/advapi32.spec][if1632/kernel32.spec][win32/init.c]
GetUserName32W added, GetComputerName32W added,
GetStartupInfo32W added, GetSystemInfo updated to NT standard.
* [windows/msgbox.c][misc/shell.c][windows/graphics.c]
MessageBox32W, ShellAbout32W, CommandLineToArgvW, Polygon32 added.
* [misc/crtdll.c][include/crtdll.h][if1632/crtdll.spec][misc/ntdll.c]
[if1632/ntdll.spec]
Lot of new unicode functions added (needed for NT).
* [loader/pe_image.c]
NtCurrentTeb added.
Tue Dec 10 22:39:33 1996 Albrecht Kleine <kleine@ak.sax.de>
* [windows/keyboard.c]
Rewrote function TranslateAccelerator().
Mon Dec 9 14:52:13 1996 Slaven Rezic <eserte@cs.tu-berlin.de>
* [windows/defwnd.c]
DEFWND_SetText(): Set icon name.
Sun Dec 8 23:30:00 1996 Alex Korobka <alex@trantor.pharm.sunysb.edu>
* [loader/signal.c] [misc/winsock.c] [misc/winsock_async.c]
[if1632/winsock.spec]
IPC resource cleanup, bugfixes.
* [windows/dialog.c] [windows/defdlg.c]
More DefDlgProc() fixes.
Sun Dec 8 14:01:42 1996 Vadim Strizhevsky <striv@ms.com>
* [misc/clipboard.c] [objects/font.c] [win32/init.c]
[win32/newfns.c] [windows/graphics.c]
Added a few WIN32 functions which needed to run some win32
accessories. Clock should now work almost as well as 16 bit version.
Add: RegisterClipboardFormat32W GetTextExtentExPoint32*
GetModuleHandleW, DisableThreadLibraryCalls (empty stub),
Polygon32
Fix: Polygon16 possible memory leak on error return.
1996-12-15 20:45:59 +01:00
|
|
|
}
|
|
|
|
|
2003-10-02 06:58:49 +02:00
|
|
|
|
|
|
|
/***********************************************************************
|
|
|
|
* get_dll_system_path
|
|
|
|
*/
|
|
|
|
static const WCHAR *get_dll_system_path(void)
|
|
|
|
{
|
2004-03-26 00:41:04 +01:00
|
|
|
static WCHAR *cached_path;
|
2003-10-02 06:58:49 +02:00
|
|
|
|
2004-03-26 00:41:04 +01:00
|
|
|
if (!cached_path)
|
2003-10-02 06:58:49 +02:00
|
|
|
{
|
2004-03-26 00:41:04 +01:00
|
|
|
WCHAR *p, *path;
|
2017-08-28 12:47:34 +02:00
|
|
|
int len = 1;
|
2003-10-02 06:58:49 +02:00
|
|
|
|
2005-08-12 13:29:43 +02:00
|
|
|
len += 2 * GetSystemDirectoryW( NULL, 0 );
|
2003-10-02 06:58:49 +02:00
|
|
|
len += GetWindowsDirectoryW( NULL, 0 );
|
2004-03-26 00:41:04 +01:00
|
|
|
p = path = HeapAlloc( GetProcessHeap(), 0, len * sizeof(WCHAR) );
|
2003-10-02 06:58:49 +02:00
|
|
|
GetSystemDirectoryW( p, path + len - p);
|
|
|
|
p += strlenW(p);
|
2005-08-12 13:29:43 +02:00
|
|
|
/* if system directory ends in "32" add 16-bit version too */
|
|
|
|
if (p[-2] == '3' && p[-1] == '2')
|
|
|
|
{
|
|
|
|
*p++ = ';';
|
|
|
|
GetSystemDirectoryW( p, path + len - p);
|
|
|
|
p += strlenW(p) - 2;
|
|
|
|
}
|
2003-10-02 06:58:49 +02:00
|
|
|
*p++ = ';';
|
|
|
|
GetWindowsDirectoryW( p, path + len - p);
|
2004-03-26 00:41:04 +01:00
|
|
|
cached_path = path;
|
2003-10-02 06:58:49 +02:00
|
|
|
}
|
2004-03-26 00:41:04 +01:00
|
|
|
return cached_path;
|
2003-10-02 06:58:49 +02:00
|
|
|
}
|
|
|
|
|
2017-08-28 12:47:34 +02:00
|
|
|
/***********************************************************************
|
|
|
|
* get_dll_safe_mode
|
|
|
|
*/
|
|
|
|
static BOOL get_dll_safe_mode(void)
|
|
|
|
{
|
|
|
|
static const WCHAR keyW[] = {'\\','R','e','g','i','s','t','r','y','\\',
|
|
|
|
'M','a','c','h','i','n','e','\\',
|
|
|
|
'S','y','s','t','e','m','\\',
|
|
|
|
'C','u','r','r','e','n','t','C','o','n','t','r','o','l','S','e','t','\\',
|
|
|
|
'C','o','n','t','r','o','l','\\',
|
|
|
|
'S','e','s','s','i','o','n',' ','M','a','n','a','g','e','r',0};
|
|
|
|
static const WCHAR valueW[] = {'S','a','f','e','D','l','l','S','e','a','r','c','h','M','o','d','e',0};
|
|
|
|
|
|
|
|
static int safe_mode = -1;
|
|
|
|
|
|
|
|
if (safe_mode == -1)
|
|
|
|
{
|
|
|
|
char buffer[offsetof(KEY_VALUE_PARTIAL_INFORMATION, Data[sizeof(DWORD)])];
|
|
|
|
KEY_VALUE_PARTIAL_INFORMATION *info = (KEY_VALUE_PARTIAL_INFORMATION *)buffer;
|
|
|
|
OBJECT_ATTRIBUTES attr;
|
|
|
|
UNICODE_STRING nameW;
|
|
|
|
HANDLE hkey;
|
|
|
|
DWORD size = sizeof(buffer);
|
|
|
|
|
|
|
|
attr.Length = sizeof(attr);
|
|
|
|
attr.RootDirectory = 0;
|
|
|
|
attr.ObjectName = &nameW;
|
|
|
|
attr.Attributes = 0;
|
|
|
|
attr.SecurityDescriptor = NULL;
|
|
|
|
attr.SecurityQualityOfService = NULL;
|
|
|
|
|
|
|
|
safe_mode = 1;
|
|
|
|
RtlInitUnicodeString( &nameW, keyW );
|
|
|
|
if (!NtOpenKey( &hkey, KEY_READ, &attr ))
|
|
|
|
{
|
|
|
|
RtlInitUnicodeString( &nameW, valueW );
|
|
|
|
if (!NtQueryValueKey( hkey, &nameW, KeyValuePartialInformation, buffer, size, &size ) &&
|
|
|
|
info->Type == REG_DWORD && info->DataLength == sizeof(DWORD))
|
|
|
|
safe_mode = !!*(DWORD *)info->Data;
|
|
|
|
NtClose( hkey );
|
|
|
|
}
|
|
|
|
if (!safe_mode) TRACE( "SafeDllSearchMode disabled through the registry\n" );
|
|
|
|
}
|
|
|
|
return safe_mode;
|
|
|
|
}
|
|
|
|
|
2007-04-24 13:34:35 +02:00
|
|
|
/******************************************************************
|
|
|
|
* get_module_path_end
|
|
|
|
*
|
|
|
|
* Returns the end of the directory component of the module path.
|
|
|
|
*/
|
|
|
|
static inline const WCHAR *get_module_path_end(const WCHAR *module)
|
|
|
|
{
|
|
|
|
const WCHAR *p;
|
|
|
|
const WCHAR *mod_end = module;
|
|
|
|
if (!module) return mod_end;
|
|
|
|
|
|
|
|
if ((p = strrchrW( mod_end, '\\' ))) mod_end = p;
|
|
|
|
if ((p = strrchrW( mod_end, '/' ))) mod_end = p;
|
|
|
|
if (mod_end == module + 2 && module[1] == ':') mod_end++;
|
|
|
|
if (mod_end == module && module[0] && module[1] == ':') mod_end += 2;
|
|
|
|
|
|
|
|
return mod_end;
|
|
|
|
}
|
2003-10-02 06:58:49 +02:00
|
|
|
|
2017-08-29 09:33:07 +02:00
|
|
|
|
|
|
|
/******************************************************************
|
|
|
|
* append_path_len
|
|
|
|
*
|
|
|
|
* Append a counted string to the load path. Helper for MODULE_get_dll_load_path.
|
|
|
|
*/
|
|
|
|
static inline WCHAR *append_path_len( WCHAR *p, const WCHAR *str, DWORD len )
|
|
|
|
{
|
|
|
|
if (!len) return p;
|
|
|
|
memcpy( p, str, len * sizeof(WCHAR) );
|
|
|
|
p[len] = ';';
|
|
|
|
return p + len + 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/******************************************************************
|
|
|
|
* append_path
|
|
|
|
*
|
|
|
|
* Append a string to the load path. Helper for MODULE_get_dll_load_path.
|
|
|
|
*/
|
|
|
|
static inline WCHAR *append_path( WCHAR *p, const WCHAR *str )
|
|
|
|
{
|
|
|
|
return append_path_len( p, str, strlenW(str) );
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2003-10-02 06:58:49 +02:00
|
|
|
/******************************************************************
|
2004-03-26 00:41:04 +01:00
|
|
|
* MODULE_get_dll_load_path
|
2003-10-02 06:58:49 +02:00
|
|
|
*
|
|
|
|
* Compute the load path to use for a given dll.
|
|
|
|
* Returned pointer must be freed by caller.
|
|
|
|
*/
|
2017-08-29 15:46:50 +02:00
|
|
|
WCHAR *MODULE_get_dll_load_path( LPCWSTR module, int safe_mode )
|
2003-10-02 06:58:49 +02:00
|
|
|
{
|
|
|
|
static const WCHAR pathW[] = {'P','A','T','H',0};
|
2017-08-29 09:33:07 +02:00
|
|
|
static const WCHAR dotW[] = {'.',0};
|
2003-10-02 06:58:49 +02:00
|
|
|
|
|
|
|
const WCHAR *system_path = get_dll_system_path();
|
|
|
|
const WCHAR *mod_end = NULL;
|
|
|
|
UNICODE_STRING name, value;
|
|
|
|
WCHAR *p, *ret;
|
|
|
|
int len = 0, path_len = 0;
|
|
|
|
|
|
|
|
/* adjust length for module name */
|
|
|
|
|
|
|
|
if (module)
|
2007-04-24 13:34:35 +02:00
|
|
|
mod_end = get_module_path_end( module );
|
|
|
|
/* if module is NULL or doesn't contain a path, fall back to directory
|
|
|
|
* process was loaded from */
|
|
|
|
if (module == mod_end)
|
2003-10-02 06:58:49 +02:00
|
|
|
{
|
2007-04-24 13:34:35 +02:00
|
|
|
module = NtCurrentTeb()->Peb->ProcessParameters->ImagePathName.Buffer;
|
|
|
|
mod_end = get_module_path_end( module );
|
2003-10-02 06:58:49 +02:00
|
|
|
}
|
2007-04-24 13:34:35 +02:00
|
|
|
len += (mod_end - module) + 1;
|
|
|
|
|
2003-10-02 06:58:49 +02:00
|
|
|
len += strlenW( system_path ) + 2;
|
|
|
|
|
|
|
|
/* get the PATH variable */
|
|
|
|
|
|
|
|
RtlInitUnicodeString( &name, pathW );
|
|
|
|
value.Length = 0;
|
|
|
|
value.MaximumLength = 0;
|
|
|
|
value.Buffer = NULL;
|
|
|
|
if (RtlQueryEnvironmentVariable_U( NULL, &name, &value ) == STATUS_BUFFER_TOO_SMALL)
|
|
|
|
path_len = value.Length;
|
|
|
|
|
2005-08-02 16:56:53 +02:00
|
|
|
RtlEnterCriticalSection( &dlldir_section );
|
2017-08-29 15:46:50 +02:00
|
|
|
if (safe_mode == -1) safe_mode = get_dll_safe_mode();
|
2005-08-02 16:56:53 +02:00
|
|
|
if (dll_directory) len += strlenW(dll_directory) + 1;
|
2017-08-28 12:47:34 +02:00
|
|
|
else len += 2; /* current directory */
|
2005-08-02 16:56:53 +02:00
|
|
|
if ((p = ret = HeapAlloc( GetProcessHeap(), 0, path_len + len * sizeof(WCHAR) )))
|
2003-10-02 06:58:49 +02:00
|
|
|
{
|
2017-08-29 09:33:07 +02:00
|
|
|
if (module) p = append_path_len( p, module, mod_end - module );
|
|
|
|
|
|
|
|
if (dll_directory) p = append_path( p, dll_directory );
|
|
|
|
else if (!safe_mode) p = append_path( p, dotW );
|
|
|
|
|
|
|
|
p = append_path( p, system_path );
|
|
|
|
|
|
|
|
if (!dll_directory && safe_mode) p = append_path( p, dotW );
|
2003-10-02 06:58:49 +02:00
|
|
|
}
|
2005-08-02 16:56:53 +02:00
|
|
|
RtlLeaveCriticalSection( &dlldir_section );
|
|
|
|
if (!ret) return NULL;
|
|
|
|
|
2003-10-02 06:58:49 +02:00
|
|
|
value.Buffer = p;
|
|
|
|
value.MaximumLength = path_len;
|
|
|
|
|
|
|
|
while (RtlQueryEnvironmentVariable_U( NULL, &name, &value ) == STATUS_BUFFER_TOO_SMALL)
|
|
|
|
{
|
|
|
|
WCHAR *new_ptr;
|
|
|
|
|
|
|
|
/* grow the buffer and retry */
|
|
|
|
path_len = value.Length;
|
|
|
|
if (!(new_ptr = HeapReAlloc( GetProcessHeap(), 0, ret, path_len + len * sizeof(WCHAR) )))
|
|
|
|
{
|
|
|
|
HeapFree( GetProcessHeap(), 0, ret );
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
value.Buffer = new_ptr + (value.Buffer - ret);
|
|
|
|
value.MaximumLength = path_len;
|
|
|
|
ret = new_ptr;
|
|
|
|
}
|
|
|
|
value.Buffer[value.Length / sizeof(WCHAR)] = 0;
|
|
|
|
return ret;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2017-08-29 09:37:06 +02:00
|
|
|
/******************************************************************
|
|
|
|
* get_dll_load_path_search_flags
|
|
|
|
*/
|
|
|
|
static WCHAR *get_dll_load_path_search_flags( LPCWSTR module, DWORD flags )
|
|
|
|
{
|
|
|
|
const WCHAR *image = NULL, *mod_end, *image_end;
|
|
|
|
struct dll_dir_entry *dir;
|
|
|
|
WCHAR *p, *ret;
|
|
|
|
int len = 1;
|
|
|
|
|
|
|
|
if (flags & LOAD_LIBRARY_SEARCH_DEFAULT_DIRS)
|
|
|
|
flags |= (LOAD_LIBRARY_SEARCH_APPLICATION_DIR |
|
|
|
|
LOAD_LIBRARY_SEARCH_USER_DIRS |
|
|
|
|
LOAD_LIBRARY_SEARCH_SYSTEM32);
|
|
|
|
|
|
|
|
if (flags & LOAD_LIBRARY_SEARCH_DLL_LOAD_DIR)
|
|
|
|
{
|
|
|
|
DWORD type = RtlDetermineDosPathNameType_U( module );
|
|
|
|
if (type != ABSOLUTE_DRIVE_PATH && type != ABSOLUTE_PATH)
|
|
|
|
{
|
|
|
|
SetLastError( ERROR_INVALID_PARAMETER );
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
mod_end = get_module_path_end( module );
|
|
|
|
len += (mod_end - module) + 1;
|
|
|
|
}
|
|
|
|
else module = NULL;
|
|
|
|
|
|
|
|
RtlEnterCriticalSection( &dlldir_section );
|
|
|
|
|
|
|
|
if (flags & LOAD_LIBRARY_SEARCH_APPLICATION_DIR)
|
|
|
|
{
|
|
|
|
image = NtCurrentTeb()->Peb->ProcessParameters->ImagePathName.Buffer;
|
|
|
|
image_end = get_module_path_end( image );
|
|
|
|
len += (image_end - image) + 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (flags & LOAD_LIBRARY_SEARCH_USER_DIRS)
|
|
|
|
{
|
|
|
|
LIST_FOR_EACH_ENTRY( dir, &dll_dir_list, struct dll_dir_entry, entry )
|
|
|
|
len += strlenW( dir->dir ) + 1;
|
|
|
|
if (dll_directory) len += strlenW(dll_directory) + 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (flags & LOAD_LIBRARY_SEARCH_SYSTEM32) len += GetSystemDirectoryW( NULL, 0 );
|
|
|
|
|
|
|
|
if ((p = ret = HeapAlloc( GetProcessHeap(), 0, len * sizeof(WCHAR) )))
|
|
|
|
{
|
|
|
|
if (module) p = append_path_len( p, module, mod_end - module );
|
|
|
|
if (image) p = append_path_len( p, image, image_end - image );
|
|
|
|
if (flags & LOAD_LIBRARY_SEARCH_USER_DIRS)
|
|
|
|
{
|
|
|
|
LIST_FOR_EACH_ENTRY( dir, &dll_dir_list, struct dll_dir_entry, entry )
|
|
|
|
p = append_path( p, dir->dir );
|
|
|
|
if (dll_directory) p = append_path( p, dll_directory );
|
|
|
|
}
|
|
|
|
if (flags & LOAD_LIBRARY_SEARCH_SYSTEM32) GetSystemDirectoryW( p, ret + len - p );
|
|
|
|
else
|
|
|
|
{
|
|
|
|
if (p > ret) p--;
|
|
|
|
*p = 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
RtlLeaveCriticalSection( &dlldir_section );
|
|
|
|
return ret;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2003-03-14 06:01:20 +01:00
|
|
|
/******************************************************************
|
|
|
|
* load_library_as_datafile
|
2001-08-24 23:13:02 +02:00
|
|
|
*/
|
2017-08-28 14:19:47 +02:00
|
|
|
static BOOL load_library_as_datafile( LPCWSTR name, HMODULE *hmod, DWORD flags )
|
2001-08-24 23:13:02 +02:00
|
|
|
{
|
2003-03-15 00:17:45 +01:00
|
|
|
static const WCHAR dotDLL[] = {'.','d','l','l',0};
|
|
|
|
|
|
|
|
WCHAR filenameW[MAX_PATH];
|
2003-03-14 06:01:20 +01:00
|
|
|
HANDLE hFile = INVALID_HANDLE_VALUE;
|
|
|
|
HANDLE mapping;
|
2018-03-01 17:18:03 +01:00
|
|
|
HMODULE module = 0;
|
|
|
|
DWORD protect = PAGE_READONLY;
|
2018-03-01 17:21:32 +01:00
|
|
|
DWORD sharing = FILE_SHARE_READ | FILE_SHARE_DELETE;
|
2001-08-24 23:13:02 +02:00
|
|
|
|
2003-03-15 00:17:45 +01:00
|
|
|
*hmod = 0;
|
2001-08-24 23:13:02 +02:00
|
|
|
|
2018-03-01 17:18:03 +01:00
|
|
|
if (flags & LOAD_LIBRARY_AS_IMAGE_RESOURCE) protect |= SEC_IMAGE;
|
2017-08-28 14:19:47 +02:00
|
|
|
|
2007-12-18 23:47:55 +01:00
|
|
|
if (SearchPathW( NULL, name, dotDLL, sizeof(filenameW) / sizeof(filenameW[0]),
|
2003-03-15 00:17:45 +01:00
|
|
|
filenameW, NULL ))
|
2003-03-14 06:01:20 +01:00
|
|
|
{
|
2017-08-28 14:19:47 +02:00
|
|
|
hFile = CreateFileW( filenameW, GENERIC_READ, sharing, NULL, OPEN_EXISTING, 0, 0 );
|
2003-03-14 06:01:20 +01:00
|
|
|
}
|
|
|
|
if (hFile == INVALID_HANDLE_VALUE) return FALSE;
|
2003-09-26 06:35:44 +02:00
|
|
|
|
2018-03-01 17:18:03 +01:00
|
|
|
mapping = CreateFileMappingW( hFile, NULL, protect, 0, 0, NULL );
|
|
|
|
if (!mapping) goto failed;
|
2003-09-26 06:35:44 +02:00
|
|
|
|
|
|
|
module = MapViewOfFile( mapping, FILE_MAP_READ, 0, 0, 0 );
|
|
|
|
CloseHandle( mapping );
|
2018-03-01 17:18:03 +01:00
|
|
|
if (!module) goto failed;
|
2001-08-24 23:13:02 +02:00
|
|
|
|
2018-03-01 17:18:03 +01:00
|
|
|
if (!(flags & LOAD_LIBRARY_AS_IMAGE_RESOURCE))
|
2003-09-26 06:35:44 +02:00
|
|
|
{
|
2018-03-01 17:18:03 +01:00
|
|
|
/* make sure it's a valid PE file */
|
|
|
|
if (!RtlImageNtHeader( module )) goto failed;
|
|
|
|
*hmod = (HMODULE)((char *)module + 1); /* set bit 0 for data file module */
|
2018-03-01 17:21:32 +01:00
|
|
|
|
|
|
|
if (flags & LOAD_LIBRARY_AS_DATAFILE_EXCLUSIVE)
|
|
|
|
{
|
|
|
|
struct exclusive_datafile *file = HeapAlloc( GetProcessHeap(), 0, sizeof(*file) );
|
|
|
|
if (!file) goto failed;
|
|
|
|
file->module = *hmod;
|
|
|
|
file->file = hFile;
|
|
|
|
list_add_head( &exclusive_datafile_list, &file->entry );
|
|
|
|
TRACE( "delaying close %p for module %p\n", file->file, file->module );
|
|
|
|
return TRUE;
|
|
|
|
}
|
2003-09-26 06:35:44 +02:00
|
|
|
}
|
2018-03-01 17:18:03 +01:00
|
|
|
else *hmod = (HMODULE)((char *)module + 2); /* set bit 1 for image resource module */
|
|
|
|
|
|
|
|
CloseHandle( hFile );
|
2003-09-26 06:35:44 +02:00
|
|
|
return TRUE;
|
2018-03-01 17:18:03 +01:00
|
|
|
|
|
|
|
failed:
|
|
|
|
if (module) UnmapViewOfFile( module );
|
|
|
|
CloseHandle( hFile );
|
|
|
|
return FALSE;
|
2001-08-24 23:13:02 +02:00
|
|
|
}
|
|
|
|
|
2003-10-02 06:58:49 +02:00
|
|
|
|
|
|
|
/******************************************************************
|
|
|
|
* load_library
|
|
|
|
*
|
|
|
|
* Helper for LoadLibraryExA/W.
|
|
|
|
*/
|
|
|
|
static HMODULE load_library( const UNICODE_STRING *libname, DWORD flags )
|
|
|
|
{
|
|
|
|
NTSTATUS nts;
|
|
|
|
HMODULE hModule;
|
|
|
|
WCHAR *load_path;
|
2017-08-29 09:37:06 +02:00
|
|
|
const DWORD load_library_search_flags = (LOAD_LIBRARY_SEARCH_DLL_LOAD_DIR |
|
|
|
|
LOAD_LIBRARY_SEARCH_APPLICATION_DIR |
|
|
|
|
LOAD_LIBRARY_SEARCH_USER_DIRS |
|
|
|
|
LOAD_LIBRARY_SEARCH_SYSTEM32 |
|
|
|
|
LOAD_LIBRARY_SEARCH_DEFAULT_DIRS);
|
|
|
|
const DWORD unsupported_flags = (LOAD_IGNORE_CODE_AUTHZ_LEVEL |
|
|
|
|
LOAD_LIBRARY_REQUIRE_SIGNED_TARGET);
|
2017-08-28 13:29:09 +02:00
|
|
|
|
|
|
|
if (!(flags & load_library_search_flags)) flags |= default_search_flags;
|
2010-09-13 13:39:31 +02:00
|
|
|
|
|
|
|
if( flags & unsupported_flags)
|
2011-01-23 17:46:29 +01:00
|
|
|
FIXME("unsupported flag(s) used (flags: 0x%08x)\n", flags);
|
2003-10-02 06:58:49 +02:00
|
|
|
|
2017-08-29 09:37:06 +02:00
|
|
|
if (flags & load_library_search_flags)
|
|
|
|
load_path = get_dll_load_path_search_flags( libname->Buffer, flags );
|
|
|
|
else
|
2017-08-29 15:46:50 +02:00
|
|
|
load_path = MODULE_get_dll_load_path( flags & LOAD_WITH_ALTERED_SEARCH_PATH ? libname->Buffer : NULL, -1 );
|
2017-08-29 09:37:06 +02:00
|
|
|
if (!load_path) return 0;
|
2007-05-16 16:58:51 +02:00
|
|
|
|
2018-03-01 17:18:03 +01:00
|
|
|
if (flags & (LOAD_LIBRARY_AS_DATAFILE | LOAD_LIBRARY_AS_DATAFILE_EXCLUSIVE | LOAD_LIBRARY_AS_IMAGE_RESOURCE))
|
2003-10-02 06:58:49 +02:00
|
|
|
{
|
2014-05-28 06:58:59 +02:00
|
|
|
ULONG_PTR magic;
|
2007-05-16 16:58:51 +02:00
|
|
|
|
|
|
|
LdrLockLoaderLock( 0, NULL, &magic );
|
2010-09-18 15:26:05 +02:00
|
|
|
if (!LdrGetDllHandle( load_path, flags, libname, &hModule ))
|
2007-05-16 16:58:51 +02:00
|
|
|
{
|
|
|
|
LdrAddRefDll( 0, hModule );
|
|
|
|
LdrUnlockLoaderLock( 0, magic );
|
|
|
|
goto done;
|
|
|
|
}
|
2018-03-01 17:21:32 +01:00
|
|
|
if (load_library_as_datafile( libname->Buffer, &hModule, flags ))
|
|
|
|
{
|
|
|
|
LdrUnlockLoaderLock( 0, magic );
|
|
|
|
goto done;
|
|
|
|
}
|
2007-05-16 16:58:51 +02:00
|
|
|
LdrUnlockLoaderLock( 0, magic );
|
2003-10-02 06:58:49 +02:00
|
|
|
flags |= DONT_RESOLVE_DLL_REFERENCES; /* Just in case */
|
|
|
|
/* Fallback to normal behaviour */
|
|
|
|
}
|
|
|
|
|
|
|
|
nts = LdrLoadDll( load_path, flags, libname, &hModule );
|
|
|
|
if (nts != STATUS_SUCCESS)
|
|
|
|
{
|
|
|
|
hModule = 0;
|
2016-03-31 06:04:14 +02:00
|
|
|
if (nts == STATUS_DLL_NOT_FOUND && (GetVersion() & 0x80000000))
|
|
|
|
SetLastError( ERROR_DLL_NOT_FOUND );
|
|
|
|
else
|
|
|
|
SetLastError( RtlNtStatusToDosError( nts ) );
|
2003-10-02 06:58:49 +02:00
|
|
|
}
|
2007-05-16 16:58:51 +02:00
|
|
|
done:
|
|
|
|
HeapFree( GetProcessHeap(), 0, load_path );
|
2003-10-02 06:58:49 +02:00
|
|
|
return hModule;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2003-03-14 06:01:20 +01:00
|
|
|
/******************************************************************
|
|
|
|
* LoadLibraryExA (KERNEL32.@)
|
1999-04-18 14:14:06 +02:00
|
|
|
*
|
2003-10-01 05:20:21 +02:00
|
|
|
* Load a dll file into the process address space.
|
|
|
|
*
|
|
|
|
* PARAMS
|
|
|
|
* libname [I] Name of the file to load
|
|
|
|
* hfile [I] Reserved, must be 0.
|
|
|
|
* flags [I] Flags for loading the dll
|
|
|
|
*
|
|
|
|
* RETURNS
|
|
|
|
* Success: A handle to the loaded dll.
|
|
|
|
* Failure: A NULL handle. Use GetLastError() to determine the cause.
|
|
|
|
*
|
|
|
|
* NOTES
|
1999-04-18 14:14:06 +02:00
|
|
|
* The HFILE parameter is not used and marked reserved in the SDK. I can
|
|
|
|
* only guess that it should force a file to be mapped, but I rather
|
|
|
|
* ignore the parameter because it would be extremely difficult to
|
2002-04-02 21:47:30 +02:00
|
|
|
* integrate this with different types of module representations.
|
1999-04-18 14:14:06 +02:00
|
|
|
*/
|
2009-09-12 14:10:20 +02:00
|
|
|
HMODULE WINAPI DECLSPEC_HOTPATCH LoadLibraryExA(LPCSTR libname, HANDLE hfile, DWORD flags)
|
Release 970914
Thu Sep 11 18:24:56 1997 Philippe De Muyter <phdm@info.ucl.ac.be>
* [objects/dc.c]
In DC_SetupGCForPatBlt, replace R2_NOT by GXxor with (black xor white).
Tue Sep 9 23:04:02 1997 U. Bonnes <bon@elektron.ikp.physik.th-darmstadt.de>
* [memory/virtual.c]
Do not write debugging info unconditionally to stderr.
* [files/profile.c]
Call PROFILE_GetSection in PROFILE_GetString for key_name "" too.
* [misc/crtdll.c]
Many new functions.
* [include/windows.h] [windows/winpos.c]
ClientToScreen16 doesn't have a return value.
Sun Sep 7 10:06:39 1997 Alexandre Julliard <julliard@lrc.epfl.ch>
* [misc/main.c] [AUTHORS]
Update the list of contributors. Please let me know if I forgot
someone.
* [if1632/*.spec] [if1632/builtin.c] [tools/build.c]
Ordinal base for Win32 DLLs is now computed automatically from the
lowest ordinal found.
* [include/wintypes.h]
WINAPI is now defined as attribute((stdcall)). This will require
gcc to compile.
* [if1632/thunk.c]
Removed Win32 thunks (no longer needed with stdcall).
* [if1632/crtdll.spec] [misc/crtdll.c]
Make sure we only reference cdecl functions in the spec file.
* [objects/dc.c]
Use CapNotLast drawing style for 1-pixel wide lines.
* [tools/build.c]
Added 'double' argument type.
Added 'varargs' function type for Win32.
Made CallTo16_xxx functions stdcall.
Fri Sep 5 14:50:49 1997 Alex Korobka <alex@trantor.pharm.sunysb.edu>
* [tools/build.c] [windows/win.c] [windows/event.c] [windows/message.c]
More fixes to get message exchange closer to the original.
* [misc/spy.c]
Message logs now contain window names.
* [loader/resource.c] [loader/ne_resource.c] [loader/task.c]
[objects/cursoricon.c] [windows/user.c]
Added some obscure features to fix memory leaks.
Fri Sep 5 00:46:28 1997 Jan Willamowius <jan@janhh.shnet.org>
* [if1632/kernel32.spec] [win32/newfns.c]
Added stub for UTRegister() and UTUnRegister().
Thu Sep 4 12:03:12 1997 Frans van Dorsselaer <dorssel@rulhmpc49.LeidenUniv.nl>
* [controls/edit.c]
Allow ASCII codes > 127 in WM_CHAR.
Mon Sep 1 17:23:24 1997 Dimitrie O. Paun <dimi@mail.cs.toronto.edu>
* [controls/widgets.c]
In InitCommonControls, remember the name of the class
because lpszClassName was made to point to a local array
Added the ProgressBar to the list of implemented controls.
Call InitCommonControls from WIDGETS_Init to register all
implemented Common Controls.
* [include/commctrl.h]
Added misc decl for the Progress Bar.
* [controls/progress.c] [include/progress.h]
First attempt at implementiong the Progress Bar class.
* [objects/brush.h]
Implementation for GetSysColorBrush[16|32]
* [controls/status.c]
Use DrawEdge to draw the borders and fill the background
* [controls/uitools.c]
Added DrawDiagEdge32 and DrawRectEdge32
* [graphics/painting.c]
Implement DrawEdge[16|32]
Started DrawFrameControl32
Mon Sep 1 10:07:09 1997 Lawson Whitney <lawson_whitney@juno.com>
* [misc/comm.c] [include/windows.h]
SetCommEventMask returns a SEGPTR.
Sun Aug 31 23:28:32 1997 Marcus Meissner <msmeissn@cip.informatik.uni-erlangen.de>
* [loader/pe_image.c][loader/module.c][include/pe_image.h]
[include/module.h]
Cleaned up the whole Win32 library mess (a bit).
* [debugger/stabs.c]
If 'wine' has no absolute path and isn't found, check $PATH too.
* [misc/ole2nls.c]
Some fixes.
* [misc/ver.c]
Added support for PE style version resources.
* [memory/string.c]
Check for NULL pointers to _lstr* functions, just as Windows95 does.
* [multimedia/time.c]
Made list of timers a simple linked list.
* [loader/resource.c]
Netscape 3 seems to pass NEGATIVE resource Ids (in an
unsigned int, yes). Don't know why, fixed it anyway.
* [objects/bitmap.c]
LoadImageW added.
* [include/win.h][windows/win.c]
Change wIDmenu from UINT16 to UINT32 and changed the
SetWindow(Long|Word) accordingly.
Thu Aug 28 19:30:08 1997 Morten Welinder <terra@diku.dk>
* [include/windows.h]
Add a few more colors defined for Win95.
Add a few more brush styles.
* [windows/syscolor.c]
Add error checks for SYSCOLOR_SetColor, SYSCOLOR_Init,
GetSysColor16, GetSysColor32. Add support for above colors.
Sun Aug 24 16:22:57 1997 Andrew Taylor <andrew@riscan.com>
* [multimedia/mmsystem.c]
Changed mmioDescend to use mmio functions for file I/O, neccessary
for memory files.
1997-09-14 19:17:23 +02:00
|
|
|
{
|
2004-05-13 22:21:25 +02:00
|
|
|
WCHAR *libnameW;
|
2000-08-28 23:33:28 +02:00
|
|
|
|
2004-05-13 22:21:25 +02:00
|
|
|
if (!(libnameW = FILE_name_AtoW( libname, FALSE ))) return 0;
|
|
|
|
return LoadLibraryExW( libnameW, hfile, flags );
|
2003-03-14 06:01:20 +01:00
|
|
|
}
|
1999-04-11 16:52:24 +02:00
|
|
|
|
2003-03-14 06:01:20 +01:00
|
|
|
/***********************************************************************
|
|
|
|
* LoadLibraryExW (KERNEL32.@)
|
2003-10-01 05:20:21 +02:00
|
|
|
*
|
|
|
|
* Unicode version of LoadLibraryExA.
|
2003-03-14 06:01:20 +01:00
|
|
|
*/
|
2009-09-12 14:10:20 +02:00
|
|
|
HMODULE WINAPI DECLSPEC_HOTPATCH LoadLibraryExW(LPCWSTR libnameW, HANDLE hfile, DWORD flags)
|
2003-03-14 06:01:20 +01:00
|
|
|
{
|
|
|
|
UNICODE_STRING wstr;
|
2005-10-18 16:10:56 +02:00
|
|
|
HMODULE res;
|
2000-08-07 06:12:41 +02:00
|
|
|
|
2003-03-14 06:01:20 +01:00
|
|
|
if (!libnameW)
|
|
|
|
{
|
|
|
|
SetLastError(ERROR_INVALID_PARAMETER);
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
RtlInitUnicodeString( &wstr, libnameW );
|
2005-10-18 16:10:56 +02:00
|
|
|
if (wstr.Buffer[wstr.Length/sizeof(WCHAR) - 1] != ' ')
|
|
|
|
return load_library( &wstr, flags );
|
|
|
|
|
|
|
|
/* Library name has trailing spaces */
|
|
|
|
RtlCreateUnicodeString( &wstr, libnameW );
|
|
|
|
while (wstr.Length > sizeof(WCHAR) &&
|
|
|
|
wstr.Buffer[wstr.Length/sizeof(WCHAR) - 1] == ' ')
|
|
|
|
{
|
|
|
|
wstr.Length -= sizeof(WCHAR);
|
|
|
|
}
|
|
|
|
wstr.Buffer[wstr.Length/sizeof(WCHAR)] = '\0';
|
|
|
|
res = load_library( &wstr, flags );
|
|
|
|
RtlFreeUnicodeString( &wstr );
|
|
|
|
return res;
|
Release 970914
Thu Sep 11 18:24:56 1997 Philippe De Muyter <phdm@info.ucl.ac.be>
* [objects/dc.c]
In DC_SetupGCForPatBlt, replace R2_NOT by GXxor with (black xor white).
Tue Sep 9 23:04:02 1997 U. Bonnes <bon@elektron.ikp.physik.th-darmstadt.de>
* [memory/virtual.c]
Do not write debugging info unconditionally to stderr.
* [files/profile.c]
Call PROFILE_GetSection in PROFILE_GetString for key_name "" too.
* [misc/crtdll.c]
Many new functions.
* [include/windows.h] [windows/winpos.c]
ClientToScreen16 doesn't have a return value.
Sun Sep 7 10:06:39 1997 Alexandre Julliard <julliard@lrc.epfl.ch>
* [misc/main.c] [AUTHORS]
Update the list of contributors. Please let me know if I forgot
someone.
* [if1632/*.spec] [if1632/builtin.c] [tools/build.c]
Ordinal base for Win32 DLLs is now computed automatically from the
lowest ordinal found.
* [include/wintypes.h]
WINAPI is now defined as attribute((stdcall)). This will require
gcc to compile.
* [if1632/thunk.c]
Removed Win32 thunks (no longer needed with stdcall).
* [if1632/crtdll.spec] [misc/crtdll.c]
Make sure we only reference cdecl functions in the spec file.
* [objects/dc.c]
Use CapNotLast drawing style for 1-pixel wide lines.
* [tools/build.c]
Added 'double' argument type.
Added 'varargs' function type for Win32.
Made CallTo16_xxx functions stdcall.
Fri Sep 5 14:50:49 1997 Alex Korobka <alex@trantor.pharm.sunysb.edu>
* [tools/build.c] [windows/win.c] [windows/event.c] [windows/message.c]
More fixes to get message exchange closer to the original.
* [misc/spy.c]
Message logs now contain window names.
* [loader/resource.c] [loader/ne_resource.c] [loader/task.c]
[objects/cursoricon.c] [windows/user.c]
Added some obscure features to fix memory leaks.
Fri Sep 5 00:46:28 1997 Jan Willamowius <jan@janhh.shnet.org>
* [if1632/kernel32.spec] [win32/newfns.c]
Added stub for UTRegister() and UTUnRegister().
Thu Sep 4 12:03:12 1997 Frans van Dorsselaer <dorssel@rulhmpc49.LeidenUniv.nl>
* [controls/edit.c]
Allow ASCII codes > 127 in WM_CHAR.
Mon Sep 1 17:23:24 1997 Dimitrie O. Paun <dimi@mail.cs.toronto.edu>
* [controls/widgets.c]
In InitCommonControls, remember the name of the class
because lpszClassName was made to point to a local array
Added the ProgressBar to the list of implemented controls.
Call InitCommonControls from WIDGETS_Init to register all
implemented Common Controls.
* [include/commctrl.h]
Added misc decl for the Progress Bar.
* [controls/progress.c] [include/progress.h]
First attempt at implementiong the Progress Bar class.
* [objects/brush.h]
Implementation for GetSysColorBrush[16|32]
* [controls/status.c]
Use DrawEdge to draw the borders and fill the background
* [controls/uitools.c]
Added DrawDiagEdge32 and DrawRectEdge32
* [graphics/painting.c]
Implement DrawEdge[16|32]
Started DrawFrameControl32
Mon Sep 1 10:07:09 1997 Lawson Whitney <lawson_whitney@juno.com>
* [misc/comm.c] [include/windows.h]
SetCommEventMask returns a SEGPTR.
Sun Aug 31 23:28:32 1997 Marcus Meissner <msmeissn@cip.informatik.uni-erlangen.de>
* [loader/pe_image.c][loader/module.c][include/pe_image.h]
[include/module.h]
Cleaned up the whole Win32 library mess (a bit).
* [debugger/stabs.c]
If 'wine' has no absolute path and isn't found, check $PATH too.
* [misc/ole2nls.c]
Some fixes.
* [misc/ver.c]
Added support for PE style version resources.
* [memory/string.c]
Check for NULL pointers to _lstr* functions, just as Windows95 does.
* [multimedia/time.c]
Made list of timers a simple linked list.
* [loader/resource.c]
Netscape 3 seems to pass NEGATIVE resource Ids (in an
unsigned int, yes). Don't know why, fixed it anyway.
* [objects/bitmap.c]
LoadImageW added.
* [include/win.h][windows/win.c]
Change wIDmenu from UINT16 to UINT32 and changed the
SetWindow(Long|Word) accordingly.
Thu Aug 28 19:30:08 1997 Morten Welinder <terra@diku.dk>
* [include/windows.h]
Add a few more colors defined for Win95.
Add a few more brush styles.
* [windows/syscolor.c]
Add error checks for SYSCOLOR_SetColor, SYSCOLOR_Init,
GetSysColor16, GetSysColor32. Add support for above colors.
Sun Aug 24 16:22:57 1997 Andrew Taylor <andrew@riscan.com>
* [multimedia/mmsystem.c]
Changed mmioDescend to use mmio functions for file I/O, neccessary
for memory files.
1997-09-14 19:17:23 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
/***********************************************************************
|
2001-06-21 01:03:14 +02:00
|
|
|
* LoadLibraryA (KERNEL32.@)
|
2003-10-01 05:20:21 +02:00
|
|
|
*
|
|
|
|
* Load a dll file into the process address space.
|
|
|
|
*
|
|
|
|
* PARAMS
|
|
|
|
* libname [I] Name of the file to load
|
|
|
|
*
|
|
|
|
* RETURNS
|
|
|
|
* Success: A handle to the loaded dll.
|
|
|
|
* Failure: A NULL handle. Use GetLastError() to determine the cause.
|
|
|
|
*
|
|
|
|
* NOTES
|
|
|
|
* See LoadLibraryExA().
|
Release 970914
Thu Sep 11 18:24:56 1997 Philippe De Muyter <phdm@info.ucl.ac.be>
* [objects/dc.c]
In DC_SetupGCForPatBlt, replace R2_NOT by GXxor with (black xor white).
Tue Sep 9 23:04:02 1997 U. Bonnes <bon@elektron.ikp.physik.th-darmstadt.de>
* [memory/virtual.c]
Do not write debugging info unconditionally to stderr.
* [files/profile.c]
Call PROFILE_GetSection in PROFILE_GetString for key_name "" too.
* [misc/crtdll.c]
Many new functions.
* [include/windows.h] [windows/winpos.c]
ClientToScreen16 doesn't have a return value.
Sun Sep 7 10:06:39 1997 Alexandre Julliard <julliard@lrc.epfl.ch>
* [misc/main.c] [AUTHORS]
Update the list of contributors. Please let me know if I forgot
someone.
* [if1632/*.spec] [if1632/builtin.c] [tools/build.c]
Ordinal base for Win32 DLLs is now computed automatically from the
lowest ordinal found.
* [include/wintypes.h]
WINAPI is now defined as attribute((stdcall)). This will require
gcc to compile.
* [if1632/thunk.c]
Removed Win32 thunks (no longer needed with stdcall).
* [if1632/crtdll.spec] [misc/crtdll.c]
Make sure we only reference cdecl functions in the spec file.
* [objects/dc.c]
Use CapNotLast drawing style for 1-pixel wide lines.
* [tools/build.c]
Added 'double' argument type.
Added 'varargs' function type for Win32.
Made CallTo16_xxx functions stdcall.
Fri Sep 5 14:50:49 1997 Alex Korobka <alex@trantor.pharm.sunysb.edu>
* [tools/build.c] [windows/win.c] [windows/event.c] [windows/message.c]
More fixes to get message exchange closer to the original.
* [misc/spy.c]
Message logs now contain window names.
* [loader/resource.c] [loader/ne_resource.c] [loader/task.c]
[objects/cursoricon.c] [windows/user.c]
Added some obscure features to fix memory leaks.
Fri Sep 5 00:46:28 1997 Jan Willamowius <jan@janhh.shnet.org>
* [if1632/kernel32.spec] [win32/newfns.c]
Added stub for UTRegister() and UTUnRegister().
Thu Sep 4 12:03:12 1997 Frans van Dorsselaer <dorssel@rulhmpc49.LeidenUniv.nl>
* [controls/edit.c]
Allow ASCII codes > 127 in WM_CHAR.
Mon Sep 1 17:23:24 1997 Dimitrie O. Paun <dimi@mail.cs.toronto.edu>
* [controls/widgets.c]
In InitCommonControls, remember the name of the class
because lpszClassName was made to point to a local array
Added the ProgressBar to the list of implemented controls.
Call InitCommonControls from WIDGETS_Init to register all
implemented Common Controls.
* [include/commctrl.h]
Added misc decl for the Progress Bar.
* [controls/progress.c] [include/progress.h]
First attempt at implementiong the Progress Bar class.
* [objects/brush.h]
Implementation for GetSysColorBrush[16|32]
* [controls/status.c]
Use DrawEdge to draw the borders and fill the background
* [controls/uitools.c]
Added DrawDiagEdge32 and DrawRectEdge32
* [graphics/painting.c]
Implement DrawEdge[16|32]
Started DrawFrameControl32
Mon Sep 1 10:07:09 1997 Lawson Whitney <lawson_whitney@juno.com>
* [misc/comm.c] [include/windows.h]
SetCommEventMask returns a SEGPTR.
Sun Aug 31 23:28:32 1997 Marcus Meissner <msmeissn@cip.informatik.uni-erlangen.de>
* [loader/pe_image.c][loader/module.c][include/pe_image.h]
[include/module.h]
Cleaned up the whole Win32 library mess (a bit).
* [debugger/stabs.c]
If 'wine' has no absolute path and isn't found, check $PATH too.
* [misc/ole2nls.c]
Some fixes.
* [misc/ver.c]
Added support for PE style version resources.
* [memory/string.c]
Check for NULL pointers to _lstr* functions, just as Windows95 does.
* [multimedia/time.c]
Made list of timers a simple linked list.
* [loader/resource.c]
Netscape 3 seems to pass NEGATIVE resource Ids (in an
unsigned int, yes). Don't know why, fixed it anyway.
* [objects/bitmap.c]
LoadImageW added.
* [include/win.h][windows/win.c]
Change wIDmenu from UINT16 to UINT32 and changed the
SetWindow(Long|Word) accordingly.
Thu Aug 28 19:30:08 1997 Morten Welinder <terra@diku.dk>
* [include/windows.h]
Add a few more colors defined for Win95.
Add a few more brush styles.
* [windows/syscolor.c]
Add error checks for SYSCOLOR_SetColor, SYSCOLOR_Init,
GetSysColor16, GetSysColor32. Add support for above colors.
Sun Aug 24 16:22:57 1997 Andrew Taylor <andrew@riscan.com>
* [multimedia/mmsystem.c]
Changed mmioDescend to use mmio functions for file I/O, neccessary
for memory files.
1997-09-14 19:17:23 +02:00
|
|
|
*/
|
2009-09-12 14:10:20 +02:00
|
|
|
HMODULE WINAPI DECLSPEC_HOTPATCH LoadLibraryA(LPCSTR libname)
|
2003-03-14 06:01:20 +01:00
|
|
|
{
|
|
|
|
return LoadLibraryExA(libname, 0, 0);
|
Release 970914
Thu Sep 11 18:24:56 1997 Philippe De Muyter <phdm@info.ucl.ac.be>
* [objects/dc.c]
In DC_SetupGCForPatBlt, replace R2_NOT by GXxor with (black xor white).
Tue Sep 9 23:04:02 1997 U. Bonnes <bon@elektron.ikp.physik.th-darmstadt.de>
* [memory/virtual.c]
Do not write debugging info unconditionally to stderr.
* [files/profile.c]
Call PROFILE_GetSection in PROFILE_GetString for key_name "" too.
* [misc/crtdll.c]
Many new functions.
* [include/windows.h] [windows/winpos.c]
ClientToScreen16 doesn't have a return value.
Sun Sep 7 10:06:39 1997 Alexandre Julliard <julliard@lrc.epfl.ch>
* [misc/main.c] [AUTHORS]
Update the list of contributors. Please let me know if I forgot
someone.
* [if1632/*.spec] [if1632/builtin.c] [tools/build.c]
Ordinal base for Win32 DLLs is now computed automatically from the
lowest ordinal found.
* [include/wintypes.h]
WINAPI is now defined as attribute((stdcall)). This will require
gcc to compile.
* [if1632/thunk.c]
Removed Win32 thunks (no longer needed with stdcall).
* [if1632/crtdll.spec] [misc/crtdll.c]
Make sure we only reference cdecl functions in the spec file.
* [objects/dc.c]
Use CapNotLast drawing style for 1-pixel wide lines.
* [tools/build.c]
Added 'double' argument type.
Added 'varargs' function type for Win32.
Made CallTo16_xxx functions stdcall.
Fri Sep 5 14:50:49 1997 Alex Korobka <alex@trantor.pharm.sunysb.edu>
* [tools/build.c] [windows/win.c] [windows/event.c] [windows/message.c]
More fixes to get message exchange closer to the original.
* [misc/spy.c]
Message logs now contain window names.
* [loader/resource.c] [loader/ne_resource.c] [loader/task.c]
[objects/cursoricon.c] [windows/user.c]
Added some obscure features to fix memory leaks.
Fri Sep 5 00:46:28 1997 Jan Willamowius <jan@janhh.shnet.org>
* [if1632/kernel32.spec] [win32/newfns.c]
Added stub for UTRegister() and UTUnRegister().
Thu Sep 4 12:03:12 1997 Frans van Dorsselaer <dorssel@rulhmpc49.LeidenUniv.nl>
* [controls/edit.c]
Allow ASCII codes > 127 in WM_CHAR.
Mon Sep 1 17:23:24 1997 Dimitrie O. Paun <dimi@mail.cs.toronto.edu>
* [controls/widgets.c]
In InitCommonControls, remember the name of the class
because lpszClassName was made to point to a local array
Added the ProgressBar to the list of implemented controls.
Call InitCommonControls from WIDGETS_Init to register all
implemented Common Controls.
* [include/commctrl.h]
Added misc decl for the Progress Bar.
* [controls/progress.c] [include/progress.h]
First attempt at implementiong the Progress Bar class.
* [objects/brush.h]
Implementation for GetSysColorBrush[16|32]
* [controls/status.c]
Use DrawEdge to draw the borders and fill the background
* [controls/uitools.c]
Added DrawDiagEdge32 and DrawRectEdge32
* [graphics/painting.c]
Implement DrawEdge[16|32]
Started DrawFrameControl32
Mon Sep 1 10:07:09 1997 Lawson Whitney <lawson_whitney@juno.com>
* [misc/comm.c] [include/windows.h]
SetCommEventMask returns a SEGPTR.
Sun Aug 31 23:28:32 1997 Marcus Meissner <msmeissn@cip.informatik.uni-erlangen.de>
* [loader/pe_image.c][loader/module.c][include/pe_image.h]
[include/module.h]
Cleaned up the whole Win32 library mess (a bit).
* [debugger/stabs.c]
If 'wine' has no absolute path and isn't found, check $PATH too.
* [misc/ole2nls.c]
Some fixes.
* [misc/ver.c]
Added support for PE style version resources.
* [memory/string.c]
Check for NULL pointers to _lstr* functions, just as Windows95 does.
* [multimedia/time.c]
Made list of timers a simple linked list.
* [loader/resource.c]
Netscape 3 seems to pass NEGATIVE resource Ids (in an
unsigned int, yes). Don't know why, fixed it anyway.
* [objects/bitmap.c]
LoadImageW added.
* [include/win.h][windows/win.c]
Change wIDmenu from UINT16 to UINT32 and changed the
SetWindow(Long|Word) accordingly.
Thu Aug 28 19:30:08 1997 Morten Welinder <terra@diku.dk>
* [include/windows.h]
Add a few more colors defined for Win95.
Add a few more brush styles.
* [windows/syscolor.c]
Add error checks for SYSCOLOR_SetColor, SYSCOLOR_Init,
GetSysColor16, GetSysColor32. Add support for above colors.
Sun Aug 24 16:22:57 1997 Andrew Taylor <andrew@riscan.com>
* [multimedia/mmsystem.c]
Changed mmioDescend to use mmio functions for file I/O, neccessary
for memory files.
1997-09-14 19:17:23 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
/***********************************************************************
|
2001-06-21 01:03:14 +02:00
|
|
|
* LoadLibraryW (KERNEL32.@)
|
2003-10-01 05:20:21 +02:00
|
|
|
*
|
|
|
|
* Unicode version of LoadLibraryA.
|
Release 970914
Thu Sep 11 18:24:56 1997 Philippe De Muyter <phdm@info.ucl.ac.be>
* [objects/dc.c]
In DC_SetupGCForPatBlt, replace R2_NOT by GXxor with (black xor white).
Tue Sep 9 23:04:02 1997 U. Bonnes <bon@elektron.ikp.physik.th-darmstadt.de>
* [memory/virtual.c]
Do not write debugging info unconditionally to stderr.
* [files/profile.c]
Call PROFILE_GetSection in PROFILE_GetString for key_name "" too.
* [misc/crtdll.c]
Many new functions.
* [include/windows.h] [windows/winpos.c]
ClientToScreen16 doesn't have a return value.
Sun Sep 7 10:06:39 1997 Alexandre Julliard <julliard@lrc.epfl.ch>
* [misc/main.c] [AUTHORS]
Update the list of contributors. Please let me know if I forgot
someone.
* [if1632/*.spec] [if1632/builtin.c] [tools/build.c]
Ordinal base for Win32 DLLs is now computed automatically from the
lowest ordinal found.
* [include/wintypes.h]
WINAPI is now defined as attribute((stdcall)). This will require
gcc to compile.
* [if1632/thunk.c]
Removed Win32 thunks (no longer needed with stdcall).
* [if1632/crtdll.spec] [misc/crtdll.c]
Make sure we only reference cdecl functions in the spec file.
* [objects/dc.c]
Use CapNotLast drawing style for 1-pixel wide lines.
* [tools/build.c]
Added 'double' argument type.
Added 'varargs' function type for Win32.
Made CallTo16_xxx functions stdcall.
Fri Sep 5 14:50:49 1997 Alex Korobka <alex@trantor.pharm.sunysb.edu>
* [tools/build.c] [windows/win.c] [windows/event.c] [windows/message.c]
More fixes to get message exchange closer to the original.
* [misc/spy.c]
Message logs now contain window names.
* [loader/resource.c] [loader/ne_resource.c] [loader/task.c]
[objects/cursoricon.c] [windows/user.c]
Added some obscure features to fix memory leaks.
Fri Sep 5 00:46:28 1997 Jan Willamowius <jan@janhh.shnet.org>
* [if1632/kernel32.spec] [win32/newfns.c]
Added stub for UTRegister() and UTUnRegister().
Thu Sep 4 12:03:12 1997 Frans van Dorsselaer <dorssel@rulhmpc49.LeidenUniv.nl>
* [controls/edit.c]
Allow ASCII codes > 127 in WM_CHAR.
Mon Sep 1 17:23:24 1997 Dimitrie O. Paun <dimi@mail.cs.toronto.edu>
* [controls/widgets.c]
In InitCommonControls, remember the name of the class
because lpszClassName was made to point to a local array
Added the ProgressBar to the list of implemented controls.
Call InitCommonControls from WIDGETS_Init to register all
implemented Common Controls.
* [include/commctrl.h]
Added misc decl for the Progress Bar.
* [controls/progress.c] [include/progress.h]
First attempt at implementiong the Progress Bar class.
* [objects/brush.h]
Implementation for GetSysColorBrush[16|32]
* [controls/status.c]
Use DrawEdge to draw the borders and fill the background
* [controls/uitools.c]
Added DrawDiagEdge32 and DrawRectEdge32
* [graphics/painting.c]
Implement DrawEdge[16|32]
Started DrawFrameControl32
Mon Sep 1 10:07:09 1997 Lawson Whitney <lawson_whitney@juno.com>
* [misc/comm.c] [include/windows.h]
SetCommEventMask returns a SEGPTR.
Sun Aug 31 23:28:32 1997 Marcus Meissner <msmeissn@cip.informatik.uni-erlangen.de>
* [loader/pe_image.c][loader/module.c][include/pe_image.h]
[include/module.h]
Cleaned up the whole Win32 library mess (a bit).
* [debugger/stabs.c]
If 'wine' has no absolute path and isn't found, check $PATH too.
* [misc/ole2nls.c]
Some fixes.
* [misc/ver.c]
Added support for PE style version resources.
* [memory/string.c]
Check for NULL pointers to _lstr* functions, just as Windows95 does.
* [multimedia/time.c]
Made list of timers a simple linked list.
* [loader/resource.c]
Netscape 3 seems to pass NEGATIVE resource Ids (in an
unsigned int, yes). Don't know why, fixed it anyway.
* [objects/bitmap.c]
LoadImageW added.
* [include/win.h][windows/win.c]
Change wIDmenu from UINT16 to UINT32 and changed the
SetWindow(Long|Word) accordingly.
Thu Aug 28 19:30:08 1997 Morten Welinder <terra@diku.dk>
* [include/windows.h]
Add a few more colors defined for Win95.
Add a few more brush styles.
* [windows/syscolor.c]
Add error checks for SYSCOLOR_SetColor, SYSCOLOR_Init,
GetSysColor16, GetSysColor32. Add support for above colors.
Sun Aug 24 16:22:57 1997 Andrew Taylor <andrew@riscan.com>
* [multimedia/mmsystem.c]
Changed mmioDescend to use mmio functions for file I/O, neccessary
for memory files.
1997-09-14 19:17:23 +02:00
|
|
|
*/
|
2009-09-12 14:10:20 +02:00
|
|
|
HMODULE WINAPI DECLSPEC_HOTPATCH LoadLibraryW(LPCWSTR libnameW)
|
Release 970914
Thu Sep 11 18:24:56 1997 Philippe De Muyter <phdm@info.ucl.ac.be>
* [objects/dc.c]
In DC_SetupGCForPatBlt, replace R2_NOT by GXxor with (black xor white).
Tue Sep 9 23:04:02 1997 U. Bonnes <bon@elektron.ikp.physik.th-darmstadt.de>
* [memory/virtual.c]
Do not write debugging info unconditionally to stderr.
* [files/profile.c]
Call PROFILE_GetSection in PROFILE_GetString for key_name "" too.
* [misc/crtdll.c]
Many new functions.
* [include/windows.h] [windows/winpos.c]
ClientToScreen16 doesn't have a return value.
Sun Sep 7 10:06:39 1997 Alexandre Julliard <julliard@lrc.epfl.ch>
* [misc/main.c] [AUTHORS]
Update the list of contributors. Please let me know if I forgot
someone.
* [if1632/*.spec] [if1632/builtin.c] [tools/build.c]
Ordinal base for Win32 DLLs is now computed automatically from the
lowest ordinal found.
* [include/wintypes.h]
WINAPI is now defined as attribute((stdcall)). This will require
gcc to compile.
* [if1632/thunk.c]
Removed Win32 thunks (no longer needed with stdcall).
* [if1632/crtdll.spec] [misc/crtdll.c]
Make sure we only reference cdecl functions in the spec file.
* [objects/dc.c]
Use CapNotLast drawing style for 1-pixel wide lines.
* [tools/build.c]
Added 'double' argument type.
Added 'varargs' function type for Win32.
Made CallTo16_xxx functions stdcall.
Fri Sep 5 14:50:49 1997 Alex Korobka <alex@trantor.pharm.sunysb.edu>
* [tools/build.c] [windows/win.c] [windows/event.c] [windows/message.c]
More fixes to get message exchange closer to the original.
* [misc/spy.c]
Message logs now contain window names.
* [loader/resource.c] [loader/ne_resource.c] [loader/task.c]
[objects/cursoricon.c] [windows/user.c]
Added some obscure features to fix memory leaks.
Fri Sep 5 00:46:28 1997 Jan Willamowius <jan@janhh.shnet.org>
* [if1632/kernel32.spec] [win32/newfns.c]
Added stub for UTRegister() and UTUnRegister().
Thu Sep 4 12:03:12 1997 Frans van Dorsselaer <dorssel@rulhmpc49.LeidenUniv.nl>
* [controls/edit.c]
Allow ASCII codes > 127 in WM_CHAR.
Mon Sep 1 17:23:24 1997 Dimitrie O. Paun <dimi@mail.cs.toronto.edu>
* [controls/widgets.c]
In InitCommonControls, remember the name of the class
because lpszClassName was made to point to a local array
Added the ProgressBar to the list of implemented controls.
Call InitCommonControls from WIDGETS_Init to register all
implemented Common Controls.
* [include/commctrl.h]
Added misc decl for the Progress Bar.
* [controls/progress.c] [include/progress.h]
First attempt at implementiong the Progress Bar class.
* [objects/brush.h]
Implementation for GetSysColorBrush[16|32]
* [controls/status.c]
Use DrawEdge to draw the borders and fill the background
* [controls/uitools.c]
Added DrawDiagEdge32 and DrawRectEdge32
* [graphics/painting.c]
Implement DrawEdge[16|32]
Started DrawFrameControl32
Mon Sep 1 10:07:09 1997 Lawson Whitney <lawson_whitney@juno.com>
* [misc/comm.c] [include/windows.h]
SetCommEventMask returns a SEGPTR.
Sun Aug 31 23:28:32 1997 Marcus Meissner <msmeissn@cip.informatik.uni-erlangen.de>
* [loader/pe_image.c][loader/module.c][include/pe_image.h]
[include/module.h]
Cleaned up the whole Win32 library mess (a bit).
* [debugger/stabs.c]
If 'wine' has no absolute path and isn't found, check $PATH too.
* [misc/ole2nls.c]
Some fixes.
* [misc/ver.c]
Added support for PE style version resources.
* [memory/string.c]
Check for NULL pointers to _lstr* functions, just as Windows95 does.
* [multimedia/time.c]
Made list of timers a simple linked list.
* [loader/resource.c]
Netscape 3 seems to pass NEGATIVE resource Ids (in an
unsigned int, yes). Don't know why, fixed it anyway.
* [objects/bitmap.c]
LoadImageW added.
* [include/win.h][windows/win.c]
Change wIDmenu from UINT16 to UINT32 and changed the
SetWindow(Long|Word) accordingly.
Thu Aug 28 19:30:08 1997 Morten Welinder <terra@diku.dk>
* [include/windows.h]
Add a few more colors defined for Win95.
Add a few more brush styles.
* [windows/syscolor.c]
Add error checks for SYSCOLOR_SetColor, SYSCOLOR_Init,
GetSysColor16, GetSysColor32. Add support for above colors.
Sun Aug 24 16:22:57 1997 Andrew Taylor <andrew@riscan.com>
* [multimedia/mmsystem.c]
Changed mmioDescend to use mmio functions for file I/O, neccessary
for memory files.
1997-09-14 19:17:23 +02:00
|
|
|
{
|
2003-03-14 06:01:20 +01:00
|
|
|
return LoadLibraryExW(libnameW, 0, 0);
|
1997-05-09 10:40:27 +02:00
|
|
|
}
|
|
|
|
|
1999-04-18 14:14:06 +02:00
|
|
|
/***********************************************************************
|
2001-07-11 20:56:41 +02:00
|
|
|
* FreeLibrary (KERNEL32.@)
|
2003-10-01 05:20:21 +02:00
|
|
|
*
|
|
|
|
* Free a dll loaded into the process address space.
|
|
|
|
*
|
|
|
|
* PARAMS
|
|
|
|
* hLibModule [I] Handle to the dll returned by LoadLibraryA().
|
|
|
|
*
|
|
|
|
* RETURNS
|
|
|
|
* Success: TRUE. The dll is removed if it is not still in use.
|
|
|
|
* Failure: FALSE. Use GetLastError() to determine the cause.
|
1999-04-18 14:14:06 +02:00
|
|
|
*/
|
2009-09-12 14:10:20 +02:00
|
|
|
BOOL WINAPI DECLSPEC_HOTPATCH FreeLibrary(HINSTANCE hLibModule)
|
1999-04-18 14:14:06 +02:00
|
|
|
{
|
2003-03-14 05:00:52 +01:00
|
|
|
BOOL retv = FALSE;
|
|
|
|
NTSTATUS nts;
|
2001-06-06 22:24:12 +02:00
|
|
|
|
2003-03-14 06:01:20 +01:00
|
|
|
if (!hLibModule)
|
|
|
|
{
|
|
|
|
SetLastError( ERROR_INVALID_HANDLE );
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
2018-03-01 17:18:03 +01:00
|
|
|
if ((ULONG_PTR)hLibModule & 3) /* this is a datafile module */
|
2001-06-06 22:24:12 +02:00
|
|
|
{
|
2018-03-01 17:21:32 +01:00
|
|
|
if ((ULONG_PTR)hLibModule & 1)
|
|
|
|
{
|
|
|
|
struct exclusive_datafile *file;
|
|
|
|
ULONG_PTR magic;
|
|
|
|
|
|
|
|
LdrLockLoaderLock( 0, NULL, &magic );
|
|
|
|
LIST_FOR_EACH_ENTRY( file, &exclusive_datafile_list, struct exclusive_datafile, entry )
|
|
|
|
{
|
|
|
|
if (file->module != hLibModule) continue;
|
|
|
|
TRACE( "closing %p for module %p\n", file->file, file->module );
|
|
|
|
CloseHandle( file->file );
|
|
|
|
list_remove( &file->entry );
|
|
|
|
HeapFree( GetProcessHeap(), 0, file );
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
LdrUnlockLoaderLock( 0, magic );
|
|
|
|
}
|
2018-03-01 17:18:03 +01:00
|
|
|
return UnmapViewOfFile( (void *)((ULONG_PTR)hLibModule & ~3) );
|
2001-06-06 22:24:12 +02:00
|
|
|
}
|
1999-04-11 16:52:24 +02:00
|
|
|
|
2003-03-14 05:00:52 +01:00
|
|
|
if ((nts = LdrUnloadDll( hLibModule )) == STATUS_SUCCESS) retv = TRUE;
|
|
|
|
else SetLastError( RtlNtStatusToDosError( nts ) );
|
1999-04-11 16:52:24 +02:00
|
|
|
|
1999-04-18 14:14:06 +02:00
|
|
|
return retv;
|
|
|
|
}
|
1999-04-11 16:52:24 +02:00
|
|
|
|
1996-07-12 21:02:39 +02:00
|
|
|
/***********************************************************************
|
2001-06-13 22:13:18 +02:00
|
|
|
* GetProcAddress (KERNEL32.@)
|
2003-10-01 05:20:21 +02:00
|
|
|
*
|
|
|
|
* Find the address of an exported symbol in a loaded dll.
|
|
|
|
*
|
|
|
|
* PARAMS
|
|
|
|
* hModule [I] Handle to the dll returned by LoadLibraryA().
|
|
|
|
* function [I] Name of the symbol, or an integer ordinal number < 16384
|
|
|
|
*
|
|
|
|
* RETURNS
|
|
|
|
* Success: A pointer to the symbol in the process address space.
|
|
|
|
* Failure: NULL. Use GetLastError() to determine the cause.
|
1996-07-12 21:02:39 +02:00
|
|
|
*/
|
2018-02-06 11:26:13 +01:00
|
|
|
FARPROC get_proc_address( HMODULE hModule, LPCSTR function )
|
1996-07-12 21:02:39 +02:00
|
|
|
{
|
2003-03-07 00:41:37 +01:00
|
|
|
NTSTATUS nts;
|
|
|
|
FARPROC fp;
|
|
|
|
|
2005-07-11 20:39:49 +02:00
|
|
|
if (!hModule) hModule = NtCurrentTeb()->Peb->ImageBaseAddress;
|
|
|
|
|
2010-02-10 11:43:37 +01:00
|
|
|
if ((ULONG_PTR)function >> 16)
|
2003-03-07 00:41:37 +01:00
|
|
|
{
|
|
|
|
ANSI_STRING str;
|
|
|
|
|
|
|
|
RtlInitAnsiString( &str, function );
|
|
|
|
nts = LdrGetProcedureAddress( hModule, &str, 0, (void**)&fp );
|
|
|
|
}
|
|
|
|
else
|
2005-09-12 23:22:32 +02:00
|
|
|
nts = LdrGetProcedureAddress( hModule, NULL, LOWORD(function), (void**)&fp );
|
2003-03-07 00:41:37 +01:00
|
|
|
if (nts != STATUS_SUCCESS)
|
|
|
|
{
|
|
|
|
SetLastError( RtlNtStatusToDosError( nts ) );
|
|
|
|
fp = NULL;
|
|
|
|
}
|
|
|
|
return fp;
|
Release 980503
Thu Apr 30 16:28:12 1998 James Juran <jrj120@psu.edu>
* [scheduler/process.c]
Implemented GetExitCodeProcess. The code is a direct translation
of GetExitCodeThread.
Mon Apr 27 22:20:25 1998 Uwe Bonnes <bon@elektron.ikp.physik.tu-darmstadt.de>
* [loader/pe_image.c]
Unload dummy module when PE_LoadLibraryEx32A fails with
PE_LoadImage (makes Encarta 98 installer proceed).
* [files/drive.c]
Make GetDriveType16 return DRIVE_REMOVABLE for TYPE_CDROM.
Make GetCurrentDirectory32 behave like the code does and not
like the help describes.
* [files/profile.c]
Revoke recent change in PROFILE_GetSection and try better
handling of special case.
* [include/windows.h]
Change definition of ACCEL32.
* [misc/commdlg.c]
Replace the GetXXXFilename32 macros by normal code.
Fix two reported bugs in my changes to commdlg.
* [windows/win.c]
Add a hook to catch bogus WM_SIZE messages by emitting a warning
in the appropriate case.
* [objects/bitmap.c]
Reject unreasonbable large size arguments in
CreateCompatibleBitmap32 and add an fixme for that situation.
Sun Apr 26 18:30:07 1998 Alexandre Julliard <julliard@lrc.epfl.ch>
* [include/ldt.h] [debugger/*.c] [miscemu/instr.c]
Added IS_SELECTOR_SYSTEM and IS_SELECTOR_32BIT macros.
Make instruction emulation support system selectors.
* [loader/*.c]
Started moving NE specific functions to the new loader/ne
directory.
* [memory/environ.c]
Enforce the 127 chars limit only when creating the environment of
a Win16 process.
Sun Apr 26 12:22:23 1998 Andreas Mohr <100.30936@germany.net>
* [files/file.c]
Fixed an incredible typo in CopyFile32A that made it unusable
since a rewrite in 970112 (!!).
* [files/directory.c]
Fixed GetTempPath32A/W to include trailing backslash.
* [misc/ver.c]
Make find_pe_resource "work" with corrupt files.
* [misc/wsprintf.c]
Altered WPRINTF_ParseFormatA/W to treat invalid format chars
as normal output, too.
* [msdos/dpmi.c]
Implemented "Allocate/Free real mode callback" (0x0303/0x0304).
Cross your fingers if you need to use it ;) (completely untested)
Implemented "Call real mode proc with far return" (0x0301, tested).
* [msdos/int21.c]
Fixed ioctlGenericBlkDevReq/0x60.
* [relay32/dplayx.spec] [relay32/builtin32.c] [relay32/Makefile.in]
Added built-in DPLAYX.DLL.
* [windows/win.c]
Fixed GetWindowWord()/GWW_HWNDPARENT to return the window's owner
if it has no parent (SDK).
Sat Apr 25 15:09:53 1998 M.T.Fortescue <mark@mtfhpc.demon.co.uk>
* [debugger/db_disasm.c]
Fixed disassemble bug for no-display option and 'lock',
'repne' and 'repe' prefixes.
* [debugger/registers.c]
Added textual flag description output on 'info regs'.
Sat Apr 25 14:18:26 1998 Matthew Becker <mbecker@glasscity.net>
* [*/*.c]
Added stubs and/or documentation for the following functions:
LookupPrivilegeValue, OpenService, ControlService, RegGetKeySecurity,
StartService, SetComputerName, DeleteService, CloseServiceHandle,
OpenProcessToken, OpenSCManager, DeregisterEventSource,
WaitForDebugEvent, WaitForInputIdle, RegisterEventSource,
SetDebugErrorLevel, SetConsoleCursorPosition, ChoosePixelFormat,
SetPixelFormat, GetPixelFormat, DescribePixelFormat, SwapBuffers,
PolyBezier, AbortPath, DestroyAcceleratorTable, HeapWalk,
DdeInitialize, DdeUninitialize, DdeConnectList, DdeDisconnectList,
DdeCreateStringHandle, DdePostAdvise, DdeGetData, DdeNameService,
DdeGetLastError, WNetGetDirectoryType, EnumPrinters, RegFlushKey,
RegGetKeySecurity, DllGetClassObject, DllCanUnloadNow, CreateBitmap,
CreateCompatibleBitmap, CreateBitmapIndirect, GetBitmapBits,
SetBitmapBits, LoadImage, CopyImage, LoadBitmap, DrawIcon,
CreateDiscardableBitmap, SetDIBits, GetCharABCWidths, LoadTypeLib,
SetConsoleCtrlHandler, CreateConsoleScreenBuffer, ReadConsoleInput,
GetConsoleCursorInfo, SetConsoleCursorInfo, SetConsoleWindowInfo,
SetConsoleTextAttribute, SetConsoleScreenBufferSize,
FillConsoleOutputCharacter, FillConsoleOutputAttribute,
CreateMailslot, GetMailslotInfo, GetCompressedFileSize,
GetProcessWindowStation, GetThreadDesktop, SetDebugErrorLevel,
WaitForDebugEvent, SetComputerName, CreateMDIWindow.
Thu Apr 23 23:54:04 1998 Douglas Ridgway <ridgway@winehq.com>
* [include/windows.h] [objects/enhmetafile.c] [relay32/gdi32.spec]
Implement CopyEnhMetaFile, Get/SetEnhMetaFileBits, other fixes.
* [include/windows.h] [objects/metafile.c] [relay32/gdi32.spec]
32-bit metafile fixes, implement EnumMetaFile32, GetMetaFileBitsEx.
* [objects/font.c] [graphics/x11drv/xfont.c] [graphics/x11drv/text.c]
Some rotated text support for X11R6 displays.
* [win32/newfns.c] [ole/ole2nls.c]
Moved GetNumberFormat32A.
Wed Apr 22 17:38:20 1998 David Lee Lambert <lamber45@egr.msu.edu>
* [ole/ole2nls.c] [misc/network.c]
Changed some function documentation to the new style.
* [misc/network.c] [include/windows.h] [if1632/user.spec]
[relay32/mpr.spec] [misc/mpr.c]
Added stubs for some Win32 network functions; renamed some
16-bit ones with 32-bit counterparts, as well as
WNetGetDirectoryType; moved the stubs in misc/mpr.c (three of
them!) to misc/network.c.
* [ole/compobj.c] [ole/storage.c] [ole/ole2disp.c]
[ole/ole2nls.c] [ole/folders.c] [ole/moniker.c] [ole/ole2.c]
[graphics/fontengine.c] [graphics/ddraw.c] [graphics/env.c]
[graphics/driver.c] [graphics/escape.c]
Changed fprintf's to proper debug-macros.
* [include/winnls.h]
Added some flags (for internal use).
* [ole/ole2nls.c]
Added the Unicode core function, and worked out a way to hide
the commonality of the core.
* [relay32/kernel32.spec]
Added support for GetDate/Time32A/W.
Wed Apr 22 09:16:03 1998 Gordon Chaffee <chaffee@cs.berkeley.edu>
* [win32/code_page.c]
Fixed problem with MultiByteToWideChar that was introduced in
last release. Made MultiByteToWideChar more compatible with Win32.
* [graphics/x11drv/graphics.c]
Fixed problem with drawing arcs.
Tue Apr 21 11:24:58 1998 Constantine Sapuntzakis <csapuntz@tma-1.lcs.mit.edu>
* [ole/ole2nls.c]
Move stuff from 0x409 case to Lang_En.
* [relay32/user32.spec] [windows/winpos.c]
Added stubs for GetWindowRgn32 and SetWindowRgn32. Makes Office
Paperclip happy.
Tue Apr 21 11:16:16 1998 Constantine Sapuntzakis <csapuntz@tma-1.lcs.mit.edu>
* [loader/pe_image.c]
If image is relocated, TLS addresses need to be adjusted.
* [debugger/*.c]
Generalized tests for 32-bit segments.
Tue Apr 21 02:04:59 1998 James Juran <jrj120@psu.edu>
* [misc/*.c] [miscemu/*.c] [msdos/*.c] [if1632/*.c]
[include/*.h] [loader/*.c] [memory/*.c] [multimedia/*.c]
[objects/*.c]
Almost all fprintf statements converted to appropriate
debug messages.
* [README]
Updated "GETTING MORE INFORMATION" section to include WineHQ.
* [documentation/debugger]
Fixed typo.
* [windows/defwnd.c]
Added function documentation.
Sun Apr 19 16:30:58 1998 Marcus Meissner <marcus@mud.de>
* [Make.rules.in]
Added lint target (using lclint).
* [relay32/oleaut32.spec][relay32/Makefile.in][ole/typelib.c]
[ole/ole2disp.c]
Added oleaut32 spec, added some SysString functions.
* [if1632/signal.c]
Added printing of faultaddress in Linux (using CR2 debug register).
* [configure.in]
Added <sys/types.h> for statfs checks.
* [loader/*.c][debugger/break.c][debugger/hash.c]
Started to split win32/win16 module handling, preparing support
for other binary formats (like ELF).
Sat Apr 18 10:07:41 1998 Rein Klazes <rklazes@casema.net>
* [misc/registry.c]
Fixed a bug that made RegQueryValuexxx returning
incorrect registry values.
Fri Apr 17 22:59:22 1998 Alexander V. Lukyanov <lav@long.yar.ru>
* [misc/lstr.c]
FormatMessage32*: remove linefeed when nolinefeed set;
check for target underflow.
Fri Apr 17 00:38:14 1998 Alexander V. Lukyanov <lav@long.yar.ru>
* [misc/crtdll.c]
Implement xlat_file_ptr for CRT stdin/stdout/stderr address
translation.
Wed Apr 15 20:43:56 1998 Jim Peterson <jspeter@birch.ee.vt.edu>
* [controls/menu.c]
Added 'odaction' parameter to MENU_DrawMenuItem() and redirected
WM_DRAWITEM messages to GetWindow(hwnd,GW_OWNER).
Tue Apr 14 16:17:55 1998 Berend Reitsma <berend@united-info.com>
* [graphics/metafiledrv/init.c] [graphics/painting.c]
[graphics/win16drv/init.c] [graphics/x11drv/graphics.c]
[graphics/x11drv/init.c] [include/gdi.h] [include/x11drv.h]
[relay32/gdi32.spec]
Added PolyPolyline routine.
* [windows/winproc.c]
Changed WINPROC_GetProc() to return proc instead of &(jmp proc).
1998-05-03 21:01:20 +02:00
|
|
|
}
|
|
|
|
|
2018-02-06 11:26:13 +01:00
|
|
|
#ifdef __x86_64__
|
|
|
|
/*
|
|
|
|
* Work around a Delphi bug on x86_64. When delay loading a symbol,
|
|
|
|
* Delphi saves rcx, rdx, r8 and r9 to the stack. It then calls
|
|
|
|
* GetProcAddress(), pops the saved registers and calls the function.
|
|
|
|
* This works fine if all of the parameters are ints. However, since
|
|
|
|
* it does not save xmm0 - 3, it relies on GetProcAddress() preserving
|
|
|
|
* these registers if the function takes floating point parameters.
|
|
|
|
* This wrapper saves xmm0 - 3 to the stack.
|
|
|
|
*/
|
|
|
|
extern FARPROC get_proc_address_wrapper( HMODULE module, LPCSTR function );
|
|
|
|
|
|
|
|
__ASM_GLOBAL_FUNC( get_proc_address_wrapper,
|
|
|
|
"pushq %rbp\n\t"
|
|
|
|
__ASM_CFI(".cfi_adjust_cfa_offset 8\n\t")
|
|
|
|
__ASM_CFI(".cfi_rel_offset %rbp,0\n\t")
|
|
|
|
"movq %rsp,%rbp\n\t"
|
|
|
|
__ASM_CFI(".cfi_def_cfa_register %rbp\n\t")
|
|
|
|
"subq $0x40,%rsp\n\t"
|
|
|
|
"movaps %xmm0,-0x10(%rbp)\n\t"
|
|
|
|
"movaps %xmm1,-0x20(%rbp)\n\t"
|
|
|
|
"movaps %xmm2,-0x30(%rbp)\n\t"
|
|
|
|
"movaps %xmm3,-0x40(%rbp)\n\t"
|
|
|
|
"call " __ASM_NAME("get_proc_address") "\n\t"
|
|
|
|
"movaps -0x40(%rbp), %xmm3\n\t"
|
|
|
|
"movaps -0x30(%rbp), %xmm2\n\t"
|
|
|
|
"movaps -0x20(%rbp), %xmm1\n\t"
|
|
|
|
"movaps -0x10(%rbp), %xmm0\n\t"
|
|
|
|
"movq %rbp,%rsp\n\t"
|
|
|
|
__ASM_CFI(".cfi_def_cfa_register %rsp\n\t")
|
|
|
|
"popq %rbp\n\t"
|
|
|
|
__ASM_CFI(".cfi_adjust_cfa_offset -8\n\t")
|
|
|
|
__ASM_CFI(".cfi_same_value %rbp\n\t")
|
|
|
|
"ret" )
|
|
|
|
#else /* __x86_64__ */
|
|
|
|
|
|
|
|
static inline FARPROC get_proc_address_wrapper( HMODULE module, LPCSTR function )
|
|
|
|
{
|
|
|
|
return get_proc_address( module, function );
|
|
|
|
}
|
|
|
|
|
|
|
|
#endif /* __x86_64__ */
|
|
|
|
|
|
|
|
FARPROC WINAPI GetProcAddress( HMODULE hModule, LPCSTR function )
|
|
|
|
{
|
|
|
|
return get_proc_address_wrapper( hModule, function );
|
|
|
|
}
|
|
|
|
|
2005-08-12 18:00:42 +02:00
|
|
|
/***********************************************************************
|
|
|
|
* DelayLoadFailureHook (KERNEL32.@)
|
|
|
|
*/
|
|
|
|
FARPROC WINAPI DelayLoadFailureHook( LPCSTR name, LPCSTR function )
|
|
|
|
{
|
|
|
|
ULONG_PTR args[2];
|
|
|
|
|
2006-01-03 13:15:55 +01:00
|
|
|
if ((ULONG_PTR)function >> 16)
|
|
|
|
ERR( "failed to delay load %s.%s\n", name, function );
|
|
|
|
else
|
|
|
|
ERR( "failed to delay load %s.%u\n", name, LOWORD(function) );
|
2005-08-12 18:00:42 +02:00
|
|
|
args[0] = (ULONG_PTR)name;
|
|
|
|
args[1] = (ULONG_PTR)function;
|
|
|
|
RaiseException( EXCEPTION_WINE_STUB, EH_NONCONTINUABLE, 2, args );
|
|
|
|
return NULL;
|
|
|
|
}
|
2009-12-29 16:24:00 +01:00
|
|
|
|
2018-05-29 16:33:03 +02:00
|
|
|
typedef struct _PEB32
|
|
|
|
{
|
|
|
|
BOOLEAN InheritedAddressSpace;
|
|
|
|
BOOLEAN ReadImageFileExecOptions;
|
|
|
|
BOOLEAN BeingDebugged;
|
|
|
|
BOOLEAN SpareBool;
|
|
|
|
DWORD Mutant;
|
|
|
|
DWORD ImageBaseAddress;
|
|
|
|
DWORD LdrData;
|
|
|
|
} PEB32;
|
|
|
|
|
|
|
|
typedef struct _LIST_ENTRY32
|
|
|
|
{
|
|
|
|
DWORD Flink;
|
|
|
|
DWORD Blink;
|
|
|
|
} LIST_ENTRY32;
|
|
|
|
|
|
|
|
typedef struct _PEB_LDR_DATA32
|
|
|
|
{
|
|
|
|
ULONG Length;
|
|
|
|
BOOLEAN Initialized;
|
|
|
|
DWORD SsHandle;
|
|
|
|
LIST_ENTRY32 InLoadOrderModuleList;
|
|
|
|
} PEB_LDR_DATA32;
|
|
|
|
|
|
|
|
typedef struct _UNICODE_STRING32
|
|
|
|
{
|
|
|
|
USHORT Length;
|
|
|
|
USHORT MaximumLength;
|
|
|
|
DWORD Buffer;
|
|
|
|
} UNICODE_STRING32;
|
|
|
|
|
|
|
|
typedef struct _LDR_MODULE32
|
|
|
|
{
|
|
|
|
LIST_ENTRY32 InLoadOrderModuleList;
|
|
|
|
LIST_ENTRY32 InMemoryOrderModuleList;
|
|
|
|
LIST_ENTRY32 InInitializationOrderModuleList;
|
|
|
|
DWORD BaseAddress;
|
|
|
|
DWORD EntryPoint;
|
|
|
|
ULONG SizeOfImage;
|
|
|
|
UNICODE_STRING32 FullDllName;
|
|
|
|
UNICODE_STRING32 BaseDllName;
|
|
|
|
} LDR_MODULE32;
|
|
|
|
|
2011-05-12 14:19:52 +02:00
|
|
|
typedef struct {
|
|
|
|
HANDLE process;
|
|
|
|
PLIST_ENTRY head, current;
|
|
|
|
LDR_MODULE ldr_module;
|
2018-05-29 16:33:03 +02:00
|
|
|
BOOL wow64;
|
|
|
|
LDR_MODULE32 ldr_module32;
|
2011-05-12 14:19:52 +02:00
|
|
|
} MODULE_ITERATOR;
|
|
|
|
|
|
|
|
static BOOL init_module_iterator(MODULE_ITERATOR *iter, HANDLE process)
|
|
|
|
{
|
|
|
|
PROCESS_BASIC_INFORMATION pbi;
|
|
|
|
PPEB_LDR_DATA ldr_data;
|
|
|
|
NTSTATUS status;
|
|
|
|
|
2018-05-29 16:33:03 +02:00
|
|
|
if (!IsWow64Process(process, &iter->wow64))
|
|
|
|
return FALSE;
|
|
|
|
|
2011-05-12 14:19:52 +02:00
|
|
|
/* Get address of PEB */
|
|
|
|
status = NtQueryInformationProcess(process, ProcessBasicInformation,
|
|
|
|
&pbi, sizeof(pbi), NULL);
|
|
|
|
if (status != STATUS_SUCCESS)
|
|
|
|
{
|
|
|
|
SetLastError(RtlNtStatusToDosError(status));
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
2018-05-29 16:33:03 +02:00
|
|
|
if (sizeof(void *) == 8 && iter->wow64)
|
|
|
|
{
|
|
|
|
PEB_LDR_DATA32 *ldr_data32_ptr;
|
|
|
|
DWORD ldr_data32, first_module;
|
|
|
|
PEB32 *peb32;
|
|
|
|
|
|
|
|
peb32 = (PEB32 *)(DWORD_PTR)pbi.PebBaseAddress;
|
|
|
|
|
|
|
|
if (!ReadProcessMemory(process, &peb32->LdrData, &ldr_data32,
|
|
|
|
sizeof(ldr_data32), NULL))
|
|
|
|
return FALSE;
|
|
|
|
ldr_data32_ptr = (PEB_LDR_DATA32 *)(DWORD_PTR) ldr_data32;
|
|
|
|
|
|
|
|
if (!ReadProcessMemory(process,
|
|
|
|
&ldr_data32_ptr->InLoadOrderModuleList.Flink,
|
|
|
|
&first_module, sizeof(first_module), NULL))
|
|
|
|
return FALSE;
|
|
|
|
iter->head = (LIST_ENTRY *)&ldr_data32_ptr->InLoadOrderModuleList;
|
|
|
|
iter->current = (LIST_ENTRY *)(DWORD_PTR) first_module;
|
|
|
|
iter->process = process;
|
|
|
|
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
2011-05-12 14:19:52 +02:00
|
|
|
/* Read address of LdrData from PEB */
|
|
|
|
if (!ReadProcessMemory(process, &pbi.PebBaseAddress->LdrData,
|
|
|
|
&ldr_data, sizeof(ldr_data), NULL))
|
|
|
|
return FALSE;
|
|
|
|
|
|
|
|
/* Read address of first module from LdrData */
|
|
|
|
if (!ReadProcessMemory(process,
|
|
|
|
&ldr_data->InLoadOrderModuleList.Flink,
|
|
|
|
&iter->current, sizeof(iter->current), NULL))
|
|
|
|
return FALSE;
|
|
|
|
|
|
|
|
iter->head = &ldr_data->InLoadOrderModuleList;
|
|
|
|
iter->process = process;
|
|
|
|
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
static int module_iterator_next(MODULE_ITERATOR *iter)
|
|
|
|
{
|
|
|
|
if (iter->current == iter->head)
|
|
|
|
return 0;
|
|
|
|
|
2018-05-29 16:33:03 +02:00
|
|
|
if (sizeof(void *) == 8 && iter->wow64)
|
|
|
|
{
|
|
|
|
LIST_ENTRY32 *entry32 = (LIST_ENTRY32 *)iter->current;
|
|
|
|
|
|
|
|
if (!ReadProcessMemory(iter->process,
|
|
|
|
CONTAINING_RECORD(entry32, LDR_MODULE32, InLoadOrderModuleList),
|
|
|
|
&iter->ldr_module32, sizeof(iter->ldr_module32), NULL))
|
|
|
|
return -1;
|
|
|
|
|
|
|
|
iter->current = (LIST_ENTRY *)(DWORD_PTR) iter->ldr_module32.InLoadOrderModuleList.Flink;
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
2011-05-12 14:19:52 +02:00
|
|
|
if (!ReadProcessMemory(iter->process,
|
|
|
|
CONTAINING_RECORD(iter->current, LDR_MODULE, InLoadOrderModuleList),
|
|
|
|
&iter->ldr_module, sizeof(iter->ldr_module), NULL))
|
|
|
|
return -1;
|
|
|
|
|
|
|
|
iter->current = iter->ldr_module.InLoadOrderModuleList.Flink;
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
2011-05-12 14:22:59 +02:00
|
|
|
static BOOL get_ldr_module(HANDLE process, HMODULE module, LDR_MODULE *ldr_module)
|
|
|
|
{
|
|
|
|
MODULE_ITERATOR iter;
|
|
|
|
INT ret;
|
|
|
|
|
|
|
|
if (!init_module_iterator(&iter, process))
|
|
|
|
return FALSE;
|
|
|
|
|
|
|
|
while ((ret = module_iterator_next(&iter)) > 0)
|
|
|
|
/* When hModule is NULL we return the process image - which will be
|
|
|
|
* the first module since our iterator uses InLoadOrderModuleList */
|
|
|
|
if (!module || module == iter.ldr_module.BaseAddress)
|
|
|
|
{
|
|
|
|
*ldr_module = iter.ldr_module;
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (ret == 0)
|
|
|
|
SetLastError(ERROR_INVALID_HANDLE);
|
|
|
|
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
2018-05-29 16:33:04 +02:00
|
|
|
static BOOL get_ldr_module32(HANDLE process, HMODULE module, LDR_MODULE32 *ldr_module)
|
|
|
|
{
|
|
|
|
MODULE_ITERATOR iter;
|
|
|
|
INT ret;
|
|
|
|
|
|
|
|
if (!init_module_iterator(&iter, process))
|
|
|
|
return FALSE;
|
|
|
|
|
|
|
|
while ((ret = module_iterator_next(&iter)) > 0)
|
|
|
|
/* When hModule is NULL we return the process image - which will be
|
|
|
|
* the first module since our iterator uses InLoadOrderModuleList */
|
|
|
|
if (!module || (DWORD)(DWORD_PTR) module == iter.ldr_module32.BaseAddress)
|
|
|
|
{
|
|
|
|
*ldr_module = iter.ldr_module32;
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (ret == 0)
|
|
|
|
SetLastError(ERROR_INVALID_HANDLE);
|
|
|
|
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
2011-05-12 14:19:52 +02:00
|
|
|
/***********************************************************************
|
|
|
|
* K32EnumProcessModules (KERNEL32.@)
|
|
|
|
*
|
|
|
|
* NOTES
|
|
|
|
* Returned list is in load order.
|
|
|
|
*/
|
|
|
|
BOOL WINAPI K32EnumProcessModules(HANDLE process, HMODULE *lphModule,
|
|
|
|
DWORD cb, DWORD *needed)
|
|
|
|
{
|
|
|
|
MODULE_ITERATOR iter;
|
2018-01-19 15:50:38 +01:00
|
|
|
DWORD size = 0;
|
2011-05-12 14:19:52 +02:00
|
|
|
INT ret;
|
|
|
|
|
|
|
|
if (!init_module_iterator(&iter, process))
|
|
|
|
return FALSE;
|
|
|
|
|
2018-01-19 15:50:38 +01:00
|
|
|
if (cb && !lphModule)
|
2012-06-21 23:11:19 +02:00
|
|
|
{
|
|
|
|
SetLastError(ERROR_NOACCESS);
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
2011-05-12 14:19:52 +02:00
|
|
|
while ((ret = module_iterator_next(&iter)) > 0)
|
|
|
|
{
|
|
|
|
if (cb >= sizeof(HMODULE))
|
|
|
|
{
|
2018-05-29 16:33:03 +02:00
|
|
|
if (sizeof(void *) == 8 && iter.wow64)
|
|
|
|
*lphModule++ = (HMODULE) (DWORD_PTR)iter.ldr_module32.BaseAddress;
|
|
|
|
else
|
|
|
|
*lphModule++ = iter.ldr_module.BaseAddress;
|
2011-05-12 14:19:52 +02:00
|
|
|
cb -= sizeof(HMODULE);
|
|
|
|
}
|
2018-01-19 15:50:38 +01:00
|
|
|
size += sizeof(HMODULE);
|
|
|
|
}
|
|
|
|
|
|
|
|
if (!needed)
|
|
|
|
{
|
|
|
|
SetLastError(ERROR_NOACCESS);
|
|
|
|
return FALSE;
|
2011-05-12 14:19:52 +02:00
|
|
|
}
|
2018-01-19 15:50:38 +01:00
|
|
|
*needed = size;
|
2011-05-12 14:19:52 +02:00
|
|
|
|
|
|
|
return ret == 0;
|
|
|
|
}
|
|
|
|
|
2014-11-29 23:00:53 +01:00
|
|
|
/***********************************************************************
|
|
|
|
* K32EnumProcessModulesEx (KERNEL32.@)
|
|
|
|
*
|
|
|
|
* NOTES
|
|
|
|
* Returned list is in load order.
|
|
|
|
*/
|
|
|
|
BOOL WINAPI K32EnumProcessModulesEx(HANDLE process, HMODULE *lphModule,
|
|
|
|
DWORD cb, DWORD *needed, DWORD filter)
|
|
|
|
{
|
|
|
|
FIXME("(%p, %p, %d, %p, %d) semi-stub\n",
|
|
|
|
process, lphModule, cb, needed, filter);
|
|
|
|
return K32EnumProcessModules(process, lphModule, cb, needed);
|
|
|
|
}
|
|
|
|
|
2011-05-12 14:22:59 +02:00
|
|
|
/***********************************************************************
|
|
|
|
* K32GetModuleBaseNameW (KERNEL32.@)
|
|
|
|
*/
|
|
|
|
DWORD WINAPI K32GetModuleBaseNameW(HANDLE process, HMODULE module,
|
|
|
|
LPWSTR base_name, DWORD size)
|
|
|
|
{
|
|
|
|
LDR_MODULE ldr_module;
|
2018-05-29 16:33:04 +02:00
|
|
|
BOOL wow64;
|
2011-05-12 14:22:59 +02:00
|
|
|
|
2018-05-29 16:33:04 +02:00
|
|
|
if (!IsWow64Process(process, &wow64))
|
2011-05-12 14:22:59 +02:00
|
|
|
return 0;
|
|
|
|
|
2018-05-29 16:33:04 +02:00
|
|
|
if (sizeof(void *) == 8 && wow64)
|
|
|
|
{
|
|
|
|
LDR_MODULE32 ldr_module32;
|
|
|
|
|
|
|
|
if (!get_ldr_module32(process, module, &ldr_module32))
|
|
|
|
return 0;
|
|
|
|
|
|
|
|
size = min(ldr_module32.BaseDllName.Length / sizeof(WCHAR), size);
|
|
|
|
if (!ReadProcessMemory(process, (void *)(DWORD_PTR)ldr_module32.BaseDllName.Buffer,
|
|
|
|
base_name, size * sizeof(WCHAR), NULL))
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
if (!get_ldr_module(process, module, &ldr_module))
|
|
|
|
return 0;
|
|
|
|
|
|
|
|
size = min(ldr_module.BaseDllName.Length / sizeof(WCHAR), size);
|
|
|
|
if (!ReadProcessMemory(process, ldr_module.BaseDllName.Buffer,
|
|
|
|
base_name, size * sizeof(WCHAR), NULL))
|
|
|
|
return 0;
|
|
|
|
}
|
2011-05-12 14:22:59 +02:00
|
|
|
|
|
|
|
base_name[size] = 0;
|
|
|
|
return size;
|
|
|
|
}
|
|
|
|
|
|
|
|
/***********************************************************************
|
|
|
|
* K32GetModuleBaseNameA (KERNEL32.@)
|
|
|
|
*/
|
|
|
|
DWORD WINAPI K32GetModuleBaseNameA(HANDLE process, HMODULE module,
|
|
|
|
LPSTR base_name, DWORD size)
|
|
|
|
{
|
|
|
|
WCHAR *base_name_w;
|
|
|
|
DWORD len, ret = 0;
|
|
|
|
|
|
|
|
if(!base_name || !size) {
|
|
|
|
SetLastError(ERROR_INVALID_PARAMETER);
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
base_name_w = HeapAlloc(GetProcessHeap(), 0, sizeof(WCHAR) * size);
|
|
|
|
if(!base_name_w)
|
|
|
|
return 0;
|
|
|
|
|
|
|
|
len = K32GetModuleBaseNameW(process, module, base_name_w, size);
|
|
|
|
TRACE("%d, %s\n", len, debugstr_w(base_name_w));
|
|
|
|
if (len)
|
|
|
|
{
|
|
|
|
ret = WideCharToMultiByte(CP_ACP, 0, base_name_w, len,
|
|
|
|
base_name, size, NULL, NULL);
|
|
|
|
if (ret < size) base_name[ret] = 0;
|
|
|
|
}
|
|
|
|
HeapFree(GetProcessHeap(), 0, base_name_w);
|
|
|
|
return ret;
|
|
|
|
}
|
2009-12-29 16:24:00 +01:00
|
|
|
|
2011-05-12 14:23:22 +02:00
|
|
|
/***********************************************************************
|
|
|
|
* K32GetModuleFileNameExW (KERNEL32.@)
|
|
|
|
*/
|
|
|
|
DWORD WINAPI K32GetModuleFileNameExW(HANDLE process, HMODULE module,
|
|
|
|
LPWSTR file_name, DWORD size)
|
|
|
|
{
|
|
|
|
LDR_MODULE ldr_module;
|
2018-05-29 16:33:05 +02:00
|
|
|
BOOL wow64;
|
2012-04-30 14:19:57 +02:00
|
|
|
DWORD len;
|
|
|
|
|
|
|
|
if (!size) return 0;
|
2011-05-12 14:23:22 +02:00
|
|
|
|
2018-05-29 16:33:05 +02:00
|
|
|
if (!IsWow64Process(process, &wow64))
|
2011-05-12 14:23:22 +02:00
|
|
|
return 0;
|
|
|
|
|
2018-05-29 16:33:05 +02:00
|
|
|
if (sizeof(void *) == 8 && wow64)
|
|
|
|
{
|
|
|
|
LDR_MODULE32 ldr_module32;
|
|
|
|
|
|
|
|
if (!get_ldr_module32(process, module, &ldr_module32))
|
|
|
|
return 0;
|
|
|
|
|
|
|
|
len = ldr_module32.FullDllName.Length / sizeof(WCHAR);
|
|
|
|
if (!ReadProcessMemory(process, (void *)(DWORD_PTR)ldr_module32.FullDllName.Buffer,
|
|
|
|
file_name, min( len, size ) * sizeof(WCHAR), NULL))
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
if (!get_ldr_module(process, module, &ldr_module))
|
|
|
|
return 0;
|
|
|
|
|
|
|
|
len = ldr_module.FullDllName.Length / sizeof(WCHAR);
|
|
|
|
if (!ReadProcessMemory(process, ldr_module.FullDllName.Buffer,
|
|
|
|
file_name, min( len, size ) * sizeof(WCHAR), NULL))
|
|
|
|
return 0;
|
|
|
|
}
|
2011-05-12 14:23:22 +02:00
|
|
|
|
2012-05-01 14:43:46 +02:00
|
|
|
if (len < size)
|
|
|
|
{
|
|
|
|
file_name[len] = 0;
|
|
|
|
return len;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
file_name[size - 1] = 0;
|
|
|
|
return size;
|
|
|
|
}
|
2011-05-12 14:23:22 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
/***********************************************************************
|
|
|
|
* K32GetModuleFileNameExA (KERNEL32.@)
|
|
|
|
*/
|
|
|
|
DWORD WINAPI K32GetModuleFileNameExA(HANDLE process, HMODULE module,
|
|
|
|
LPSTR file_name, DWORD size)
|
|
|
|
{
|
|
|
|
WCHAR *ptr;
|
2012-04-30 14:19:57 +02:00
|
|
|
DWORD len;
|
2011-05-12 14:23:22 +02:00
|
|
|
|
|
|
|
TRACE("(hProcess=%p, hModule=%p, %p, %d)\n", process, module, file_name, size);
|
|
|
|
|
2012-04-30 14:19:57 +02:00
|
|
|
if (!file_name || !size)
|
|
|
|
{
|
|
|
|
SetLastError( ERROR_INVALID_PARAMETER );
|
|
|
|
return 0;
|
|
|
|
}
|
2011-05-12 14:23:22 +02:00
|
|
|
|
|
|
|
if ( process == GetCurrentProcess() )
|
|
|
|
{
|
2012-04-30 14:19:57 +02:00
|
|
|
len = GetModuleFileNameA( module, file_name, size );
|
2011-05-12 14:23:22 +02:00
|
|
|
if (size) file_name[size - 1] = '\0';
|
|
|
|
return len;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (!(ptr = HeapAlloc(GetProcessHeap(), 0, size * sizeof(WCHAR)))) return 0;
|
|
|
|
|
2012-04-30 14:19:57 +02:00
|
|
|
len = K32GetModuleFileNameExW(process, module, ptr, size);
|
|
|
|
if (!len)
|
2011-05-12 14:23:22 +02:00
|
|
|
{
|
|
|
|
file_name[0] = '\0';
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
if (!WideCharToMultiByte( CP_ACP, 0, ptr, -1, file_name, size, NULL, NULL ))
|
2012-04-30 14:19:57 +02:00
|
|
|
{
|
2011-05-12 14:23:22 +02:00
|
|
|
file_name[size - 1] = 0;
|
2012-04-30 14:19:57 +02:00
|
|
|
len = size;
|
|
|
|
}
|
|
|
|
else if (len < size) len = strlen( file_name );
|
2011-05-12 14:23:22 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
HeapFree(GetProcessHeap(), 0, ptr);
|
2012-04-30 14:19:57 +02:00
|
|
|
return len;
|
2011-05-12 14:23:22 +02:00
|
|
|
}
|
|
|
|
|
2011-05-12 14:23:45 +02:00
|
|
|
/***********************************************************************
|
|
|
|
* K32GetModuleInformation (KERNEL32.@)
|
|
|
|
*/
|
|
|
|
BOOL WINAPI K32GetModuleInformation(HANDLE process, HMODULE module,
|
|
|
|
MODULEINFO *modinfo, DWORD cb)
|
|
|
|
{
|
|
|
|
LDR_MODULE ldr_module;
|
|
|
|
|
|
|
|
if (cb < sizeof(MODULEINFO))
|
|
|
|
{
|
|
|
|
SetLastError(ERROR_INSUFFICIENT_BUFFER);
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (!get_ldr_module(process, module, &ldr_module))
|
|
|
|
return FALSE;
|
|
|
|
|
|
|
|
modinfo->lpBaseOfDll = ldr_module.BaseAddress;
|
|
|
|
modinfo->SizeOfImage = ldr_module.SizeOfImage;
|
|
|
|
modinfo->EntryPoint = ldr_module.EntryPoint;
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
2009-12-29 16:24:00 +01:00
|
|
|
#ifdef __i386__
|
|
|
|
|
|
|
|
/***********************************************************************
|
|
|
|
* __wine_dll_register_16 (KERNEL32.@)
|
|
|
|
*
|
|
|
|
* No longer used.
|
|
|
|
*/
|
|
|
|
void __wine_dll_register_16( const IMAGE_DOS_HEADER *header, const char *file_name )
|
|
|
|
{
|
|
|
|
ERR( "loading old style 16-bit dll %s no longer supported\n", file_name );
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/***********************************************************************
|
|
|
|
* __wine_dll_unregister_16 (KERNEL32.@)
|
|
|
|
*
|
|
|
|
* No longer used.
|
|
|
|
*/
|
|
|
|
void __wine_dll_unregister_16( const IMAGE_DOS_HEADER *header )
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
#endif
|