mirror of
git://source.winehq.org/git/wine.git
synced 2024-09-01 22:25:08 +00:00
krnl386.exe: Convert 16-bit GDI handles to full 32-bit handles.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=51570 Signed-off-by: Jacek Caban <jacek@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
84fb3b943d
commit
f05e9b1e26
|
@ -28,6 +28,7 @@
|
||||||
#include "wownt32.h"
|
#include "wownt32.h"
|
||||||
#include "excpt.h"
|
#include "excpt.h"
|
||||||
#include "winternl.h"
|
#include "winternl.h"
|
||||||
|
#include "ntgdi.h"
|
||||||
#include "kernel16_private.h"
|
#include "kernel16_private.h"
|
||||||
#include "wine/exception.h"
|
#include "wine/exception.h"
|
||||||
#include "wine/debug.h"
|
#include "wine/debug.h"
|
||||||
|
@ -309,6 +310,24 @@ VOID WINAPI K32WOWDirectedYield16( WORD htask16 )
|
||||||
DirectedYield16( (HTASK16)htask16 );
|
DirectedYield16( (HTASK16)htask16 );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static HANDLE gdi_handle32( WORD handle )
|
||||||
|
{
|
||||||
|
static GDI_SHARED_MEMORY *gdi_shared;
|
||||||
|
|
||||||
|
if (!gdi_shared)
|
||||||
|
{
|
||||||
|
if (NtCurrentTeb()->GdiBatchCount)
|
||||||
|
{
|
||||||
|
TEB64 *teb64 = (TEB64 *)(UINT_PTR)NtCurrentTeb()->GdiBatchCount;
|
||||||
|
PEB64 *peb64 = (PEB64 *)(UINT_PTR)teb64->Peb;
|
||||||
|
gdi_shared = (GDI_SHARED_MEMORY *)(UINT_PTR)peb64->GdiSharedHandleTable;
|
||||||
|
}
|
||||||
|
else gdi_shared = (GDI_SHARED_MEMORY *)NtCurrentTeb()->Peb->GdiSharedHandleTable;
|
||||||
|
if (!gdi_shared) return ULongToHandle( handle );
|
||||||
|
}
|
||||||
|
|
||||||
|
return ULongToHandle( (gdi_shared->Handles[handle].Unique << 16) | handle );
|
||||||
|
}
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* K32WOWHandle32 (KERNEL32.57)
|
* K32WOWHandle32 (KERNEL32.57)
|
||||||
|
@ -321,6 +340,9 @@ HANDLE WINAPI K32WOWHandle32( WORD handle, WOW_HANDLE_TYPE type )
|
||||||
case WOW_TYPE_HMENU:
|
case WOW_TYPE_HMENU:
|
||||||
case WOW_TYPE_HDWP:
|
case WOW_TYPE_HDWP:
|
||||||
case WOW_TYPE_HDROP:
|
case WOW_TYPE_HDROP:
|
||||||
|
case WOW_TYPE_HACCEL:
|
||||||
|
return (HANDLE)(ULONG_PTR)handle;
|
||||||
|
|
||||||
case WOW_TYPE_HDC:
|
case WOW_TYPE_HDC:
|
||||||
case WOW_TYPE_HFONT:
|
case WOW_TYPE_HFONT:
|
||||||
case WOW_TYPE_HRGN:
|
case WOW_TYPE_HRGN:
|
||||||
|
@ -328,12 +350,8 @@ HANDLE WINAPI K32WOWHandle32( WORD handle, WOW_HANDLE_TYPE type )
|
||||||
case WOW_TYPE_HBRUSH:
|
case WOW_TYPE_HBRUSH:
|
||||||
case WOW_TYPE_HPALETTE:
|
case WOW_TYPE_HPALETTE:
|
||||||
case WOW_TYPE_HPEN:
|
case WOW_TYPE_HPEN:
|
||||||
case WOW_TYPE_HACCEL:
|
|
||||||
return (HANDLE)(ULONG_PTR)handle;
|
|
||||||
|
|
||||||
case WOW_TYPE_HMETAFILE:
|
case WOW_TYPE_HMETAFILE:
|
||||||
FIXME( "conversion of metafile handles not supported yet\n" );
|
return gdi_handle32( handle );
|
||||||
return (HANDLE)(ULONG_PTR)handle;
|
|
||||||
|
|
||||||
case WOW_TYPE_HTASK:
|
case WOW_TYPE_HTASK:
|
||||||
return ((TDB *)GlobalLock16(handle))->teb->ClientId.UniqueThread;
|
return ((TDB *)GlobalLock16(handle))->teb->ClientId.UniqueThread;
|
||||||
|
|
Loading…
Reference in a new issue