/**************************************************************************** thunk.h Contains definitions for msvideo thunks (16/32 bit) Copyright (c) Microsoft Corporation 1994. All rights reserved ****************************************************************************/ // // NOTE - 32bit handles have 0x8000 'or'ed in - this makes a BIG ASSUMPTION // about how handles are generated on the 32-bit side. We ASSUME here // that : // // 32bit msvideo.dll always uses OpenDriver to create handles // // The OpenDriver returns indices into its table (ie small positive // numbers). // #define Is32bitHandle(h) (((h) & 0x8000) != 0) #define Make32bitHandle(h) ((h) | 0x8000) #define Map32bitHandle(h) ((h) & 0x7FFF) // // // #ifdef _WIN32 #ifdef CHICAGO // // Following pasted from wownt32.h // // // 16 <--> 32 Handle mapping functions. // // NOTE: While some of these functions perform trivial // conversions, these functions must be used to maintain // compatibility with future versions of Windows NT which // may require different handle mapping. // typedef enum _WOW_HANDLE_TYPE { /* WOW */ WOW_TYPE_HWND, WOW_TYPE_HMENU, WOW_TYPE_HDWP, WOW_TYPE_HDROP, WOW_TYPE_HDC, WOW_TYPE_HFONT, WOW_TYPE_HMETAFILE, WOW_TYPE_HRGN, WOW_TYPE_HBITMAP, WOW_TYPE_HBRUSH, WOW_TYPE_HPALETTE, WOW_TYPE_HPEN, WOW_TYPE_HACCEL, WOW_TYPE_HTASK, WOW_TYPE_FULLHWND } WOW_HANDLE_TYPE; #define ThunkHWND(h16) ((HWND)h16) #define ThunkHDC(h16) ((HDC)h16) #define ThunkHPAL(h16) ((HPALETTE)h16) #else #include #define ThunkHWND(h16) ((HWND)lpWOWHandle32((WORD)h16, WOW_TYPE_HWND)) #define ThunkHDC(h16) ((HDC) lpWOWHandle32((WORD)h16, WOW_TYPE_HDC)) #define ThunkHPAL(h16) ((HPALETTE)lpWOWHandle32((WORD)h16, WOW_TYPE_HPALETTE)) #endif // !CHICAGO // // Thunking support // #define GET_VDM_POINTER_NAME "WOWGetVDMPointer" #define GET_HANDLE_MAPPER16 "WOWHandle16" #define GET_HANDLE_MAPPER32 "WOWHandle32" #define GET_CALLBACK16 "WOWCallback16" #define GET_MAPPING_MODULE_NAME TEXT("wow32.dll") typedef LPVOID (APIENTRY *LPGETVDMPOINTER)( DWORD Address, DWORD dwBytes, BOOL fProtectMode ); typedef HANDLE (APIENTRY *LPWOWHANDLE32)(WORD, WOW_HANDLE_TYPE); typedef WORD (APIENTRY *LPWOWHANDLE16)(HANDLE, WOW_HANDLE_TYPE); typedef DWORD (APIENTRY *LPWOWCALLBACK16)(DWORD vpfn16, DWORD dwParam); #define StartThunk(Function) \ LRESULT ReturnCode = 0; \ DPFS(dbgThunks, 2, "Entering function %s", #Function); #define EndThunk() \ DPFS(dbgThunks, 2, "Returned %4X :%4X", \ HIWORD(ReturnCode), \ LOWORD(ReturnCode)); \ return ReturnCode; #endif // _WIN32 /* * Useful structures and mapping */ typedef struct { short left, top, right, bottom; } RECT_SHORT; #define SHORT_RECT_TO_RECT(OutRect, InRect) \ OutRect.left = (LONG)InRect.left; \ OutRect.top = (LONG)InRect.top; \ OutRect.right = (LONG)InRect.right; \ OutRect.bottom = (LONG)InRect.bottom; #define RECT_TO_SHORT_RECT(OutRect, InRect) \ OutRect.left = (short)InRect.left; \ OutRect.top = (short)InRect.top; \ OutRect.right = (short)InRect.right; \ OutRect.bottom = (short)InRect.bottom; // // Function ids across the thunking layer (used by 32 and 16 bit) // enum { vidThunkvideoMessage32=1, vidThunkvideoGetNumDevs32, vidThunkvideoOpen32, vidThunkvideoClose32, compThunkICInfoInternal32, compThunkICSendMessage32, compThunkICOpen32, compThunkICClose32, compThunkICOpenFunction32, compThunkICSetStatusProc32 }; #ifndef _WIN32 typedef struct _VIDTHUNK { // // Thunking stuff // DWORD (FAR PASCAL *lpfnCallproc32W)(DWORD, DWORD, DWORD, DWORD, DWORD, LPVOID, DWORD, DWORD); LPVOID lpvThunkEntry; DWORD dwVideo32Handle; } VIDTHUNK, *PVIDTHUNK, FAR *LPVIDTHUNK; #endif // !_WIN32 // // Some typedefs to assist with the ICM_SET_STATUS_PROC // thunk and callback thunk. // // Convention: // "S" suffix indicates a 16:16 ptr (Segmented) // "L" suffix indicates a 0:32 ptr (Linear) // no suffix indicates a native bitness pointer // typedef LONG (CALLBACK *ICSTATUSPROC)(LPARAM lParam, UINT uMsg, LONG l); typedef struct tICSTATUSTHUNKDESC FAR * LPICSTATUSTHUNKDESC; #ifdef _WIN32 typedef DWORD LPVOIDS; typedef LPICSTATUSTHUNKDESC LPICSTATUSTHUNKDESCL; typedef DWORD LPICSTATUSTHUNKDESCS; typedef ICSTATUSPROC ICSTATUSPROCL; typedef DWORD ICSTATUSPROCS; #else typedef LPVOID LPVOIDS; typedef DWORD LPICSTATUSTHUNKDESCL; typedef LPICSTATUSTHUNKDESC LPICSTATUSTHUNKDESCS; typedef DWORD ICSTATUSPROCL; typedef ICSTATUSPROC ICSTATUSPROCS; #endif typedef struct tICSTATUSTHUNKDESC { // // segmented ptr to this struct // LPICSTATUSTHUNKDESCS lpstdS; // // segmented ptr to 16 bit callback stub // LPVOIDS pfnthkStatusProc16S; // // from client's ICSETSTATUSPROC // DWORD dwFlags; LPARAM lParam; ICSTATUSPROCS fnStatusProcS; // // to be sent to client's callback // DWORD uMsg; LONG l; } ICSTATUSTHUNKDESC; //--------------------------------------------------------------------------; // // // //--------------------------------------------------------------------------; // // The following functions generate calls to the 32-bit side // #ifdef _INC_MSVIDEO DWORD FAR PASCAL videoMessage32(HVIDEO hVideo, UINT msg, DWORD dwP1, DWORD dwP2); DWORD FAR PASCAL videoGetNumDevs32(void); DWORD FAR PASCAL videoClose32(HVIDEO hVideo); DWORD FAR PASCAL videoOpen32(LPHVIDEO lphVideo, DWORD dwDeviceID, DWORD dwFlags); #endif // _INC_MSVIDEO #ifdef _INC_COMPMAN #ifdef _WIN32 LRESULT FAR PASCAL ICInfoInternal32(DWORD fccType, DWORD fccHandler, ICINFO16 FAR * lpicinfo, ICINFOI FAR * lpicinfoi); #else BOOL FAR PASCAL ICInfoInternal32(DWORD fccType, DWORD fccHandler, ICINFO FAR * lpicinfo, ICINFOI FAR * lpicinfoi); #endif LRESULT FAR PASCAL ICSendMessage32(DWORD hic, UINT msg, DWORD_PTR dwP1, DWORD_PTR dwP2); LRESULT FAR PASCAL ICOpen32(DWORD fccType, DWORD fccHandler, UINT wMode); LRESULT FAR PASCAL ICOpenFunction32(DWORD fccType, DWORD fccHandler, UINT wMode, FARPROC lpfnHandler); LRESULT FAR PASCAL ICClose32(DWORD hic); LRESULT FAR PASCAL ICSendSetStatusProc32(HIC hic, ICSETSTATUSPROC FAR* lpissp, DWORD cbStruct); #endif // _INC_COMPMAN //--------------------------------------------------------------------------; // // // //--------------------------------------------------------------------------;