1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115
|
/*
* Win95 Flat Thunk data structures
*
* Copyright 1998 Ulrich Weigand
*/
#ifndef __WINE_FLATTHUNK_H
#define __WINE_FLATTHUNK_H
#include "windef.h"
struct _PDB;
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;
struct _PDB * process;
DWORD * targetTable;
};
struct SLApiDB
{
DWORD nrArgBytes;
DWORD errorReturnValue;
};
#endif /* __WINE_FLATTHUNK_H */
|