Alexandre Julliard : user.exe: Avoid using libwine functions.

Alexandre Julliard julliard at winehq.org
Tue May 21 16:45:20 CDT 2019


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

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Tue May 21 17:52:37 2019 +0200

user.exe: Avoid using libwine functions.

Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/krnl386.exe16/krnl386.exe16.spec |  1 +
 dlls/user.exe16/message.c             | 36 +++++++++++++----------------------
 2 files changed, 14 insertions(+), 23 deletions(-)

diff --git a/dlls/krnl386.exe16/krnl386.exe16.spec b/dlls/krnl386.exe16/krnl386.exe16.spec
index f20d69e..cf80439 100644
--- a/dlls/krnl386.exe16/krnl386.exe16.spec
+++ b/dlls/krnl386.exe16/krnl386.exe16.spec
@@ -726,6 +726,7 @@
 @ stdcall -arch=win32 LocalCountFree16()
 @ stdcall -arch=win32 LocalHeapSize16()
 @ stdcall -arch=win32 LockResource16(long)
+@ stdcall -arch=win32 PrestoChangoSelector16(long long)
 @ stdcall -arch=win32 SetSelectorBase(long long)
 @ stdcall -arch=win32 SetSelectorLimit16(long long)
 @ stdcall -arch=win32 SizeofResource16(long long)
diff --git a/dlls/user.exe16/message.c b/dlls/user.exe16/message.c
index c0b60ad..dd15707 100644
--- a/dlls/user.exe16/message.c
+++ b/dlls/user.exe16/message.c
@@ -30,7 +30,6 @@
 #include "winerror.h"
 #include "dde.h"
 #include "user_private.h"
-#include "wine/library.h"
 #include "wine/debug.h"
 
 WINE_DEFAULT_DEBUG_CHANNEL(msg);
@@ -98,13 +97,12 @@ static LRESULT call_window_proc_callback( HWND hwnd, UINT msg, WPARAM wp, LPARAM
 #include "pshpack1.h"
 typedef struct
 {
-    BYTE        popl_eax;        /* popl  %eax (return address) */
-    BYTE        pushl_func;      /* pushl $proc */
+    WORD        popl_eax;        /* popl  %eax (return address) */
+    WORD        pushl_func;      /* pushl $proc */
     WNDPROC     proc;
-    BYTE        pushl_eax;       /* pushl %eax */
+    WORD        pushl_eax;       /* pushl %eax */
     BYTE        ljmp;            /* ljmp relay*/
-    DWORD       relay_offset;    /* __wine_call_wndproc */
-    WORD        relay_sel;
+    FARPROC16   relay;           /* __wine_call_wndproc */
 } WINPROC_THUNK;
 #include "poppack.h"
 
@@ -155,28 +153,22 @@ static WNDPROC16 alloc_win16_thunk( WNDPROC handle )
 
     if (!thunk_array)  /* allocate the array and its selector */
     {
-        LDT_ENTRY entry;
-
         assert( MAX_WINPROCS16 * sizeof(WINPROC_THUNK) <= 0x10000 );
 
-        if (!(thunk_selector = wine_ldt_alloc_entries(1))) return NULL;
-        if (!(thunk_array = VirtualAlloc( NULL, MAX_WINPROCS16 * sizeof(WINPROC_THUNK), MEM_COMMIT,
-                                          PAGE_EXECUTE_READWRITE ))) return NULL;
-        wine_ldt_set_base( &entry, thunk_array );
-        wine_ldt_set_limit( &entry, MAX_WINPROCS16 * sizeof(WINPROC_THUNK) - 1 );
-        wine_ldt_set_flags( &entry, WINE_LDT_FLAGS_CODE | WINE_LDT_FLAGS_32BIT );
-        wine_ldt_set_entry( thunk_selector, &entry );
+        if (!(thunk_selector = GlobalAlloc16( GMEM_FIXED, MAX_WINPROCS16 * sizeof(WINPROC_THUNK) )))
+            return NULL;
+        PrestoChangoSelector16( thunk_selector, thunk_selector );
+        thunk_array = GlobalLock16( thunk_selector );
         relay = GetProcAddress16( GetModuleHandle16("user"), "__wine_call_wndproc" );
     }
 
     thunk = &thunk_array[index];
-    thunk->popl_eax     = 0x58;   /* popl  %eax */
-    thunk->pushl_func   = 0x68;   /* pushl $proc */
+    thunk->popl_eax     = 0x5866;   /* popl  %eax */
+    thunk->pushl_func   = 0x6866;   /* pushl $proc */
     thunk->proc         = handle;
-    thunk->pushl_eax    = 0x50;   /* pushl %eax */
-    thunk->ljmp         = 0xea;   /* ljmp   relay*/
-    thunk->relay_offset = OFFSETOF(relay);
-    thunk->relay_sel    = SELECTOROF(relay);
+    thunk->pushl_eax    = 0x5066;   /* pushl %eax */
+    thunk->ljmp         = 0xea;     /* ljmp   relay*/
+    thunk->relay        = relay;
     return (WNDPROC16)MAKESEGPTR( thunk_selector, index * sizeof(WINPROC_THUNK) );
 }
 
@@ -251,8 +243,6 @@ static LRESULT call_window_proc16( HWND16 hwnd, UINT16 msg, WPARAM16 wParam, LPA
 
     memset(&context, 0, sizeof(context));
     context.SegDs = context.SegEs = SELECTOROF(NtCurrentTeb()->WOW32Reserved);
-    context.SegFs = wine_get_fs();
-    context.SegGs = wine_get_gs();
     if (!(context.Eax = GetWindowWord( HWND_32(hwnd), GWLP_HINSTANCE ))) context.Eax = context.SegDs;
     context.SegCs = SELECTOROF(func);
     context.Eip   = OFFSETOF(func);




More information about the wine-cvs mailing list