Skip to content

Commit

Permalink
Add WOW_TYPE_HANDLE instead of WOW_TYPE_HWND to use for converting ha…
Browse files Browse the repository at this point in the history
…ndles for mmsystem, msvideo, msacm.
  • Loading branch information
otya128 committed Aug 21, 2022
1 parent d2651dc commit 8556b83
Showing 4 changed files with 51 additions and 29 deletions.
17 changes: 17 additions & 0 deletions krnl386/wowthunk.c
Original file line number Diff line number Diff line change
@@ -469,6 +469,7 @@ VOID WINAPI K32WOWDirectedYield16( WORD htask16 )


#define WOW64
#define WOW_TYPE_HANDLE (WOW_TYPE_FULLHWND + 1)
WORD WINAPI K32WOWHandle16HWND(HANDLE handle);
HANDLE WINAPI K32WOWHandle32HWND(WORD handle);
WORD WINAPI K32WOWHandle16HGDI(HANDLE handle);
@@ -510,6 +511,13 @@ HANDLE WINAPI K32WOWHandle32( WORD handle, WOW_HANDLE_TYPE type )
return tdb->teb->ClientId.UniqueThread;
}

case WOW_TYPE_HANDLE:
#ifdef WOW64
return K32WOWHandle32HWND(handle);
#else
return (HANDLE)(ULONG_PTR)handle;
#endif

default:
ERR( "handle 0x%04x of unknown type %d\n", handle, type );
return (HANDLE)(ULONG_PTR)handle;
@@ -550,6 +558,15 @@ WORD WINAPI K32WOWHandle16( HANDLE handle, WOW_HANDLE_TYPE type )
case WOW_TYPE_HTASK:
return TASK_GetTaskFromThread( (DWORD)handle );

case WOW_TYPE_HANDLE:
#ifdef WOW64
return K32WOWHandle16HWND(handle);
#else
if ( HIWORD(handle ) )
ERR( "handle %p of type %d has non-zero HIWORD\n", handle, type );
return LOWORD(handle);
#endif

default:
ERR( "handle %p of unknown type %d\n", handle, type );
return LOWORD(handle);
46 changes: 24 additions & 22 deletions mmsystem/winemm16.h
Original file line number Diff line number Diff line change
@@ -28,31 +28,33 @@ void MMSYSTEM_MMTIME32to16(LPMMTIME16 mmt16, const MMTIME* mmt32) DECLSPEC_HID

typedef LONG (*MCIPROC16)(DWORD, HDRVR16, WORD, DWORD, DWORD);

#define WOW_TYPE_HANDLE (WOW_TYPE_FULLHWND + 1)

/* HANDLE16 -> HANDLE conversions */
#define HDRVR_32(h16) WOWHandle32(h16, WOW_TYPE_HWND) //((HDRVR)(ULONG_PTR)(h16))
#define HMIDI_32(h16) WOWHandle32(h16, WOW_TYPE_HWND) //((HMIDI)(ULONG_PTR)(h16))
#define HMIDIIN_32(h16) WOWHandle32(h16, WOW_TYPE_HWND) //((HMIDIIN)(ULONG_PTR)(h16))
#define HMIDIOUT_32(h16) WOWHandle32(h16, WOW_TYPE_HWND) //((HMIDIOUT)(ULONG_PTR)(h16))
#define HMIDISTRM_32(h16) WOWHandle32(h16, WOW_TYPE_HWND) //((HMIDISTRM)(ULONG_PTR)(h16))
#define HMIXER_32(h16) WOWHandle32(h16, WOW_TYPE_HWND) //((HMIXER)(ULONG_PTR)(h16))
#define HMIXEROBJ_32(h16) WOWHandle32(h16, WOW_TYPE_HWND) //((HMIXEROBJ)(ULONG_PTR)(h16))
#define HMMIO_32(h16) WOWHandle32(h16, WOW_TYPE_HWND) //((HMMIO)(ULONG_PTR)(h16))
#define HWAVE_32(h16) WOWHandle32(h16, WOW_TYPE_HWND) //((HWAVE)(ULONG_PTR)(h16))
#define HWAVEIN_32(h16) WOWHandle32(h16, WOW_TYPE_HWND) //((HWAVEIN)(ULONG_PTR)(h16))
#define HWAVEOUT_32(h16) WOWHandle32(h16, WOW_TYPE_HWND) //((HWAVEOUT)(ULONG_PTR)(h16))
#define HDRVR_32(h16) ((HDRVR)WOWHandle32(h16, WOW_TYPE_HANDLE))
#define HMIDI_32(h16) ((HMIDI)WOWHandle32(h16, WOW_TYPE_HANDLE))
#define HMIDIIN_32(h16) ((HMIDIIN)WOWHandle32(h16, WOW_TYPE_HANDLE))
#define HMIDIOUT_32(h16) ((HMIDIOUT)WOWHandle32(h16, WOW_TYPE_HANDLE))
#define HMIDISTRM_32(h16) ((HMIDISTRM)WOWHandle32(h16, WOW_TYPE_HANDLE))
#define HMIXER_32(h16) ((HMIXER)WOWHandle32(h16, WOW_TYPE_HANDLE))
#define HMIXEROBJ_32(h16) ((HMIXEROBJ)WOWHandle32(h16, WOW_TYPE_HANDLE))
#define HMMIO_32(h16) ((HMMIO)WOWHandle32(h16, WOW_TYPE_HANDLE))
#define HWAVE_32(h16) ((HWAVE)WOWHandle32(h16, WOW_TYPE_HANDLE))
#define HWAVEIN_32(h16) ((HWAVEIN)WOWHandle32(h16, WOW_TYPE_HANDLE))
#define HWAVEOUT_32(h16) ((HWAVEOUT)WOWHandle32(h16, WOW_TYPE_HANDLE))

/* HANDLE -> HANDLE16 conversions */
#define HDRVR_16(h32) WOWHandle16(h32, WOW_TYPE_HWND) //(LOWORD(h32))
#define HMIDI_16(h32) WOWHandle16(h32, WOW_TYPE_HWND) //(LOWORD(h32))
#define HMIDIIN_16(h32) WOWHandle16(h32, WOW_TYPE_HWND) //(LOWORD(h32))
#define HMIDIOUT_16(h32) WOWHandle16(h32, WOW_TYPE_HWND) //(LOWORD(h32))
#define HMIDISTRM_16(h32) WOWHandle16(h32, WOW_TYPE_HWND) //(LOWORD(h32))
#define HMIXER_16(h32) WOWHandle16(h32, WOW_TYPE_HWND) //(LOWORD(h32))
#define HMIXEROBJ_16(h32) WOWHandle16(h32, WOW_TYPE_HWND) //(LOWORD(h32))
#define HMMIO_16(h32) WOWHandle16(h32, WOW_TYPE_HWND) //(LOWORD(h32))
#define HWAVE_16(h32) WOWHandle16(h32, WOW_TYPE_HWND) //(LOWORD(h32))
#define HWAVEIN_16(h32) WOWHandle16(h32, WOW_TYPE_HWND) //(LOWORD(h32))
#define HWAVEOUT_16(h32) WOWHandle16(h32, WOW_TYPE_HWND) //(LOWORD(h32))
#define HDRVR_16(h32) WOWHandle16(h32, WOW_TYPE_HANDLE)
#define HMIDI_16(h32) WOWHandle16(h32, WOW_TYPE_HANDLE)
#define HMIDIIN_16(h32) WOWHandle16(h32, WOW_TYPE_HANDLE)
#define HMIDIOUT_16(h32) WOWHandle16(h32, WOW_TYPE_HANDLE)
#define HMIDISTRM_16(h32) WOWHandle16(h32, WOW_TYPE_HANDLE)
#define HMIXER_16(h32) WOWHandle16(h32, WOW_TYPE_HANDLE)
#define HMIXEROBJ_16(h32) WOWHandle16(h32, WOW_TYPE_HANDLE)
#define HMMIO_16(h32) WOWHandle16(h32, WOW_TYPE_HANDLE)
#define HWAVE_16(h32) WOWHandle16(h32, WOW_TYPE_HANDLE)
#define HWAVEIN_16(h32) WOWHandle16(h32, WOW_TYPE_HANDLE)
#define HWAVEOUT_16(h32) WOWHandle16(h32, WOW_TYPE_HANDLE)

typedef enum {
MMSYSTEM_MAP_NOMEM, /* ko, memory problem */
5 changes: 3 additions & 2 deletions msacm/msacm.c
Original file line number Diff line number Diff line change
@@ -39,9 +39,10 @@

WINE_DEFAULT_DEBUG_CHANNEL(msacm);
void WINAPI K32WOWHandle16DestroyHint(HANDLE handle, WOW_HANDLE_TYPE type);
#define WOW_TYPE_HAS WOW_TYPE_HWND
#define WOW_TYPE_HANDLE (WOW_TYPE_FULLHWND + 1)
#define WOW_TYPE_HAS WOW_TYPE_HANDLE
#define HACMSTREAM_16(h32) WOWHandle16(h32, WOW_TYPE_HAS)
#define HACMSTREAM_32(h16) WOWHandle32(h16, WOW_TYPE_HAS)
#define HACMSTREAM_32(h16) ((HACMSTREAM)WOWHandle32(h16, WOW_TYPE_HAS))
/**************************************************************************
* DllEntryPoint (MSACM.3)
*
12 changes: 7 additions & 5 deletions msvideo/msvideo16.c
Original file line number Diff line number Diff line change
@@ -44,14 +44,16 @@ WINE_DEFAULT_DEBUG_CHANNEL(msvideo);
/* Drivers32 settings */
#define HKLM_DRIVERS32 "Software\\Microsoft\\Windows NT\\CurrentVersion\\Drivers32"

#define WOW_TYPE_HANDLE (WOW_TYPE_FULLHWND + 1)

/* handle16 --> handle conversions */
#define HDRAWDIB_32(h16) WOWHandle32(h16, WOW_TYPE_HWND)/// ((HDRAWDIB)(ULONG_PTR)(h16))
#define HIC_32(h16) WOWHandle32(h16, WOW_TYPE_HWND)//((HIC)(ULONG_PTR)(h16))
#define HDRAWDIB_32(h16) ((HDRAWDIB)WOWHandle32(h16, WOW_TYPE_HANDLE))
#define HIC_32(h16) ((HIC)WOWHandle32(h16, WOW_TYPE_HANDLE))

/* handle --> handle16 conversions */
#define HDRVR_16(h32) WOWHandle16(h32, WOW_TYPE_HWND)//(LOWORD(h32))
#define HDRAWDIB_16(h32) WOWHandle16(h32, WOW_TYPE_HWND)//(LOWORD(h32))
#define HIC_16(h32) WOWHandle16(h32, WOW_TYPE_HWND)//(LOWORD(h32))
#define HDRVR_16(h32) WOWHandle16(h32, WOW_TYPE_HANDLE)
#define HDRAWDIB_16(h32) WOWHandle16(h32, WOW_TYPE_HANDLE)
#define HIC_16(h32) WOWHandle16(h32, WOW_TYPE_HANDLE)

/***********************************************************************
* DrawDibOpen [MSVIDEO.102]

0 comments on commit 8556b83

Please sign in to comment.