diff --git a/dlls/krnl386.exe16/kernel16_private.h b/dlls/krnl386.exe16/kernel16_private.h index fbc1a5f8258..1e3935aa48a 100644 --- a/dlls/krnl386.exe16/kernel16_private.h +++ b/dlls/krnl386.exe16/kernel16_private.h @@ -169,9 +169,6 @@ extern THHOOK *pThhook DECLSPEC_HIDDEN; (((offset)+(size) <= pModule->mapping_size) ? \ (memcpy( buffer, (const char *)pModule->mapping + (offset), (size) ), TRUE) : FALSE) -#define CURRENT_STACK16 ((STACK16FRAME*)MapSL(PtrToUlong(NtCurrentTeb()->WOW32Reserved))) -#define CURRENT_DS (CURRENT_STACK16->ds) - /* push bytes on the 16-bit stack of a thread; return a segptr to the first pushed byte */ static inline SEGPTR stack16_push( int size ) { diff --git a/dlls/krnl386.exe16/thunk.c b/dlls/krnl386.exe16/thunk.c index e913a08f88c..832cc71d9be 100644 --- a/dlls/krnl386.exe16/thunk.c +++ b/dlls/krnl386.exe16/thunk.c @@ -1276,7 +1276,7 @@ void WINAPI __regs_K32Thk1632Epilog( CONTEXT *context ) if ( code[5] == 0xFF && code[6] == 0x55 && code[7] == 0xFC && code[13] == 0x66 && code[14] == 0xCB) { - STACK16FRAME *frame16 = MapSL((SEGPTR)NtCurrentTeb()->WOW32Reserved); + STACK16FRAME *frame16 = CURRENT_STACK16; char *stack16 = (char *)(frame16 + 1); DWORD argSize = frame16->ebp - (DWORD)stack16; char *stack32 = (char *)frame16->frame32 - argSize; diff --git a/dlls/toolhelp.dll16/toolhelp.c b/dlls/toolhelp.dll16/toolhelp.c index 578d1ae7fab..5d7bf8f016e 100644 --- a/dlls/toolhelp.dll16/toolhelp.c +++ b/dlls/toolhelp.dll16/toolhelp.c @@ -718,15 +718,15 @@ BOOL16 WINAPI TimerCount16( TIMERINFO *pTimerInfo ) */ BOOL16 WINAPI SystemHeapInfo16( SYSHEAPINFO *pHeapInfo ) { - STACK16FRAME* stack16 = MapSL((SEGPTR)NtCurrentTeb()->WOW32Reserved); - HANDLE16 oldDS = stack16->ds; + HANDLE16 oldDS = CURRENT_DS; WORD user = LoadLibrary16( "USER.EXE" ); WORD gdi = LoadLibrary16( "GDI.EXE" ); - stack16->ds = user; + + CURRENT_DS = user; pHeapInfo->wUserFreePercent = (int)LocalCountFree16() * 100 / LocalHeapSize16(); - stack16->ds = gdi; + CURRENT_DS = gdi; pHeapInfo->wGDIFreePercent = (int)LocalCountFree16() * 100 / LocalHeapSize16(); - stack16->ds = oldDS; + CURRENT_DS = oldDS; pHeapInfo->hUserSegment = user; pHeapInfo->hGDISegment = gdi; FreeLibrary16( user ); diff --git a/dlls/user.exe16/message.c b/dlls/user.exe16/message.c index e3ca3fd779d..ca90a31bfa6 100644 --- a/dlls/user.exe16/message.c +++ b/dlls/user.exe16/message.c @@ -2092,7 +2092,6 @@ static LRESULT combo_proc16( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam, static void edit_lock_buffer( HWND hwnd ) { - STACK16FRAME* stack16 = MapSL(PtrToUlong(NtCurrentTeb()->WOW32Reserved)); HLOCAL16 hloc16 = GetWindowWord( hwnd, GWW_HANDLE16 ); HANDLE16 oldDS; HLOCAL hloc32; @@ -2101,8 +2100,8 @@ static void edit_lock_buffer( HWND hwnd ) if (!hloc16) return; if (!(hloc32 = (HLOCAL)wow_handlers32.edit_proc( hwnd, EM_GETHANDLE, 0, 0, FALSE ))) return; - oldDS = stack16->ds; - stack16->ds = GetWindowLongPtrW( hwnd, GWLP_HINSTANCE ); + oldDS = CURRENT_DS; + CURRENT_DS = GetWindowLongPtrW( hwnd, GWLP_HINSTANCE ); size = LocalSize16(hloc16); if (LocalReAlloc( hloc32, size, LMEM_MOVEABLE )) { @@ -2112,13 +2111,11 @@ static void edit_lock_buffer( HWND hwnd ) LocalUnlock( hloc32 ); LocalUnlock16( hloc16 ); } - stack16->ds = oldDS; - + CURRENT_DS = oldDS; } static void edit_unlock_buffer( HWND hwnd ) { - STACK16FRAME* stack16 = MapSL(PtrToUlong(NtCurrentTeb()->WOW32Reserved)); HLOCAL16 hloc16 = GetWindowWord( hwnd, GWW_HANDLE16 ); HANDLE16 oldDS; HLOCAL hloc32; @@ -2128,8 +2125,8 @@ static void edit_unlock_buffer( HWND hwnd ) if (!(hloc32 = (HLOCAL)wow_handlers32.edit_proc( hwnd, EM_GETHANDLE, 0, 0, FALSE ))) return; size = LocalSize( hloc32 ); - oldDS = stack16->ds; - stack16->ds = GetWindowLongPtrW( hwnd, GWLP_HINSTANCE ); + oldDS = CURRENT_DS; + CURRENT_DS = GetWindowLongPtrW( hwnd, GWLP_HINSTANCE ); if (LocalReAlloc16( hloc16, size, LMEM_MOVEABLE )) { char *text = LocalLock( hloc32 ); @@ -2138,7 +2135,7 @@ static void edit_unlock_buffer( HWND hwnd ) LocalUnlock( hloc32 ); LocalUnlock16( hloc16 ); } - stack16->ds = oldDS; + CURRENT_DS = oldDS; } static HLOCAL16 edit_get_handle( HWND hwnd ) @@ -2146,7 +2143,6 @@ static HLOCAL16 edit_get_handle( HWND hwnd ) CHAR *textA; UINT alloc_size; HLOCAL hloc; - STACK16FRAME* stack16; HANDLE16 oldDS; HLOCAL16 hloc16 = GetWindowWord( hwnd, GWW_HANDLE16 ); @@ -2155,13 +2151,12 @@ static HLOCAL16 edit_get_handle( HWND hwnd ) if (!(hloc = (HLOCAL)wow_handlers32.edit_proc( hwnd, EM_GETHANDLE, 0, 0, FALSE ))) return 0; alloc_size = LocalSize( hloc ); - stack16 = MapSL(PtrToUlong(NtCurrentTeb()->WOW32Reserved)); - oldDS = stack16->ds; - stack16->ds = GetWindowLongPtrW( hwnd, GWLP_HINSTANCE ); + oldDS = CURRENT_DS; + CURRENT_DS = GetWindowLongPtrW( hwnd, GWLP_HINSTANCE ); if (!LocalHeapSize16()) { - if (!LocalInit16(stack16->ds, 0, GlobalSize16(stack16->ds))) + if (!LocalInit16(CURRENT_DS, 0, GlobalSize16(CURRENT_DS))) { ERR("could not initialize local heap\n"); goto done; @@ -2187,15 +2182,14 @@ static HLOCAL16 edit_get_handle( HWND hwnd ) SetWindowWord( hwnd, GWW_HANDLE16, hloc16 ); done: - stack16->ds = oldDS; + CURRENT_DS = oldDS; return hloc16; } static void edit_set_handle( HWND hwnd, HLOCAL16 hloc16 ) { - STACK16FRAME* stack16 = MapSL(PtrToUlong(NtCurrentTeb()->WOW32Reserved)); HINSTANCE16 hInstance = GetWindowLongPtrW( hwnd, GWLP_HINSTANCE ); - HANDLE16 oldDS = stack16->ds; + HANDLE16 oldDS = CURRENT_DS; HLOCAL hloc32; INT count; CHAR *text; @@ -2203,7 +2197,7 @@ static void edit_set_handle( HWND hwnd, HLOCAL16 hloc16 ) if (!(GetWindowLongW( hwnd, GWL_STYLE ) & ES_MULTILINE)) return; if (!hloc16) return; - stack16->ds = hInstance; + CURRENT_DS = hInstance; count = LocalSize16(hloc16); text = MapSL(LocalLock16(hloc16)); if ((hloc32 = LocalAlloc(LMEM_MOVEABLE, count))) @@ -2213,8 +2207,7 @@ static void edit_set_handle( HWND hwnd, HLOCAL16 hloc16 ) LocalUnlock16(hloc16); SetWindowWord( hwnd, GWW_HANDLE16, hloc16 ); } - stack16->ds = oldDS; - + CURRENT_DS = oldDS; if (hloc32) wow_handlers32.edit_proc( hwnd, EM_SETHANDLE, (WPARAM)hloc32, 0, FALSE ); } @@ -2223,13 +2216,12 @@ static void edit_destroy_handle( HWND hwnd ) HLOCAL16 hloc16 = GetWindowWord( hwnd, GWW_HANDLE16 ); if (hloc16) { - STACK16FRAME* stack16 = MapSL(PtrToUlong(NtCurrentTeb()->WOW32Reserved)); - HANDLE16 oldDS = stack16->ds; + HANDLE16 oldDS = CURRENT_DS; - stack16->ds = GetWindowLongPtrW( hwnd, GWLP_HINSTANCE ); + CURRENT_DS = GetWindowLongPtrW( hwnd, GWLP_HINSTANCE ); while (LocalUnlock16(hloc16)) ; LocalFree16(hloc16); - stack16->ds = oldDS; + CURRENT_DS = oldDS; SetWindowWord( hwnd, GWW_HANDLE16, 0 ); } } diff --git a/dlls/user.exe16/user.c b/dlls/user.exe16/user.c index 27b92793836..5063f9d2343 100644 --- a/dlls/user.exe16/user.c +++ b/dlls/user.exe16/user.c @@ -1394,11 +1394,10 @@ DWORD WINAPI GetTabbedTextExtent16( HDC16 hdc, LPCSTR lpstr, INT16 count, */ DWORD WINAPI UserSeeUserDo16(WORD wReqType, WORD wParam1, WORD wParam2, WORD wParam3) { - STACK16FRAME* stack16 = MapSL((SEGPTR)NtCurrentTeb()->WOW32Reserved); - HANDLE16 oldDS = stack16->ds; + HANDLE16 oldDS = CURRENT_DS; DWORD ret = (DWORD)-1; - stack16->ds = USER_HeapSel; + CURRENT_DS = USER_HeapSel; switch (wReqType) { case USUD_LOCALALLOC: @@ -1419,7 +1418,7 @@ DWORD WINAPI UserSeeUserDo16(WORD wReqType, WORD wParam1, WORD wParam2, WORD wPa default: WARN("wReqType %04x (unknown)\n", wReqType); } - stack16->ds = oldDS; + CURRENT_DS = oldDS; return ret; } @@ -1787,32 +1786,31 @@ UINT16 WINAPI RealizePalette16( HDC16 hdc ) */ WORD WINAPI GetFreeSystemResources16( WORD resType ) { - STACK16FRAME* stack16 = MapSL((SEGPTR)NtCurrentTeb()->WOW32Reserved); - HANDLE16 oldDS = stack16->ds; + HANDLE16 oldDS = CURRENT_DS; int userPercent, gdiPercent; switch(resType) { case GFSR_USERRESOURCES: - stack16->ds = USER_HeapSel; + CURRENT_DS = USER_HeapSel; userPercent = (int)LocalCountFree16() * 100 / LocalHeapSize16(); gdiPercent = 100; - stack16->ds = oldDS; + CURRENT_DS = oldDS; break; case GFSR_GDIRESOURCES: - stack16->ds = gdi_inst; + CURRENT_DS = gdi_inst; gdiPercent = (int)LocalCountFree16() * 100 / LocalHeapSize16(); userPercent = 100; - stack16->ds = oldDS; + CURRENT_DS = oldDS; break; case GFSR_SYSTEMRESOURCES: - stack16->ds = USER_HeapSel; + CURRENT_DS = USER_HeapSel; userPercent = (int)LocalCountFree16() * 100 / LocalHeapSize16(); - stack16->ds = gdi_inst; + CURRENT_DS = gdi_inst; gdiPercent = (int)LocalCountFree16() * 100 / LocalHeapSize16(); - stack16->ds = oldDS; + CURRENT_DS = oldDS; break; default: diff --git a/dlls/user.exe16/window.c b/dlls/user.exe16/window.c index bf86719325b..5a9448a2131 100644 --- a/dlls/user.exe16/window.c +++ b/dlls/user.exe16/window.c @@ -456,8 +456,7 @@ HWND16 WINAPI GetParent16( HWND16 hwnd ) */ BOOL16 WINAPI IsWindow16( HWND16 hwnd ) { - STACK16FRAME *frame = MapSL( (SEGPTR)NtCurrentTeb()->WOW32Reserved ); - frame->es = USER_HeapSel; + CURRENT_STACK16->es = USER_HeapSel; /* don't use WIN_Handle32 here, we don't care about the full handle */ return IsWindow( HWND_32(hwnd) ); } diff --git a/include/wine/winbase16.h b/include/wine/winbase16.h index 5938ef19966..11ac4533736 100644 --- a/include/wine/winbase16.h +++ b/include/wine/winbase16.h @@ -23,6 +23,7 @@ #include #include #include +#include #include #include @@ -561,4 +562,7 @@ BOOL16 WINAPI WritePrivateProfileSection16(LPCSTR,LPCSTR,LPCSTR); BOOL16 WINAPI WritePrivateProfileStruct16(LPCSTR,LPCSTR,LPVOID,UINT16,LPCSTR); BOOL16 WINAPI WriteProfileSection16(LPCSTR,LPCSTR); +#define CURRENT_STACK16 ((STACK16FRAME *)MapSL((SEGPTR)NtCurrentTeb()->WOW32Reserved)) +#define CURRENT_DS (CURRENT_STACK16->ds) + #endif /* __WINE_WINE_WINBASE16_H */