| 1 | /* $Id: peexe.h,v 1.1 1999-05-24 20:19:17 ktk Exp $ */ | 
|---|
| 2 |  | 
|---|
| 3 | /* | 
|---|
| 4 | * Copyright  Eric Youngdale (1994) | 
|---|
| 5 | */ | 
|---|
| 6 | #ifndef __WINE_PEEXE_H | 
|---|
| 7 | #define __WINE_PEEXE_H | 
|---|
| 8 |  | 
|---|
| 9 | #ifdef __WIN32OS2__ | 
|---|
| 10 | #ifndef _OS2WIN_H | 
|---|
| 11 | #include <win32type.h> | 
|---|
| 12 | #endif | 
|---|
| 13 | #include <neexe.h> | 
|---|
| 14 | #else | 
|---|
| 15 | #include "windef.h" | 
|---|
| 16 | #endif | 
|---|
| 17 |  | 
|---|
| 18 | typedef struct _IMAGE_FILE_HEADER { | 
|---|
| 19 | WORD    Machine;                        /* 00 */ | 
|---|
| 20 | WORD    NumberOfSections;               /* 02 */ | 
|---|
| 21 | DWORD   TimeDateStamp;                  /* 04 */ | 
|---|
| 22 | DWORD   PointerToSymbolTable;           /* 08 */ | 
|---|
| 23 | DWORD   NumberOfSymbols;                /* 0c */ | 
|---|
| 24 | WORD    SizeOfOptionalHeader;           /* 10 */ | 
|---|
| 25 | WORD    Characteristics;                /* 12 */ | 
|---|
| 26 | } IMAGE_FILE_HEADER,*PIMAGE_FILE_HEADER; | 
|---|
| 27 |  | 
|---|
| 28 | #define IMAGE_SIZEOF_FILE_HEADER        20 | 
|---|
| 29 |  | 
|---|
| 30 | /* These defines describe the meanings of the bits in the Characteristics | 
|---|
| 31 | field */ | 
|---|
| 32 |  | 
|---|
| 33 | #define IMAGE_FILE_RELOCS_STRIPPED      1 /* No relocation info */ | 
|---|
| 34 | #define IMAGE_FILE_EXECUTABLE_IMAGE     2 | 
|---|
| 35 | #define IMAGE_FILE_LINE_NUMS_STRIPPED   4 | 
|---|
| 36 | #define IMAGE_FILE_LOCAL_SYMS_STRIPPED  8 | 
|---|
| 37 | #define IMAGE_FILE_16BIT_MACHINE        0x40 | 
|---|
| 38 | #define IMAGE_FILE_BYTES_REVERSED_LO    0x80 | 
|---|
| 39 | #define IMAGE_FILE_32BIT_MACHINE        0x100 | 
|---|
| 40 | #define IMAGE_FILE_DEBUG_STRIPPED       0x200 | 
|---|
| 41 | #define IMAGE_FILE_SYSTEM               0x1000 | 
|---|
| 42 | #define IMAGE_FILE_DLL                  0x2000 | 
|---|
| 43 | #define IMAGE_FILE_BYTES_REVERSED_HI    0x8000 | 
|---|
| 44 |  | 
|---|
| 45 | /* These are the settings of the Machine field. */ | 
|---|
| 46 | #define IMAGE_FILE_MACHINE_UNKNOWN      0 | 
|---|
| 47 | #define IMAGE_FILE_MACHINE_I860         0x14d | 
|---|
| 48 | #define IMAGE_FILE_MACHINE_I386         0x14c | 
|---|
| 49 | #define IMAGE_FILE_MACHINE_R3000        0x162 | 
|---|
| 50 | #define IMAGE_FILE_MACHINE_R4000        0x166 | 
|---|
| 51 | #define IMAGE_FILE_MACHINE_R10000       0x168 | 
|---|
| 52 | #define IMAGE_FILE_MACHINE_ALPHA        0x184 | 
|---|
| 53 | #define IMAGE_FILE_MACHINE_POWERPC      0x1F0 | 
|---|
| 54 |  | 
|---|
| 55 | typedef struct _IMAGE_DATA_DIRECTORY | 
|---|
| 56 | { | 
|---|
| 57 | DWORD   VirtualAddress; | 
|---|
| 58 | DWORD   Size; | 
|---|
| 59 | } IMAGE_DATA_DIRECTORY,*PIMAGE_DATA_DIRECTORY; | 
|---|
| 60 |  | 
|---|
| 61 | #define IMAGE_NUMBEROF_DIRECTORY_ENTRIES 16 | 
|---|
| 62 |  | 
|---|
| 63 | /* Optional coff header - used by NT to provide additional information. */ | 
|---|
| 64 | typedef struct _IMAGE_OPTIONAL_HEADER | 
|---|
| 65 | { | 
|---|
| 66 | /* | 
|---|
| 67 | * Standard fields. | 
|---|
| 68 | */ | 
|---|
| 69 |  | 
|---|
| 70 | WORD    Magic;                          /* 00 */ | 
|---|
| 71 | BYTE    MajorLinkerVersion;             /* 02 */ | 
|---|
| 72 | BYTE    MinorLinkerVersion;             /* 03 */ | 
|---|
| 73 | DWORD   SizeOfCode;                     /* 04 */ | 
|---|
| 74 | DWORD   SizeOfInitializedData;          /* 08 */ | 
|---|
| 75 | DWORD   SizeOfUninitializedData;        /* 0C */ | 
|---|
| 76 | DWORD   AddressOfEntryPoint;            /* 10 */ | 
|---|
| 77 | DWORD   BaseOfCode;                     /* 14 */ | 
|---|
| 78 | DWORD   BaseOfData;                     /* 18 */ | 
|---|
| 79 |  | 
|---|
| 80 | /* | 
|---|
| 81 | * NT additional fields. | 
|---|
| 82 | */ | 
|---|
| 83 |  | 
|---|
| 84 | DWORD   ImageBase;                      /* 1C */ | 
|---|
| 85 | DWORD   SectionAlignment;               /* 20 */ | 
|---|
| 86 | DWORD   FileAlignment;                  /* 24 */ | 
|---|
| 87 | WORD    MajorOperatingSystemVersion;    /* 28 */ | 
|---|
| 88 | WORD    MinorOperatingSystemVersion;    /* 2A */ | 
|---|
| 89 | WORD    MajorImageVersion;              /* 2C */ | 
|---|
| 90 | WORD    MinorImageVersion;              /* 2E */ | 
|---|
| 91 | WORD    MajorSubsystemVersion;          /* 30 */ | 
|---|
| 92 | WORD    MinorSubsystemVersion;          /* 32 */ | 
|---|
| 93 | DWORD   Reserved1;                      /* 34 */ | 
|---|
| 94 | DWORD   SizeOfImage;                    /* 38 */ | 
|---|
| 95 | DWORD   SizeOfHeaders;                  /* 3C */ | 
|---|
| 96 | DWORD   CheckSum;                       /* 40 */ | 
|---|
| 97 | WORD    Subsystem;                      /* 44 */ | 
|---|
| 98 | WORD    DllCharacteristics;             /* 46 */ | 
|---|
| 99 | DWORD   SizeOfStackReserve;             /* 48 */ | 
|---|
| 100 | DWORD   SizeOfStackCommit;              /* 4C */ | 
|---|
| 101 | DWORD   SizeOfHeapReserve;              /* 50 */ | 
|---|
| 102 | DWORD   SizeOfHeapCommit;               /* 54 */ | 
|---|
| 103 | DWORD   LoaderFlags;                    /* 58 */ | 
|---|
| 104 | DWORD   NumberOfRvaAndSizes;            /* 5C */ | 
|---|
| 105 | /* 60: */ | 
|---|
| 106 | IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES]; | 
|---|
| 107 | } IMAGE_OPTIONAL_HEADER,*PIMAGE_OPTIONAL_HEADER; | 
|---|
| 108 |  | 
|---|
| 109 | /* Possible Magic values */ | 
|---|
| 110 | #define IMAGE_NT_OPTIONAL_HDR_MAGIC        0x10b | 
|---|
| 111 | #define IMAGE_ROM_OPTIONAL_HDR_MAGIC       0x107 | 
|---|
| 112 |  | 
|---|
| 113 | /* These are indexes into the DataDirectory array */ | 
|---|
| 114 | #define IMAGE_FILE_EXPORT_DIRECTORY             0 | 
|---|
| 115 | #define IMAGE_FILE_IMPORT_DIRECTORY             1 | 
|---|
| 116 | #define IMAGE_FILE_RESOURCE_DIRECTORY           2 | 
|---|
| 117 | #define IMAGE_FILE_EXCEPTION_DIRECTORY          3 | 
|---|
| 118 | #define IMAGE_FILE_SECURITY_DIRECTORY           4 | 
|---|
| 119 | #define IMAGE_FILE_BASE_RELOCATION_TABLE        5 | 
|---|
| 120 | #define IMAGE_FILE_DEBUG_DIRECTORY              6 | 
|---|
| 121 | #define IMAGE_FILE_DESCRIPTION_STRING           7 | 
|---|
| 122 | #define IMAGE_FILE_MACHINE_VALUE                8  /* Mips */ | 
|---|
| 123 | #define IMAGE_FILE_THREAD_LOCAL_STORAGE         9 | 
|---|
| 124 | #define IMAGE_FILE_CALLBACK_DIRECTORY           10 | 
|---|
| 125 |  | 
|---|
| 126 | /* Directory Entries, indices into the DataDirectory array */ | 
|---|
| 127 |  | 
|---|
| 128 | #define IMAGE_DIRECTORY_ENTRY_EXPORT            0 | 
|---|
| 129 | #define IMAGE_DIRECTORY_ENTRY_IMPORT            1 | 
|---|
| 130 | #define IMAGE_DIRECTORY_ENTRY_RESOURCE          2 | 
|---|
| 131 | #define IMAGE_DIRECTORY_ENTRY_EXCEPTION         3 | 
|---|
| 132 | #define IMAGE_DIRECTORY_ENTRY_SECURITY          4 | 
|---|
| 133 | #define IMAGE_DIRECTORY_ENTRY_BASERELOC         5 | 
|---|
| 134 | #define IMAGE_DIRECTORY_ENTRY_DEBUG             6 | 
|---|
| 135 | #define IMAGE_DIRECTORY_ENTRY_COPYRIGHT         7 | 
|---|
| 136 | #define IMAGE_DIRECTORY_ENTRY_GLOBALPTR         8   /* (MIPS GP) */ | 
|---|
| 137 | #define IMAGE_DIRECTORY_ENTRY_TLS               9 | 
|---|
| 138 | #define IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG       10 | 
|---|
| 139 | #define IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT      11 | 
|---|
| 140 | #define IMAGE_DIRECTORY_ENTRY_IAT               12  /* Import Address Table */ | 
|---|
| 141 | #define IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT      13 | 
|---|
| 142 | #define IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR    14 | 
|---|
| 143 |  | 
|---|
| 144 | /* Subsystem Values */ | 
|---|
| 145 |  | 
|---|
| 146 | #define IMAGE_SUBSYSTEM_UNKNOWN         0 | 
|---|
| 147 | #define IMAGE_SUBSYSTEM_NATIVE          1 | 
|---|
| 148 | #define IMAGE_SUBSYSTEM_WINDOWS_GUI     2       /* Windows GUI subsystem */ | 
|---|
| 149 | #define IMAGE_SUBSYSTEM_WINDOWS_CUI     3       /* Windows character subsystem*/ | 
|---|
| 150 | #define IMAGE_SUBSYSTEM_OS2_CUI         5 | 
|---|
| 151 | #define IMAGE_SUBSYSTEM_POSIX_CUI       7 | 
|---|
| 152 |  | 
|---|
| 153 | typedef struct _IMAGE_NT_HEADERS { | 
|---|
| 154 | DWORD                   Signature;      /* 00: PE\0\0 */ | 
|---|
| 155 | IMAGE_FILE_HEADER       FileHeader;     /* 04: Fileheader */ | 
|---|
| 156 | IMAGE_OPTIONAL_HEADER   OptionalHeader; /* 18: Optional Header */ | 
|---|
| 157 | } IMAGE_NT_HEADERS,*PIMAGE_NT_HEADERS; | 
|---|
| 158 |  | 
|---|
| 159 |  | 
|---|
| 160 | #define PE_HEADER(module) \ | 
|---|
| 161 | ((IMAGE_NT_HEADERS*)((LPBYTE)(module) + \ | 
|---|
| 162 | (((IMAGE_DOS_HEADER*)(module))->e_lfanew))) | 
|---|
| 163 |  | 
|---|
| 164 | #define PE_SECTIONS(module) \ | 
|---|
| 165 | ((IMAGE_SECTION_HEADER*)((LPBYTE)&PE_HEADER(module)->OptionalHeader + \ | 
|---|
| 166 | PE_HEADER(module)->FileHeader.SizeOfOptionalHeader)) | 
|---|
| 167 |  | 
|---|
| 168 | #define RVA_PTR(module,field) ((LPBYTE)(module) + PE_HEADER(module)->field) | 
|---|
| 169 |  | 
|---|
| 170 | /* Section header format */ | 
|---|
| 171 |  | 
|---|
| 172 | #define IMAGE_SIZEOF_SHORT_NAME 8 | 
|---|
| 173 |  | 
|---|
| 174 | typedef struct _IMAGE_SECTION_HEADER { | 
|---|
| 175 | BYTE    Name[IMAGE_SIZEOF_SHORT_NAME];  /* 00: */ | 
|---|
| 176 | union { | 
|---|
| 177 | DWORD   PhysicalAddress;        /* 04: */ | 
|---|
| 178 | DWORD   VirtualSize;            /* 04: */ | 
|---|
| 179 | } Misc; | 
|---|
| 180 | DWORD   VirtualAddress;                 /* 08: */ | 
|---|
| 181 | DWORD   SizeOfRawData;                  /* 0C: */ | 
|---|
| 182 | DWORD   PointerToRawData;               /* 10: */ | 
|---|
| 183 | DWORD   PointerToRelocations;           /* 14: */ | 
|---|
| 184 | DWORD   PointerToLinenumbers;           /* 18: */ | 
|---|
| 185 | WORD    NumberOfRelocations;            /* 1C: */ | 
|---|
| 186 | WORD    NumberOfLinenumbers;            /* 1E: */ | 
|---|
| 187 | DWORD   Characteristics;                /* 20: */ | 
|---|
| 188 | /* 24: */ | 
|---|
| 189 | } IMAGE_SECTION_HEADER,*PIMAGE_SECTION_HEADER; | 
|---|
| 190 |  | 
|---|
| 191 | #define IMAGE_SIZEOF_SECTION_HEADER 40 | 
|---|
| 192 |  | 
|---|
| 193 | /* These defines are for the Characteristics bitfield. */ | 
|---|
| 194 | /* #define IMAGE_SCN_TYPE_REG                   0x00000000 - Reserved */ | 
|---|
| 195 | /* #define IMAGE_SCN_TYPE_DSECT                 0x00000001 - Reserved */ | 
|---|
| 196 | /* #define IMAGE_SCN_TYPE_NOLOAD                0x00000002 - Reserved */ | 
|---|
| 197 | /* #define IMAGE_SCN_TYPE_GROUP                 0x00000004 - Reserved */ | 
|---|
| 198 | /* #define IMAGE_SCN_TYPE_NO_PAD                0x00000008 - Reserved */ | 
|---|
| 199 | /* #define IMAGE_SCN_TYPE_COPY                  0x00000010 - Reserved */ | 
|---|
| 200 |  | 
|---|
| 201 | #define IMAGE_SCN_CNT_CODE                      0x00000020 | 
|---|
| 202 | #define IMAGE_SCN_CNT_INITIALIZED_DATA          0x00000040 | 
|---|
| 203 | #define IMAGE_SCN_CNT_UNINITIALIZED_DATA        0x00000080 | 
|---|
| 204 |  | 
|---|
| 205 | #define IMAGE_SCN_LNK_OTHER                     0x00000100 | 
|---|
| 206 | #define IMAGE_SCN_LNK_INFO                      0x00000200 | 
|---|
| 207 | /* #define      IMAGE_SCN_TYPE_OVER             0x00000400 - Reserved */ | 
|---|
| 208 | #define IMAGE_SCN_LNK_REMOVE                    0x00000800 | 
|---|
| 209 | #define IMAGE_SCN_LNK_COMDAT                    0x00001000 | 
|---|
| 210 |  | 
|---|
| 211 | /*                                              0x00002000 - Reserved */ | 
|---|
| 212 | /* #define IMAGE_SCN_MEM_PROTECTED              0x00004000 - Obsolete */ | 
|---|
| 213 | #define IMAGE_SCN_MEM_FARDATA                   0x00008000 | 
|---|
| 214 |  | 
|---|
| 215 | /* #define IMAGE_SCN_MEM_SYSHEAP                0x00010000 - Obsolete */ | 
|---|
| 216 | #define IMAGE_SCN_MEM_PURGEABLE                 0x00020000 | 
|---|
| 217 | #define IMAGE_SCN_MEM_16BIT                     0x00020000 | 
|---|
| 218 | #define IMAGE_SCN_MEM_LOCKED                    0x00040000 | 
|---|
| 219 | #define IMAGE_SCN_MEM_PRELOAD                   0x00080000 | 
|---|
| 220 |  | 
|---|
| 221 | #define IMAGE_SCN_ALIGN_1BYTES                  0x00100000 | 
|---|
| 222 | #define IMAGE_SCN_ALIGN_2BYTES                  0x00200000 | 
|---|
| 223 | #define IMAGE_SCN_ALIGN_4BYTES                  0x00300000 | 
|---|
| 224 | #define IMAGE_SCN_ALIGN_8BYTES                  0x00400000 | 
|---|
| 225 | #define IMAGE_SCN_ALIGN_16BYTES                 0x00500000  /* Default */ | 
|---|
| 226 | #define IMAGE_SCN_ALIGN_32BYTES                 0x00600000 | 
|---|
| 227 | #define IMAGE_SCN_ALIGN_64BYTES                 0x00700000 | 
|---|
| 228 | /*                                              0x00800000 - Unused */ | 
|---|
| 229 |  | 
|---|
| 230 | #define IMAGE_SCN_LNK_NRELOC_OVFL               0x01000000 | 
|---|
| 231 |  | 
|---|
| 232 |  | 
|---|
| 233 | #define IMAGE_SCN_MEM_DISCARDABLE               0x02000000 | 
|---|
| 234 | #define IMAGE_SCN_MEM_NOT_CACHED                0x04000000 | 
|---|
| 235 | #define IMAGE_SCN_MEM_NOT_PAGED                 0x08000000 | 
|---|
| 236 | #define IMAGE_SCN_MEM_SHARED                    0x10000000 | 
|---|
| 237 | #define IMAGE_SCN_MEM_EXECUTE                   0x20000000 | 
|---|
| 238 | #define IMAGE_SCN_MEM_READ                      0x40000000 | 
|---|
| 239 | #define IMAGE_SCN_MEM_WRITE                     0x80000000 | 
|---|
| 240 |  | 
|---|
| 241 |  | 
|---|
| 242 | /* Import name entry */ | 
|---|
| 243 | typedef struct _IMAGE_IMPORT_BY_NAME { | 
|---|
| 244 | WORD    Hint; | 
|---|
| 245 | BYTE    Name[1]; | 
|---|
| 246 | } IMAGE_IMPORT_BY_NAME,*PIMAGE_IMPORT_BY_NAME; | 
|---|
| 247 |  | 
|---|
| 248 | /* Import thunk */ | 
|---|
| 249 | typedef struct _IMAGE_THUNK_DATA { | 
|---|
| 250 | union { | 
|---|
| 251 | LPBYTE    ForwarderString; | 
|---|
| 252 | FARPROC Function; | 
|---|
| 253 | DWORD     Ordinal; | 
|---|
| 254 | PIMAGE_IMPORT_BY_NAME   AddressOfData; | 
|---|
| 255 | } u1; | 
|---|
| 256 | } IMAGE_THUNK_DATA,*PIMAGE_THUNK_DATA; | 
|---|
| 257 |  | 
|---|
| 258 | /* Import module directory */ | 
|---|
| 259 |  | 
|---|
| 260 | typedef struct _IMAGE_IMPORT_DESCRIPTOR { | 
|---|
| 261 | union { | 
|---|
| 262 | DWORD   Characteristics; /* 0 for terminating null import descriptor  */ | 
|---|
| 263 | PIMAGE_THUNK_DATA OriginalFirstThunk;   /* RVA to original unbound IAT */ | 
|---|
| 264 | } u; | 
|---|
| 265 | DWORD   TimeDateStamp;  /* 0 if not bound, | 
|---|
| 266 | * -1 if bound, and real date\time stamp | 
|---|
| 267 | *    in IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT | 
|---|
| 268 | * (new BIND) | 
|---|
| 269 | * otherwise date/time stamp of DLL bound to | 
|---|
| 270 | * (Old BIND) | 
|---|
| 271 | */ | 
|---|
| 272 | DWORD   ForwarderChain; /* -1 if no forwarders */ | 
|---|
| 273 | DWORD   Name; | 
|---|
| 274 | /* RVA to IAT (if bound this IAT has actual addresses) */ | 
|---|
| 275 | PIMAGE_THUNK_DATA FirstThunk; | 
|---|
| 276 | } IMAGE_IMPORT_DESCRIPTOR,*PIMAGE_IMPORT_DESCRIPTOR; | 
|---|
| 277 |  | 
|---|
| 278 | #define IMAGE_ORDINAL_FLAG              0x80000000 | 
|---|
| 279 | #define IMAGE_SNAP_BY_ORDINAL(Ordinal)  ((Ordinal & IMAGE_ORDINAL_FLAG) != 0) | 
|---|
| 280 | #define IMAGE_ORDINAL(Ordinal)          (Ordinal & 0xffff) | 
|---|
| 281 |  | 
|---|
| 282 | /* Export module directory */ | 
|---|
| 283 |  | 
|---|
| 284 | typedef struct _IMAGE_EXPORT_DIRECTORY { | 
|---|
| 285 | DWORD   Characteristics; | 
|---|
| 286 | DWORD   TimeDateStamp; | 
|---|
| 287 | WORD    MajorVersion; | 
|---|
| 288 | WORD    MinorVersion; | 
|---|
| 289 | DWORD   Name; | 
|---|
| 290 | DWORD   Base; | 
|---|
| 291 | DWORD   NumberOfFunctions; | 
|---|
| 292 | DWORD   NumberOfNames; | 
|---|
| 293 | LPDWORD *AddressOfFunctions; | 
|---|
| 294 | LPDWORD *AddressOfNames; | 
|---|
| 295 | LPWORD  *AddressOfNameOrdinals; | 
|---|
| 296 | /*  u_char ModuleName[1]; */ | 
|---|
| 297 | } IMAGE_EXPORT_DIRECTORY,*PIMAGE_EXPORT_DIRECTORY; | 
|---|
| 298 |  | 
|---|
| 299 |  | 
|---|
| 300 | /* | 
|---|
| 301 | * Resource directory stuff | 
|---|
| 302 | */ | 
|---|
| 303 | typedef struct _IMAGE_RESOURCE_DIRECTORY { | 
|---|
| 304 | DWORD   Characteristics; | 
|---|
| 305 | DWORD   TimeDateStamp; | 
|---|
| 306 | WORD    MajorVersion; | 
|---|
| 307 | WORD    MinorVersion; | 
|---|
| 308 | WORD    NumberOfNamedEntries; | 
|---|
| 309 | WORD    NumberOfIdEntries; | 
|---|
| 310 | /*  IMAGE_RESOURCE_DIRECTORY_ENTRY DirectoryEntries[]; */ | 
|---|
| 311 | } IMAGE_RESOURCE_DIRECTORY,*PIMAGE_RESOURCE_DIRECTORY; | 
|---|
| 312 |  | 
|---|
| 313 | #define IMAGE_RESOURCE_NAME_IS_STRING           0x80000000 | 
|---|
| 314 | #define IMAGE_RESOURCE_DATA_IS_DIRECTORY        0x80000000 | 
|---|
| 315 |  | 
|---|
| 316 | typedef struct _IMAGE_RESOURCE_DIRECTORY_ENTRY { | 
|---|
| 317 | union { | 
|---|
| 318 | struct { | 
|---|
| 319 | unsigned NameOffset:31; | 
|---|
| 320 | unsigned NameIsString:1; | 
|---|
| 321 | } s; | 
|---|
| 322 | DWORD   Name; | 
|---|
| 323 | WORD    Id; | 
|---|
| 324 | } u1; | 
|---|
| 325 | union { | 
|---|
| 326 | DWORD   OffsetToData; | 
|---|
| 327 | struct { | 
|---|
| 328 | unsigned OffsetToDirectory:31; | 
|---|
| 329 | unsigned DataIsDirectory:1; | 
|---|
| 330 | } s; | 
|---|
| 331 | } u2; | 
|---|
| 332 | } IMAGE_RESOURCE_DIRECTORY_ENTRY,*PIMAGE_RESOURCE_DIRECTORY_ENTRY; | 
|---|
| 333 |  | 
|---|
| 334 |  | 
|---|
| 335 | typedef struct _IMAGE_RESOURCE_DIRECTORY_STRING { | 
|---|
| 336 | WORD    Length; | 
|---|
| 337 | CHAR    NameString[ 1 ]; | 
|---|
| 338 | } IMAGE_RESOURCE_DIRECTORY_STRING,*PIMAGE_RESOURCE_DIRECTORY_STRING; | 
|---|
| 339 |  | 
|---|
| 340 | typedef struct _IMAGE_RESOURCE_DIR_STRING_U { | 
|---|
| 341 | WORD    Length; | 
|---|
| 342 | WCHAR   NameString[ 1 ]; | 
|---|
| 343 | } IMAGE_RESOURCE_DIR_STRING_U,*PIMAGE_RESOURCE_DIR_STRING_U; | 
|---|
| 344 |  | 
|---|
| 345 | typedef struct _IMAGE_RESOURCE_DATA_ENTRY { | 
|---|
| 346 | DWORD   OffsetToData; | 
|---|
| 347 | DWORD   Size; | 
|---|
| 348 | DWORD   CodePage; | 
|---|
| 349 | DWORD   ResourceHandle; | 
|---|
| 350 | } IMAGE_RESOURCE_DATA_ENTRY,*PIMAGE_RESOURCE_DATA_ENTRY; | 
|---|
| 351 |  | 
|---|
| 352 | typedef struct _IMAGE_BASE_RELOCATION | 
|---|
| 353 | { | 
|---|
| 354 | DWORD   VirtualAddress; | 
|---|
| 355 | DWORD   SizeOfBlock; | 
|---|
| 356 | WORD    TypeOffset[1]; | 
|---|
| 357 | } IMAGE_BASE_RELOCATION,*PIMAGE_BASE_RELOCATION; | 
|---|
| 358 |  | 
|---|
| 359 | typedef struct _IMAGE_LOAD_CONFIG_DIRECTORY { | 
|---|
| 360 | DWORD   Characteristics; | 
|---|
| 361 | DWORD   TimeDateStamp; | 
|---|
| 362 | WORD    MajorVersion; | 
|---|
| 363 | WORD    MinorVersion; | 
|---|
| 364 | DWORD   GlobalFlagsClear; | 
|---|
| 365 | DWORD   GlobalFlagsSet; | 
|---|
| 366 | DWORD   CriticalSectionDefaultTimeout; | 
|---|
| 367 | DWORD   DeCommitFreeBlockThreshold; | 
|---|
| 368 | DWORD   DeCommitTotalFreeThreshold; | 
|---|
| 369 | LPVOID  LockPrefixTable; | 
|---|
| 370 | DWORD   MaximumAllocationSize; | 
|---|
| 371 | DWORD   VirtualMemoryThreshold; | 
|---|
| 372 | DWORD   ProcessHeapFlags; | 
|---|
| 373 | DWORD   Reserved[ 4 ]; | 
|---|
| 374 | } IMAGE_LOAD_CONFIG_DIRECTORY,*PIMAGE_LOAD_CONFIG_DIRECTORY; | 
|---|
| 375 |  | 
|---|
| 376 | typedef VOID (* CALLBACK PIMAGE_TLS_CALLBACK)( | 
|---|
| 377 | LPVOID DllHandle,DWORD Reason,LPVOID Reserved | 
|---|
| 378 | ); | 
|---|
| 379 |  | 
|---|
| 380 | typedef struct _IMAGE_TLS_DIRECTORY { | 
|---|
| 381 | DWORD   StartAddressOfRawData; | 
|---|
| 382 | DWORD   EndAddressOfRawData; | 
|---|
| 383 | LPDWORD AddressOfIndex; | 
|---|
| 384 | PIMAGE_TLS_CALLBACK *AddressOfCallBacks; | 
|---|
| 385 | DWORD   SizeOfZeroFill; | 
|---|
| 386 | DWORD   Characteristics; | 
|---|
| 387 | } IMAGE_TLS_DIRECTORY,*PIMAGE_TLS_DIRECTORY; | 
|---|
| 388 |  | 
|---|
| 389 | /* | 
|---|
| 390 | * The IMAGE_DEBUG_DIRECTORY data directory points to an array of | 
|---|
| 391 | * these structures. | 
|---|
| 392 | */ | 
|---|
| 393 | typedef struct _IMAGE_DEBUG_DIRECTORY { | 
|---|
| 394 | DWORD   Characteristics; | 
|---|
| 395 | DWORD   TimeDateStamp; | 
|---|
| 396 | WORD    MajorVersion; | 
|---|
| 397 | WORD    MinorVersion; | 
|---|
| 398 | DWORD   Type; | 
|---|
| 399 | DWORD   SizeOfData; | 
|---|
| 400 | DWORD   AddressOfRawData; | 
|---|
| 401 | DWORD   PointerToRawData; | 
|---|
| 402 | } IMAGE_DEBUG_DIRECTORY,*PIMAGE_DEBUG_DIRECTORY; | 
|---|
| 403 |  | 
|---|
| 404 | /* | 
|---|
| 405 | * The type field above can take these (plus a few other | 
|---|
| 406 | * irrelevant) values. | 
|---|
| 407 | */ | 
|---|
| 408 | #define IMAGE_DEBUG_TYPE_UNKNOWN        0 | 
|---|
| 409 | #define IMAGE_DEBUG_TYPE_COFF           1 | 
|---|
| 410 | #define IMAGE_DEBUG_TYPE_CODEVIEW       2 | 
|---|
| 411 | #define IMAGE_DEBUG_TYPE_FPO            3 | 
|---|
| 412 | #define IMAGE_DEBUG_TYPE_MISC           4 | 
|---|
| 413 | #define IMAGE_DEBUG_TYPE_EXCEPTION      5 | 
|---|
| 414 | #define IMAGE_DEBUG_TYPE_FIXUP          6 | 
|---|
| 415 | #define IMAGE_DEBUG_TYPE_OMAP_TO_SRC    7 | 
|---|
| 416 | #define IMAGE_DEBUG_TYPE_OMAP_FROM_SRC  8 | 
|---|
| 417 |  | 
|---|
| 418 | /* generic relocation types */ | 
|---|
| 419 | #define IMAGE_REL_BASED_ABSOLUTE                0 | 
|---|
| 420 | #define IMAGE_REL_BASED_HIGH                    1 | 
|---|
| 421 | #define IMAGE_REL_BASED_LOW                     2 | 
|---|
| 422 | #define IMAGE_REL_BASED_HIGHLOW                 3 | 
|---|
| 423 | #define IMAGE_REL_BASED_HIGHADJ                 4 | 
|---|
| 424 | #define IMAGE_REL_BASED_MIPS_JMPADDR            5 | 
|---|
| 425 | #define IMAGE_REL_BASED_SECTION                 6 | 
|---|
| 426 | #define IMAGE_REL_BASED_REL                     7 | 
|---|
| 427 | #define IMAGE_REL_BASED_MIPS_JMPADDR16          9 | 
|---|
| 428 | #define IMAGE_REL_BASED_IA64_IMM64              9 /* yes, 9 too */ | 
|---|
| 429 | #define IMAGE_REL_BASED_DIR64                   10 | 
|---|
| 430 | #define IMAGE_REL_BASED_HIGH3ADJ                11 | 
|---|
| 431 |  | 
|---|
| 432 | /* I386 relocation types */ | 
|---|
| 433 | #define IMAGE_REL_I386_ABSOLUTE                 0 | 
|---|
| 434 | #define IMAGE_REL_I386_DIR16                    1 | 
|---|
| 435 | #define IMAGE_REL_I386_REL16                    2 | 
|---|
| 436 | #define IMAGE_REL_I386_DIR                      6 | 
|---|
| 437 | #define IMAGE_REL_I386_DIR32NB                  7 | 
|---|
| 438 | #define IMAGE_REL_I386_SEG12                    9 | 
|---|
| 439 | #define IMAGE_REL_I386_SECTION                  10 | 
|---|
| 440 | #define IMAGE_REL_I386_SECREL                   11 | 
|---|
| 441 | #define IMAGE_REL_I386_REL                      20 | 
|---|
| 442 |  | 
|---|
| 443 | /* MIPS relocation types */ | 
|---|
| 444 | #define IMAGE_REL_MIPS_ABSOLUTE         0x0000 | 
|---|
| 445 | #define IMAGE_REL_MIPS_REFHALF          0x0001 | 
|---|
| 446 | #define IMAGE_REL_MIPS_REFWORD          0x0002 | 
|---|
| 447 | #define IMAGE_REL_MIPS_JMPADDR          0x0003 | 
|---|
| 448 | #define IMAGE_REL_MIPS_REFHI            0x0004 | 
|---|
| 449 | #define IMAGE_REL_MIPS_REFLO            0x0005 | 
|---|
| 450 | #define IMAGE_REL_MIPS_GPREL            0x0006 | 
|---|
| 451 | #define IMAGE_REL_MIPS_LITERAL          0x0007 | 
|---|
| 452 | #define IMAGE_REL_MIPS_SECTION          0x000A | 
|---|
| 453 | #define IMAGE_REL_MIPS_SECREL           0x000B | 
|---|
| 454 | #define IMAGE_REL_MIPS_SECRELLO         0x000C | 
|---|
| 455 | #define IMAGE_REL_MIPS_SECRELHI         0x000D | 
|---|
| 456 | #define IMAGE_REL_MIPS_JMPADDR16        0x0010 | 
|---|
| 457 | #define IMAGE_REL_MIPS_REFWORDNB        0x0022 | 
|---|
| 458 | #define IMAGE_REL_MIPS_PAIR             0x0025 | 
|---|
| 459 |  | 
|---|
| 460 | /* ALPHA relocation types */ | 
|---|
| 461 | #define IMAGE_REL_ALPHA_ABSOLUTE        0x0000 | 
|---|
| 462 | #define IMAGE_REL_ALPHA_REFLONG         0x0001 | 
|---|
| 463 | #define IMAGE_REL_ALPHA_REFQUAD         0x0002 | 
|---|
| 464 | #define IMAGE_REL_ALPHA_GPREL           0x0003 | 
|---|
| 465 | #define IMAGE_REL_ALPHA_LITERAL         0x0004 | 
|---|
| 466 | #define IMAGE_REL_ALPHA_LITUSE          0x0005 | 
|---|
| 467 | #define IMAGE_REL_ALPHA_GPDISP          0x0006 | 
|---|
| 468 | #define IMAGE_REL_ALPHA_BRADDR          0x0007 | 
|---|
| 469 | #define IMAGE_REL_ALPHA_HINT            0x0008 | 
|---|
| 470 | #define IMAGE_REL_ALPHA_INLINE_REFLONG  0x0009 | 
|---|
| 471 | #define IMAGE_REL_ALPHA_REFHI           0x000A | 
|---|
| 472 | #define IMAGE_REL_ALPHA_REFLO           0x000B | 
|---|
| 473 | #define IMAGE_REL_ALPHA_PAIR            0x000C | 
|---|
| 474 | #define IMAGE_REL_ALPHA_MATCH           0x000D | 
|---|
| 475 | #define IMAGE_REL_ALPHA_SECTION         0x000E | 
|---|
| 476 | #define IMAGE_REL_ALPHA_SECREL          0x000F | 
|---|
| 477 | #define IMAGE_REL_ALPHA_REFLONGNB       0x0010 | 
|---|
| 478 | #define IMAGE_REL_ALPHA_SECRELLO        0x0011 | 
|---|
| 479 | #define IMAGE_REL_ALPHA_SECRELHI        0x0012 | 
|---|
| 480 | #define IMAGE_REL_ALPHA_REFQ3           0x0013 | 
|---|
| 481 | #define IMAGE_REL_ALPHA_REFQ2           0x0014 | 
|---|
| 482 | #define IMAGE_REL_ALPHA_REFQ1           0x0015 | 
|---|
| 483 | #define IMAGE_REL_ALPHA_GPRELLO         0x0016 | 
|---|
| 484 | #define IMAGE_REL_ALPHA_GPRELHI         0x0017 | 
|---|
| 485 |  | 
|---|
| 486 | /* PowerPC relocation types */ | 
|---|
| 487 | #define IMAGE_REL_PPC_ABSOLUTE          0x0000 | 
|---|
| 488 | #define IMAGE_REL_PPC_ADDR64            0x0001 | 
|---|
| 489 | #define IMAGE_REL_PPC_ADDR            0x0002 | 
|---|
| 490 | #define IMAGE_REL_PPC_ADDR24            0x0003 | 
|---|
| 491 | #define IMAGE_REL_PPC_ADDR16            0x0004 | 
|---|
| 492 | #define IMAGE_REL_PPC_ADDR14            0x0005 | 
|---|
| 493 | #define IMAGE_REL_PPC_REL24             0x0006 | 
|---|
| 494 | #define IMAGE_REL_PPC_REL14             0x0007 | 
|---|
| 495 | #define IMAGE_REL_PPC_TOCREL16          0x0008 | 
|---|
| 496 | #define IMAGE_REL_PPC_TOCREL14          0x0009 | 
|---|
| 497 | #define IMAGE_REL_PPC_ADDR32NB          0x000A | 
|---|
| 498 | #define IMAGE_REL_PPC_SECREL            0x000B | 
|---|
| 499 | #define IMAGE_REL_PPC_SECTION           0x000C | 
|---|
| 500 | #define IMAGE_REL_PPC_IFGLUE            0x000D | 
|---|
| 501 | #define IMAGE_REL_PPC_IMGLUE            0x000E | 
|---|
| 502 | #define IMAGE_REL_PPC_SECREL16          0x000F | 
|---|
| 503 | #define IMAGE_REL_PPC_REFHI             0x0010 | 
|---|
| 504 | #define IMAGE_REL_PPC_REFLO             0x0011 | 
|---|
| 505 | #define IMAGE_REL_PPC_PAIR              0x0012 | 
|---|
| 506 | #define IMAGE_REL_PPC_SECRELLO          0x0013 | 
|---|
| 507 | #define IMAGE_REL_PPC_SECRELHI          0x0014 | 
|---|
| 508 | #define IMAGE_REL_PPC_GPREL             0x0015 | 
|---|
| 509 | #define IMAGE_REL_PPC_TYPEMASK          0x00FF | 
|---|
| 510 | /* modifier bits */ | 
|---|
| 511 | #define IMAGE_REL_PPC_NEG               0x0100 | 
|---|
| 512 | #define IMAGE_REL_PPC_BRTAKEN           0x0200 | 
|---|
| 513 | #define IMAGE_REL_PPC_BRNTAKEN          0x0400 | 
|---|
| 514 | #define IMAGE_REL_PPC_TOCDEFN           0x0800 | 
|---|
| 515 |  | 
|---|
| 516 | /* SH3 ? relocation type */ | 
|---|
| 517 | #define IMAGE_REL_SH3_ABSOLUTE          0x0000 | 
|---|
| 518 | #define IMAGE_REL_SH3_DIRECT16          0x0001 | 
|---|
| 519 | #define IMAGE_REL_SH3_DIRECT          0x0002 | 
|---|
| 520 | #define IMAGE_REL_SH3_DIRECT8           0x0003 | 
|---|
| 521 | #define IMAGE_REL_SH3_DIRECT8_WORD      0x0004 | 
|---|
| 522 | #define IMAGE_REL_SH3_DIRECT8_LONG      0x0005 | 
|---|
| 523 | #define IMAGE_REL_SH3_DIRECT4           0x0006 | 
|---|
| 524 | #define IMAGE_REL_SH3_DIRECT4_WORD      0x0007 | 
|---|
| 525 | #define IMAGE_REL_SH3_DIRECT4_LONG      0x0008 | 
|---|
| 526 | #define IMAGE_REL_SH3_PCREL8_WORD       0x0009 | 
|---|
| 527 | #define IMAGE_REL_SH3_PCREL8_LONG       0x000A | 
|---|
| 528 | #define IMAGE_REL_SH3_PCREL12_WORD      0x000B | 
|---|
| 529 | #define IMAGE_REL_SH3_STARTOF_SECTION   0x000C | 
|---|
| 530 | #define IMAGE_REL_SH3_SIZEOF_SECTION    0x000D | 
|---|
| 531 | #define IMAGE_REL_SH3_SECTION           0x000E | 
|---|
| 532 | #define IMAGE_REL_SH3_SECREL            0x000F | 
|---|
| 533 | #define IMAGE_REL_SH3_DIRECT32_NB       0x0010 | 
|---|
| 534 |  | 
|---|
| 535 | /* ARM (Archimedes?) relocation types */ | 
|---|
| 536 | #define IMAGE_REL_ARM_ABSOLUTE          0x0000 | 
|---|
| 537 | #define IMAGE_REL_ARM_ADDR              0x0001 | 
|---|
| 538 | #define IMAGE_REL_ARM_ADDR32NB          0x0002 | 
|---|
| 539 | #define IMAGE_REL_ARM_BRANCH24          0x0003 | 
|---|
| 540 | #define IMAGE_REL_ARM_BRANCH11          0x0004 | 
|---|
| 541 | #define IMAGE_REL_ARM_SECTION           0x000E | 
|---|
| 542 | #define IMAGE_REL_ARM_SECREL            0x000F | 
|---|
| 543 |  | 
|---|
| 544 | /* IA64 relocation types */ | 
|---|
| 545 | #define IMAGE_REL_IA64_ABSOLUTE         0x0000 | 
|---|
| 546 | #define IMAGE_REL_IA64_IMM14            0x0001 | 
|---|
| 547 | #define IMAGE_REL_IA64_IMM22            0x0002 | 
|---|
| 548 | #define IMAGE_REL_IA64_IMM64            0x0003 | 
|---|
| 549 | #define IMAGE_REL_IA64_DIR              0x0004 | 
|---|
| 550 | #define IMAGE_REL_IA64_DIR64            0x0005 | 
|---|
| 551 | #define IMAGE_REL_IA64_PCREL21B         0x0006 | 
|---|
| 552 | #define IMAGE_REL_IA64_PCREL21M         0x0007 | 
|---|
| 553 | #define IMAGE_REL_IA64_PCREL21F         0x0008 | 
|---|
| 554 | #define IMAGE_REL_IA64_GPREL22          0x0009 | 
|---|
| 555 | #define IMAGE_REL_IA64_LTOFF22          0x000A | 
|---|
| 556 | #define IMAGE_REL_IA64_SECTION          0x000B | 
|---|
| 557 | #define IMAGE_REL_IA64_SECREL22         0x000C | 
|---|
| 558 | #define IMAGE_REL_IA64_SECREL64I        0x000D | 
|---|
| 559 | #define IMAGE_REL_IA64_SECREL           0x000E | 
|---|
| 560 | #define IMAGE_REL_IA64_LTOFF64          0x000F | 
|---|
| 561 | #define IMAGE_REL_IA64_DIR32NB          0x0010 | 
|---|
| 562 | #define IMAGE_REL_IA64_RESERVED_11      0x0011 | 
|---|
| 563 | #define IMAGE_REL_IA64_RESERVED_12      0x0012 | 
|---|
| 564 | #define IMAGE_REL_IA64_RESERVED_13      0x0013 | 
|---|
| 565 | #define IMAGE_REL_IA64_RESERVED_14      0x0014 | 
|---|
| 566 | #define IMAGE_REL_IA64_RESERVED_15      0x0015 | 
|---|
| 567 | #define IMAGE_REL_IA64_RESERVED_16      0x0016 | 
|---|
| 568 | #define IMAGE_REL_IA64_ADDEND           0x001F | 
|---|
| 569 |  | 
|---|
| 570 | /* | 
|---|
| 571 | * This is the structure that appears at the very start of a .DBG file. | 
|---|
| 572 | */ | 
|---|
| 573 | typedef struct _IMAGE_SEPARATE_DEBUG_HEADER { | 
|---|
| 574 | WORD    Signature; | 
|---|
| 575 | WORD    Flags; | 
|---|
| 576 | WORD    Machine; | 
|---|
| 577 | WORD    Characteristics; | 
|---|
| 578 | DWORD   TimeDateStamp; | 
|---|
| 579 | DWORD   CheckSum; | 
|---|
| 580 | DWORD   ImageBase; | 
|---|
| 581 | DWORD   SizeOfImage; | 
|---|
| 582 | DWORD   NumberOfSections; | 
|---|
| 583 | DWORD   ExportedNamesSize; | 
|---|
| 584 | DWORD   DebugDirectorySize; | 
|---|
| 585 | DWORD   Reserved[ 3 ]; | 
|---|
| 586 | } IMAGE_SEPARATE_DEBUG_HEADER,*PIMAGE_SEPARATE_DEBUG_HEADER; | 
|---|
| 587 |  | 
|---|
| 588 | #define IMAGE_SEPARATE_DEBUG_SIGNATURE 0x4944 | 
|---|
| 589 |  | 
|---|
| 590 | typedef struct tagMESSAGE_RESOURCE_ENTRY { | 
|---|
| 591 | WORD    Length; | 
|---|
| 592 | WORD    Flags; | 
|---|
| 593 | BYTE    Text[1]; | 
|---|
| 594 | } MESSAGE_RESOURCE_ENTRY,*PMESSAGE_RESOURCE_ENTRY; | 
|---|
| 595 | #define MESSAGE_RESOURCE_UNICODE        0x0001 | 
|---|
| 596 |  | 
|---|
| 597 | typedef struct tagMESSAGE_RESOURCE_BLOCK { | 
|---|
| 598 | DWORD   LowId; | 
|---|
| 599 | DWORD   HighId; | 
|---|
| 600 | DWORD   OffsetToEntries; | 
|---|
| 601 | } MESSAGE_RESOURCE_BLOCK,*PMESSAGE_RESOURCE_BLOCK; | 
|---|
| 602 |  | 
|---|
| 603 | typedef struct tagMESSAGE_RESOURCE_DATA { | 
|---|
| 604 | DWORD                   NumberOfBlocks; | 
|---|
| 605 | MESSAGE_RESOURCE_BLOCK  Blocks[ 1 ]; | 
|---|
| 606 | } MESSAGE_RESOURCE_DATA,*PMESSAGE_RESOURCE_DATA; | 
|---|
| 607 |  | 
|---|
| 608 | typedef struct tagImportDirectory | 
|---|
| 609 | { | 
|---|
| 610 | DWORD    dwRVAFunctionNameList; | 
|---|
| 611 | DWORD    dwUseless1; | 
|---|
| 612 | DWORD    dwUseless2; | 
|---|
| 613 | DWORD    dwRVAModuleName; | 
|---|
| 614 | DWORD    dwRVAFunctionAddressList; | 
|---|
| 615 | }IMAGE_IMPORT_MODULE_DIRECTORY, * PIMAGE_IMPORT_MODULE_DIRECTORY; | 
|---|
| 616 |  | 
|---|
| 617 | #endif /* __WINE_PEEXE_H */ | 
|---|