//+--------------------------------------------------------------------------- // // Microsoft Windows // Copyright (C) Microsoft Corporation, 1992 - 1994. // // File: thoputil.hxx // // Contents: Thunk routine utilities // // History: 01-Mar-94 DrewB Created // //---------------------------------------------------------------------------- #ifndef __THOPUTIL_HXX__ #define __THOPUTIL_HXX__ // Alias manager for THOP_ALIAS32 extern CAliases gAliases32; IIDIDX IidToIidIdx(REFIID riid); #ifdef COTASK_DEFINED #define TaskMalloc32 CoTaskMemAlloc #define TaskFree32 CoTaskMemFree #else LPVOID TaskMalloc32(SIZE_T cb); void TaskFree32(LPVOID pv); #endif DWORD TaskMalloc16( UINT uiSize ); void TaskFree16( DWORD vpvoid ); LPOLESTR Convert_VPSTR_to_LPOLESTR(THUNKINFO *pti, VPSTR vpstr, LPOLESTR lpOleStr, UINT uiSizeInPlace); // // Simple macro to free up any string allocated in the conversion process // #define Convert_VPSTR_to_LPOLESTR_free( lpOleStr, lpOleStrUsed ) \ (((lpOleStr) == (lpOleStrUsed)) ? 0 : \ (lpOleStrUsed == NULL) ? 0 : TaskFree32(lpOleStrUsed)) SCODE Convert_LPOLESTR_to_VPSTR(LPCOLESTR lpOleStr, VPSTR vpstr, UINT uiSize32, UINT uiSize16); #ifdef _CHICAGO_ // This is only really used on Chicago SCODE Convert_LPSTR_to_VPSTR(LPCSTR lpOleStr, VPSTR vpstr, UINT uiSize32, UINT uiSize16); #endif STDAPI_(DWORD) TransformHRESULT_1632( DWORD hresult ); STDAPI_(DWORD) TransformHRESULT_3216( DWORD hresult ); SHORT ClampLongToShort(LONG l); USHORT ClampULongToUShort(ULONG l); VOID * GetReadPtr16( THUNKINFO *pti, VPVOID vp16, DWORD dwSize ); VOID * GetWritePtr16( THUNKINFO *pti, VPVOID vp16, DWORD dwSize ); VOID * GetCodePtr16( THUNKINFO *pti, VPVOID vp16, DWORD dwSize ); VOID * GetReadWritePtr16( THUNKINFO *pti, VPVOID vp16, DWORD dwSize ); CHAR * GetStringPtr16( THUNKINFO *pti, VPVOID vp16, UINT cchMax, PUINT lpuiSize ); VOID * ValidatePtr16(THUNKINFO *pti, VPVOID vp16, DWORD dwSize, THOP thopInOut); BOOL IsValidInterface16( THUNKINFO *pti, VPVOID vp ); SCODE ConvertHGlobal1632(THUNKINFO *pti, HMEM16 hg16, THOP thopInOut, HGLOBAL *phg32, DWORD *pdwSize); SCODE ConvertHGlobal3216(THUNKINFO *pti, HGLOBAL hg32, THOP thopInOut, HMEM16 *phg16, DWORD *pdwSize); SCODE ConvertStgMed1632(THUNKINFO *pti, VPVOID vpsm16, STGMEDIUM *psm32, FORMATETC *pfe, BOOL fPassingOwnershipIn, DWORD *pdwSize); SCODE CleanStgMed32(THUNKINFO *pti, STGMEDIUM *psm32, VPVOID vpsm16, DWORD dwSize, BOOL fIsThunk, FORMATETC *pfe); SCODE ConvertStgMed3216(THUNKINFO *pti, STGMEDIUM *psm32, VPVOID vpsm16, FORMATETC *pfe, BOOL fPassingOwnershipIn, DWORD *pdwSize); SCODE CleanStgMed16(THUNKINFO *pti, VPVOID vpsm16, STGMEDIUM *psm32, DWORD dwSize, BOOL fIsThunk, FORMATETC *pfe); SCODE ConvertFetc1632(THUNKINFO *pti, VPVOID vpfe16, FORMATETC *pfe32, BOOL fFree); SCODE ConvertFetc3216(THUNKINFO *pti, FORMATETC *pfe32, VPVOID vpfe16, BOOL fFree); #if DBG == 1 char *ThopName(THOP thop); char *EnumThopName(THOP thopEnum); char *GuidString(GUID const *pguid); char *IidOrInterfaceString(IID const *piid); char *IidIdxString(IIDIDX iidx); void DebugValidateProxy1632(VPVOID vpvProxy); void DebugValidateProxy3216(THUNK3216OBJ *ptoProxy); #else #define DebugValidateProxy1632(p) #define DebugValidateProxy3216(p) #endif #define StackAlloc16(cb) \ ((VPVOID)TlsThkGetStack16()->Alloc(cb)) #define StackFree16(vpv, cb) \ TlsThkGetStack16()->Free((DWORD)vpv, cb) #define StackAlloc32(cb) \ ((LPVOID)TlsThkGetStack32()->Alloc(cb)) #define StackFree32(pv, cb) \ TlsThkGetStack32()->Free((DWORD)pv, cb) #define STACKALLOC16(x) StackAlloc16(x) #define STACKFREE16(x,y) StackFree16(x, y) #ifdef _CHICAGO_ #define STACKALLOC32(x) StackAlloc32(x) #define STACKFREE32(x, y) StackFree32(x, y) #else #define STACKALLOC32(x) (DWORD)_alloca(x) #define STACKFREE32(x, y) #endif #if DBG == 1 void RecordStackState16(SStackRecord *psr); void CheckStackState16(SStackRecord *psr); void RecordStackState32(SStackRecord *psr); void CheckStackState32(SStackRecord *psr); #endif typedef void *(*ALLOCROUTINE)(UINT cb); typedef void (*FREEROUTINE)(void *pv, UINT cb); void *ArTask16(UINT cb); void FrTask16(void *pv, UINT cb); void *ArTask32(UINT cb); void FrTask32(void *pv, UINT cb); void *ArStack16(UINT cb); void FrStack16(void *pv, UINT cb); void *ArStack32(UINT cb); void FrStack32(void *pv, UINT cb); SCODE ConvertDvtd1632(THUNKINFO *pti, VPVOID vpdvtd16, ALLOCROUTINE pfnAlloc, FREEROUTINE pfnFree, DVTARGETDEVICE **ppdvtd32, UINT *pcbSize); SCODE ConvertDvtd3216(THUNKINFO *pti, DVTARGETDEVICE *pdvtd32, ALLOCROUTINE pfnAlloc, FREEROUTINE pfnFree, VPVOID *ppvdvtd16, UINT *pcbSize); typedef void (*FIXEDHANDLERROUTINE)(BYTE *pbFrom, BYTE *pbTo, UINT cbFrom, UINT cbTo); void FhCopyMemory(BYTE *pbFrom, BYTE *pbTo, UINT cbFrom, UINT cbTo); void FhShortToLong(BYTE *pbFrom, BYTE *pbTo, UINT cbFrom, UINT cbTo); void FhLongToShort(BYTE *pbFrom, BYTE *pbTo, UINT cbFrom, UINT cbTo); void FhWordToDword(BYTE *pbFrom, BYTE *pbTo, UINT cbFrom, UINT cbTo); void FhDwordToWord(BYTE *pbFrom, BYTE *pbTo, UINT cbFrom, UINT cbTo); void FhGdiHandle1632(BYTE *pbFrom, BYTE *pbTo, UINT cbFrom, UINT cbTo); void FhGdiHandle3216(BYTE *pbFrom, BYTE *pbTo, UINT cbFrom, UINT cbTo); void FhUserHandle1632(BYTE *pbFrom, BYTE *pbTo, UINT cbFrom, UINT cbTo); void FhUserHandle3216(BYTE *pbFrom, BYTE *pbTo, UINT cbFrom, UINT cbTo); void FhHaccel1632(BYTE *pbFrom, BYTE *pbTo, UINT cbFrom, UINT cbTo); void FhHaccel3216(BYTE *pbFrom, BYTE *pbTo, UINT cbFrom, UINT cbTo); void FhHtask1632(BYTE *pbFrom, BYTE *pbTo, UINT cbFrom, UINT cbTo); void FhHtask3216(BYTE *pbFrom, BYTE *pbTo, UINT cbFrom, UINT cbTo); void FhHresult1632(BYTE *pbFrom, BYTE *pbTo, UINT cbFrom, UINT cbTo); void FhHresult3216(BYTE *pbFrom, BYTE *pbTo, UINT cbFrom, UINT cbTo); void FhNull(BYTE *pbFrom, BYTE *pbTo, UINT cbFrom, UINT cbTo); void FhRect1632(BYTE *pbFrom, BYTE *pbTo, UINT cbFrom, UINT cbTo); void FhRect3216(BYTE *pbFrom, BYTE *pbTo, UINT cbFrom, UINT cbTo); void FhSize1632(BYTE *pbFrom, BYTE *pbTo, UINT cbFrom, UINT cbTo); void FhSize3216(BYTE *pbFrom, BYTE *pbTo, UINT cbFrom, UINT cbTo); void FhMsg1632(BYTE *pbFrom, BYTE *pbTo, UINT cbFrom, UINT cbTo); void FhMsg3216(BYTE *pbFrom, BYTE *pbTo, UINT cbFrom, UINT cbTo); #endif // #ifndef __THOPUTIL_HXX__