|  | /* | 
|  | * 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 */ | 
|  |  |