/* * Win95 Flat Thunk data structures * * Copyright 1998 Ulrich Weigand * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef __WINE_FLATTHUNK_H #define __WINE_FLATTHUNK_H #include "windef.h" struct ThunkDataCommon { char magic[4]; /* 00 */ DWORD checksum; /* 04 */ }; struct ThunkDataLS16 { struct ThunkDataCommon common; /* 00 */ SEGPTR targetTable; /* 08 */ DWORD firstTime; /* 0C */ }; struct ThunkDataLS32 { struct ThunkDataCommon common; /* 00 */ DWORD * targetTable; /* 08 */ char lateBinding[4]; /* 0C */ DWORD flags; /* 10 */ DWORD reserved1; /* 14 */ DWORD reserved2; /* 18 */ DWORD offsetQTThunk; /* 1C */ DWORD offsetFTProlog; /* 20 */ }; struct ThunkDataSL16 { struct ThunkDataCommon common; /* 00 */ DWORD flags1; /* 08 */ DWORD reserved1; /* 0C */ struct ThunkDataSL * fpData; /* 10 */ SEGPTR spData; /* 14 */ DWORD reserved2; /* 18 */ char lateBinding[4]; /* 1C */ DWORD flags2; /* 20 */ DWORD reserved3; /* 20 */ SEGPTR apiDatabase; /* 28 */ }; struct ThunkDataSL32 { struct ThunkDataCommon common; /* 00 */ DWORD reserved1; /* 08 */ struct ThunkDataSL * data; /* 0C */ char lateBinding[4]; /* 10 */ DWORD flags; /* 14 */ DWORD reserved2; /* 18 */ DWORD reserved3; /* 1C */ DWORD offsetTargetTable; /* 20 */ }; struct ThunkDataSL { #if 0 This structure differs from the Win95 original, but this should not matter since it is strictly internal to the thunk handling routines in KRNL386 / KERNEL32. For reference, here is the Win95 layout: struct ThunkDataCommon common; /* 00 */ DWORD flags1; /* 08 */ SEGPTR apiDatabase; /* 0C */ WORD exePtr; /* 10 */ WORD segMBA; /* 12 */ DWORD lenMBATotal; /* 14 */ DWORD lenMBAUsed; /* 18 */ DWORD flags2; /* 1C */ char pszDll16[256]; /* 20 */ char pszDll32[256]; /*120 */ We do it differently since all our thunk handling is done by 32-bit code. Therefore we do not need do provide easy access to this data, especially the process target table database, for 16-bit code. #endif struct ThunkDataCommon common; DWORD flags1; struct SLApiDB * apiDB; struct SLTargetDB * targetDB; DWORD flags2; char pszDll16[256]; char pszDll32[256]; }; struct SLTargetDB { struct SLTargetDB * next; DWORD process; DWORD * targetTable; }; struct SLApiDB { DWORD nrArgBytes; DWORD errorReturnValue; }; #endif /* __WINE_FLATTHUNK_H */