Reactos
at listview 585 lines 18 kB view raw
1#ifndef _NTIMAGE_ 2#define _NTIMAGE_ 3 4// 5// Image Formats 6// 7#define IMAGE_DOS_SIGNATURE 0x5A4D 8#define IMAGE_OS2_SIGNATURE 0x454E 9#define IMAGE_OS2_SIGNATURE_LE 0x454C 10#define IMAGE_VXD_SIGNATURE 0x454C 11#define IMAGE_NT_SIGNATURE 0x00004550 12 13// 14// Image architectures 15// 16#define IMAGE_FILE_MACHINE_AM33 0x1d3 17#define IMAGE_FILE_MACHINE_AMD64 0x8664 18#define IMAGE_FILE_MACHINE_ARM 0x1c0 19#define IMAGE_FILE_MACHINE_ARMV7 0x1c4 20#define IMAGE_FILE_MACHINE_EBC 0xebc 21#define IMAGE_FILE_MACHINE_I386 0x14c 22#define IMAGE_FILE_MACHINE_IA64 0x200 23#define IMAGE_FILE_MACHINE_M32R 0x9041 24#define IMAGE_FILE_MACHINE_MIPS16 0x266 25#define IMAGE_FILE_MACHINE_MIPSFPU 0x366 26#define IMAGE_FILE_MACHINE_MIPSFPU16 0x466 27#define IMAGE_FILE_MACHINE_POWERPC 0x1f0 28#define IMAGE_FILE_MACHINE_POWERPCFP 0x1f1 29#define IMAGE_FILE_MACHINE_R4000 0x166 30#define IMAGE_FILE_MACHINE_SH3 0x1a2 31#define IMAGE_FILE_MACHINE_SH3E 0x01a4 32#define IMAGE_FILE_MACHINE_SH3DSP 0x1a3 33#define IMAGE_FILE_MACHINE_SH4 0x1a6 34#define IMAGE_FILE_MACHINE_SH5 0x1a8 35#define IMAGE_FILE_MACHINE_THUMB 0x1c2 36#define IMAGE_FILE_MACHINE_WCEMIPSV2 0x169 37#define IMAGE_FILE_MACHINE_R3000 0x162 38#define IMAGE_FILE_MACHINE_R10000 0x168 39#define IMAGE_FILE_MACHINE_ALPHA 0x184 40#define IMAGE_FILE_MACHINE_ALPHA64 0x0284 41#define IMAGE_FILE_MACHINE_AXP64 IMAGE_FILE_MACHINE_ALPHA64 42#define IMAGE_FILE_MACHINE_CEE 0xC0EE 43#define IMAGE_FILE_MACHINE_TRICORE 0x0520 44#define IMAGE_FILE_MACHINE_CEF 0x0CEF 45 46 47// 48// DOS Image Header Format 49// 50#include <pshpack2.h> 51typedef struct _IMAGE_DOS_HEADER { 52 USHORT e_magic; 53 USHORT e_cblp; 54 USHORT e_cp; 55 USHORT e_crlc; 56 USHORT e_cparhdr; 57 USHORT e_minalloc; 58 USHORT e_maxalloc; 59 USHORT e_ss; 60 USHORT e_sp; 61 USHORT e_csum; 62 USHORT e_ip; 63 USHORT e_cs; 64 USHORT e_lfarlc; 65 USHORT e_ovno; 66 USHORT e_res[4]; 67 USHORT e_oemid; 68 USHORT e_oeminfo; 69 USHORT e_res2[10]; 70 LONG e_lfanew; 71} IMAGE_DOS_HEADER, *PIMAGE_DOS_HEADER; 72#include <poppack.h> 73 74// 75// Export/Import Format 76// 77#include <pshpack4.h> 78typedef struct _IMAGE_EXPORT_DIRECTORY { 79 ULONG Characteristics; 80 ULONG TimeDateStamp; 81 USHORT MajorVersion; 82 USHORT MinorVersion; 83 ULONG Name; 84 ULONG Base; 85 ULONG NumberOfFunctions; 86 ULONG NumberOfNames; 87 ULONG AddressOfFunctions; 88 ULONG AddressOfNames; 89 ULONG AddressOfNameOrdinals; 90} IMAGE_EXPORT_DIRECTORY, *PIMAGE_EXPORT_DIRECTORY; 91 92// 93// Resource Data Entry Format 94// 95typedef struct _IMAGE_RESOURCE_DATA_ENTRY { 96 ULONG OffsetToData; 97 ULONG Size; 98 ULONG CodePage; 99 ULONG Reserved; 100} IMAGE_RESOURCE_DATA_ENTRY, *PIMAGE_RESOURCE_DATA_ENTRY; 101 102// 103// Load Configuration Directory Entry Format 104// 105typedef struct { 106 ULONG Size; 107 ULONG TimeDateStamp; 108 USHORT MajorVersion; 109 USHORT MinorVersion; 110 ULONG GlobalFlagsClear; 111 ULONG GlobalFlagsSet; 112 ULONG CriticalSectionDefaultTimeout; 113 ULONG DeCommitFreeBlockThreshold; 114 ULONG DeCommitTotalFreeThreshold; 115 ULONG LockPrefixTable; 116 ULONG MaximumAllocationSize; 117 ULONG VirtualMemoryThreshold; 118 ULONG ProcessHeapFlags; 119 ULONG ProcessAffinityMask; 120 USHORT CSDVersion; 121 USHORT Reserved1; 122 ULONG EditList; 123 ULONG SecurityCookie; 124 ULONG SEHandlerTable; 125 ULONG SEHandlerCount; 126} IMAGE_LOAD_CONFIG_DIRECTORY32, *PIMAGE_LOAD_CONFIG_DIRECTORY32; 127 128typedef struct { 129 ULONG Size; 130 ULONG TimeDateStamp; 131 USHORT MajorVersion; 132 USHORT MinorVersion; 133 ULONG GlobalFlagsClear; 134 ULONG GlobalFlagsSet; 135 ULONG CriticalSectionDefaultTimeout; 136 ULONGLONG DeCommitFreeBlockThreshold; 137 ULONGLONG DeCommitTotalFreeThreshold; 138 ULONGLONG LockPrefixTable; 139 ULONGLONG MaximumAllocationSize; 140 ULONGLONG VirtualMemoryThreshold; 141 ULONGLONG ProcessAffinityMask; 142 ULONG ProcessHeapFlags; 143 USHORT CSDVersion; 144 USHORT Reserved1; 145 ULONGLONG EditList; 146 ULONGLONG SecurityCookie; 147 ULONGLONG SEHandlerTable; 148 ULONGLONG SEHandlerCount; 149} IMAGE_LOAD_CONFIG_DIRECTORY64, *PIMAGE_LOAD_CONFIG_DIRECTORY64; 150 151#ifdef _WIN64 152typedef IMAGE_LOAD_CONFIG_DIRECTORY64 IMAGE_LOAD_CONFIG_DIRECTORY; 153typedef PIMAGE_LOAD_CONFIG_DIRECTORY64 PIMAGE_LOAD_CONFIG_DIRECTORY; 154#else 155typedef IMAGE_LOAD_CONFIG_DIRECTORY32 IMAGE_LOAD_CONFIG_DIRECTORY; 156typedef PIMAGE_LOAD_CONFIG_DIRECTORY32 PIMAGE_LOAD_CONFIG_DIRECTORY; 157#endif 158 159// 160// Base Relocation Format 161// 162typedef struct _IMAGE_BASE_RELOCATION { 163 ULONG VirtualAddress; 164 ULONG SizeOfBlock; 165} IMAGE_BASE_RELOCATION, *PIMAGE_BASE_RELOCATION; 166 167// 168// Resource Format 169// 170typedef struct _IMAGE_RESOURCE_DIRECTORY { 171 ULONG Characteristics; 172 ULONG TimeDateStamp; 173 USHORT MajorVersion; 174 USHORT MinorVersion; 175 USHORT NumberOfNamedEntries; 176 USHORT NumberOfIdEntries; 177} IMAGE_RESOURCE_DIRECTORY, *PIMAGE_RESOURCE_DIRECTORY; 178 179#define IMAGE_RESOURCE_NAME_IS_STRING 0x80000000 180#define IMAGE_RESOURCE_DATA_IS_DIRECTORY 0x80000000 181 182typedef struct _IMAGE_RESOURCE_DIRECTORY_ENTRY { 183 _ANONYMOUS_UNION union { 184 _ANONYMOUS_STRUCT struct { 185 ULONG NameOffset:31; 186 ULONG NameIsString:1; 187 } DUMMYSTRUCTNAME; 188 ULONG Name; 189 USHORT Id; 190 } DUMMYUNIONNAME; 191 _ANONYMOUS_UNION union { 192 ULONG OffsetToData; 193 _ANONYMOUS_STRUCT struct { 194 ULONG OffsetToDirectory:31; 195 ULONG DataIsDirectory:1; 196 } DUMMYSTRUCTNAME2; 197 } DUMMYUNIONNAME2; 198} IMAGE_RESOURCE_DIRECTORY_ENTRY, *PIMAGE_RESOURCE_DIRECTORY_ENTRY; 199 200typedef struct _IMAGE_RESOURCE_DIRECTORY_STRING { 201 USHORT Length; 202 CHAR NameString[ANYSIZE_ARRAY]; 203} IMAGE_RESOURCE_DIRECTORY_STRING, *PIMAGE_RESOURCE_DIRECTORY_STRING; 204 205// 206// Section Header Format 207// 208#define IMAGE_SIZEOF_SHORT_NAME 8 209#define IMAGE_SIZEOF_SECTION_HEADER 40 210 211typedef struct _IMAGE_SECTION_HEADER { 212 UCHAR Name[IMAGE_SIZEOF_SHORT_NAME]; 213 union { 214 ULONG PhysicalAddress; 215 ULONG VirtualSize; 216 } Misc; 217 ULONG VirtualAddress; 218 ULONG SizeOfRawData; 219 ULONG PointerToRawData; 220 ULONG PointerToRelocations; 221 ULONG PointerToLinenumbers; 222 USHORT NumberOfRelocations; 223 USHORT NumberOfLinenumbers; 224 ULONG Characteristics; 225} IMAGE_SECTION_HEADER, *PIMAGE_SECTION_HEADER; 226 227// 228// Section Characteristics 229// 230#define IMAGE_SCN_CNT_CODE 0x00000020 231#define IMAGE_SCN_CNT_INITIALIZED_DATA 0x00000040 232#define IMAGE_SCN_CNT_UNINITIALIZED_DATA 0x00000080 233 234#define IMAGE_SCN_LNK_NRELOC_OVFL 0x01000000 235#define IMAGE_SCN_MEM_DISCARDABLE 0x02000000 236#define IMAGE_SCN_MEM_NOT_CACHED 0x04000000 237#define IMAGE_SCN_MEM_NOT_PAGED 0x08000000 238#define IMAGE_SCN_MEM_SHARED 0x10000000 239#define IMAGE_SCN_MEM_EXECUTE 0x20000000 240#define IMAGE_SCN_MEM_READ 0x40000000 241#define IMAGE_SCN_MEM_WRITE 0x80000000 242 243// 244// File Header Format 245// 246#define IMAGE_SIZEOF_FILE_HEADER 20 247 248typedef struct _IMAGE_FILE_HEADER { 249 USHORT Machine; 250 USHORT NumberOfSections; 251 ULONG TimeDateStamp; 252 ULONG PointerToSymbolTable; 253 ULONG NumberOfSymbols; 254 USHORT SizeOfOptionalHeader; 255 USHORT Characteristics; 256} IMAGE_FILE_HEADER, *PIMAGE_FILE_HEADER; 257 258// 259// File Characteristics 260// 261#define IMAGE_FILE_RELOCS_STRIPPED 0x0001 262#define IMAGE_FILE_EXECUTABLE_IMAGE 0x0002 263#define IMAGE_FILE_LINE_NUMS_STRIPPED 0x0004 264#define IMAGE_FILE_LOCAL_SYMS_STRIPPED 0x0008 265#define IMAGE_FILE_AGGRESIVE_WS_TRIM 0x0010 266#define IMAGE_FILE_LARGE_ADDRESS_AWARE 0x0020 267#define IMAGE_FILE_BYTES_REVERSED_LO 0x0080 268#define IMAGE_FILE_32BIT_MACHINE 0x0100 269#define IMAGE_FILE_DEBUG_STRIPPED 0x0200 270#define IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP 0x0400 271#define IMAGE_FILE_NET_RUN_FROM_SWAP 0x0800 272#define IMAGE_FILE_SYSTEM 0x1000 273#define IMAGE_FILE_DLL 0x2000 274#define IMAGE_FILE_UP_SYSTEM_ONLY 0x4000 275#define IMAGE_FILE_BYTES_REVERSED_HI 0x8000 276 277// 278// Directory format. 279// 280#define IMAGE_NUMBEROF_DIRECTORY_ENTRIES 16 281 282typedef struct _IMAGE_DATA_DIRECTORY { 283 ULONG VirtualAddress; 284 ULONG Size; 285} IMAGE_DATA_DIRECTORY, *PIMAGE_DATA_DIRECTORY; 286 287// 288// Optional Header Formats 289// 290typedef struct _IMAGE_OPTIONAL_HEADER { 291 USHORT Magic; 292 UCHAR MajorLinkerVersion; 293 UCHAR MinorLinkerVersion; 294 ULONG SizeOfCode; 295 ULONG SizeOfInitializedData; 296 ULONG SizeOfUninitializedData; 297 ULONG AddressOfEntryPoint; 298 ULONG BaseOfCode; 299 ULONG BaseOfData; 300 ULONG ImageBase; 301 ULONG SectionAlignment; 302 ULONG FileAlignment; 303 USHORT MajorOperatingSystemVersion; 304 USHORT MinorOperatingSystemVersion; 305 USHORT MajorImageVersion; 306 USHORT MinorImageVersion; 307 USHORT MajorSubsystemVersion; 308 USHORT MinorSubsystemVersion; 309 ULONG Win32VersionValue; 310 ULONG SizeOfImage; 311 ULONG SizeOfHeaders; 312 ULONG CheckSum; 313 USHORT Subsystem; 314 USHORT DllCharacteristics; 315 ULONG SizeOfStackReserve; 316 ULONG SizeOfStackCommit; 317 ULONG SizeOfHeapReserve; 318 ULONG SizeOfHeapCommit; 319 ULONG LoaderFlags; 320 ULONG NumberOfRvaAndSizes; 321 IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES]; 322} IMAGE_OPTIONAL_HEADER32, *PIMAGE_OPTIONAL_HEADER32; 323 324typedef struct _IMAGE_ROM_OPTIONAL_HEADER { 325 USHORT Magic; 326 UCHAR MajorLinkerVersion; 327 UCHAR MinorLinkerVersion; 328 ULONG SizeOfCode; 329 ULONG SizeOfInitializedData; 330 ULONG SizeOfUninitializedData; 331 ULONG AddressOfEntryPoint; 332 ULONG BaseOfCode; 333 ULONG BaseOfData; 334 ULONG BaseOfBss; 335 ULONG GprMask; 336 ULONG CprMask[4]; 337 ULONG GpValue; 338} IMAGE_ROM_OPTIONAL_HEADER, *PIMAGE_ROM_OPTIONAL_HEADER; 339 340typedef struct _IMAGE_OPTIONAL_HEADER64 { 341 USHORT Magic; 342 UCHAR MajorLinkerVersion; 343 UCHAR MinorLinkerVersion; 344 ULONG SizeOfCode; 345 ULONG SizeOfInitializedData; 346 ULONG SizeOfUninitializedData; 347 ULONG AddressOfEntryPoint; 348 ULONG BaseOfCode; 349 ULONGLONG ImageBase; 350 ULONG SectionAlignment; 351 ULONG FileAlignment; 352 USHORT MajorOperatingSystemVersion; 353 USHORT MinorOperatingSystemVersion; 354 USHORT MajorImageVersion; 355 USHORT MinorImageVersion; 356 USHORT MajorSubsystemVersion; 357 USHORT MinorSubsystemVersion; 358 ULONG Win32VersionValue; 359 ULONG SizeOfImage; 360 ULONG SizeOfHeaders; 361 ULONG CheckSum; 362 USHORT Subsystem; 363 USHORT DllCharacteristics; 364 ULONGLONG SizeOfStackReserve; 365 ULONGLONG SizeOfStackCommit; 366 ULONGLONG SizeOfHeapReserve; 367 ULONGLONG SizeOfHeapCommit; 368 ULONG LoaderFlags; 369 ULONG NumberOfRvaAndSizes; 370 IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES]; 371} IMAGE_OPTIONAL_HEADER64, *PIMAGE_OPTIONAL_HEADER64; 372 373// 374// Format Identifier Magics 375// 376#define IMAGE_NT_OPTIONAL_HDR32_MAGIC 0x10b 377#define IMAGE_NT_OPTIONAL_HDR64_MAGIC 0x20b 378#define IMAGE_ROM_OPTIONAL_HDR_MAGIC 0x107 379 380#ifdef _WIN64 381typedef IMAGE_OPTIONAL_HEADER64 IMAGE_OPTIONAL_HEADER; 382typedef PIMAGE_OPTIONAL_HEADER64 PIMAGE_OPTIONAL_HEADER; 383#define IMAGE_NT_OPTIONAL_HDR_MAGIC IMAGE_NT_OPTIONAL_HDR64_MAGIC 384#else 385typedef IMAGE_OPTIONAL_HEADER32 IMAGE_OPTIONAL_HEADER; 386typedef PIMAGE_OPTIONAL_HEADER32 PIMAGE_OPTIONAL_HEADER; 387#define IMAGE_NT_OPTIONAL_HDR_MAGIC IMAGE_NT_OPTIONAL_HDR32_MAGIC 388#endif 389 390// 391// Nt Header Formats 392// 393typedef struct _IMAGE_NT_HEADERS64 { 394 ULONG Signature; 395 IMAGE_FILE_HEADER FileHeader; 396 IMAGE_OPTIONAL_HEADER64 OptionalHeader; 397} IMAGE_NT_HEADERS64; 398 399typedef struct _IMAGE_NT_HEADERS { 400 ULONG Signature; 401 IMAGE_FILE_HEADER FileHeader; 402 IMAGE_OPTIONAL_HEADER32 OptionalHeader; 403} IMAGE_NT_HEADERS32; 404 405#ifdef _WIN64 406typedef IMAGE_NT_HEADERS64 IMAGE_NT_HEADERS; 407#else 408typedef IMAGE_NT_HEADERS32 IMAGE_NT_HEADERS; 409#endif 410 411#ifndef _NTDDK_ 412 413typedef struct _IMAGE_NT_HEADERS *PIMAGE_NT_HEADERS32; 414typedef struct _IMAGE_NT_HEADERS64 *PIMAGE_NT_HEADERS64; 415 416#ifdef _WIN64 417typedef PIMAGE_NT_HEADERS64 PIMAGE_NT_HEADERS; 418#else 419typedef PIMAGE_NT_HEADERS32 PIMAGE_NT_HEADERS; 420#endif 421 422#endif /* _NTDDK_ */ 423 424// 425// Retreives the first image section header from the Nt Header 426// 427#define IMAGE_FIRST_SECTION( NtHeader ) \ 428 ((PIMAGE_SECTION_HEADER) ((ULONG_PTR)(NtHeader) + \ 429 FIELD_OFFSET( IMAGE_NT_HEADERS, OptionalHeader ) + \ 430 ((NtHeader))->FileHeader.SizeOfOptionalHeader)) 431 432// 433// Subsystems 434// 435#define IMAGE_SUBSYSTEM_UNKNOWN 0 436#define IMAGE_SUBSYSTEM_NATIVE 1 437#define IMAGE_SUBSYSTEM_WINDOWS_GUI 2 438#define IMAGE_SUBSYSTEM_WINDOWS_CUI 3 439#define IMAGE_SUBSYSTEM_OS2_CUI 5 440#define IMAGE_SUBSYSTEM_POSIX_CUI 7 441#define IMAGE_SUBSYSTEM_NATIVE_WINDOWS 8 442#define IMAGE_SUBSYSTEM_WINDOWS_CE_GUI 9 443#define IMAGE_SUBSYSTEM_EFI_APPLICATION 10 444#define IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER 11 445#define IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER 12 446#define IMAGE_SUBSYSTEM_EFI_ROM 13 447#define IMAGE_SUBSYSTEM_XBOX 14 448#define IMAGE_SUBSYSTEM_WINDOWS_BOOT_APPLICATION 16 449#define IMAGE_SUBSYSTEM_XBOX_CODE_CATALOG 17 450 451// 452// Dll Characteristics 453// 454#define IMAGE_DLLCHARACTERISTICS_HIGH_ENTROPY_VA 0x0020 455#define IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE 0x0040 456#define IMAGE_DLLCHARACTERISTICS_FORCE_INTEGRITY 0x0080 457#define IMAGE_DLLCHARACTERISTICS_NX_COMPAT 0x0100 458#define IMAGE_DLLCHARACTERISTICS_NO_ISOLATION 0x0200 459#define IMAGE_DLLCHARACTERISTICS_NO_SEH 0x0400 460#define IMAGE_DLLCHARACTERISTICS_NO_BIND 0x0800 461#define IMAGE_DLLCHARACTERISTICS_APPCONTAINER 0x1000 462#define IMAGE_DLLCHARACTERISTICS_WDM_DRIVER 0x2000 463#define IMAGE_DLLCHARACTERISTICS_GUARD_CF 0x4000 464#define IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE 0x8000 465 466// 467// Loader Flags 468// 469#define IMAGE_LOADER_FLAGS_COMPLUS 0x00000001 470#define IMAGE_LOADER_FLAGS_SYSTEM_GLOBAL 0x01000000 471 472// 473// Directory Entry Specifiers 474// 475#define IMAGE_DIRECTORY_ENTRY_EXPORT 0 476#define IMAGE_DIRECTORY_ENTRY_IMPORT 1 477#define IMAGE_DIRECTORY_ENTRY_RESOURCE 2 478#define IMAGE_DIRECTORY_ENTRY_EXCEPTION 3 479#define IMAGE_DIRECTORY_ENTRY_SECURITY 4 480#define IMAGE_DIRECTORY_ENTRY_BASERELOC 5 481#define IMAGE_DIRECTORY_ENTRY_DEBUG 6 482#define IMAGE_DIRECTORY_ENTRY_ARCHITECTURE 7 483#define IMAGE_DIRECTORY_ENTRY_GLOBALPTR 8 484#define IMAGE_DIRECTORY_ENTRY_TLS 9 485#define IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG 10 486#define IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT 11 487#define IMAGE_DIRECTORY_ENTRY_IAT 12 488#define IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT 13 489#define IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR 14 490 491// 492// Import Formats 493// 494typedef struct _IMAGE_IMPORT_BY_NAME { 495 USHORT Hint; 496 UCHAR Name[1]; 497} IMAGE_IMPORT_BY_NAME, *PIMAGE_IMPORT_BY_NAME; 498 499#include <pshpack8.h> 500typedef struct _IMAGE_THUNK_DATA64 { 501 union { 502 ULONGLONG ForwarderString; 503 ULONGLONG Function; 504 ULONGLONG Ordinal; 505 ULONGLONG AddressOfData; 506 } u1; 507} IMAGE_THUNK_DATA64, *PIMAGE_THUNK_DATA64; 508#include <poppack.h> 509 510typedef struct _IMAGE_THUNK_DATA32 { 511 union { 512 ULONG ForwarderString; 513 ULONG Function; 514 ULONG Ordinal; 515 ULONG AddressOfData; 516 } u1; 517} IMAGE_THUNK_DATA32, *PIMAGE_THUNK_DATA32; 518 519#define IMAGE_ORDINAL_FLAG64 0x8000000000000000ULL 520#define IMAGE_ORDINAL_FLAG32 0x80000000 521#define IMAGE_ORDINAL64(Ordinal) (Ordinal & 0xffff) 522#define IMAGE_ORDINAL32(Ordinal) (Ordinal & 0xffff) 523#define IMAGE_SNAP_BY_ORDINAL64(Ordinal) ((Ordinal & IMAGE_ORDINAL_FLAG64) != 0) 524#define IMAGE_SNAP_BY_ORDINAL32(Ordinal) ((Ordinal & IMAGE_ORDINAL_FLAG32) != 0) 525 526// 527// Thread Local Storage (TLS) 528// 529typedef 530VOID 531(NTAPI *PIMAGE_TLS_CALLBACK) ( 532 PVOID DllHandle, 533 ULONG Reason, 534 PVOID Reserved); 535 536typedef struct _IMAGE_TLS_DIRECTORY64 { 537 ULONGLONG StartAddressOfRawData; 538 ULONGLONG EndAddressOfRawData; 539 ULONGLONG AddressOfIndex; 540 ULONGLONG AddressOfCallBacks; 541 ULONG SizeOfZeroFill; 542 ULONG Characteristics; 543} IMAGE_TLS_DIRECTORY64, *PIMAGE_TLS_DIRECTORY64; 544 545typedef struct _IMAGE_TLS_DIRECTORY32 { 546 ULONG StartAddressOfRawData; 547 ULONG EndAddressOfRawData; 548 ULONG AddressOfIndex; 549 ULONG AddressOfCallBacks; 550 ULONG SizeOfZeroFill; 551 ULONG Characteristics; 552} IMAGE_TLS_DIRECTORY32, *PIMAGE_TLS_DIRECTORY32; 553 554#ifdef _WIN64 555#define IMAGE_ORDINAL_FLAG IMAGE_ORDINAL_FLAG64 556#define IMAGE_ORDINAL(Ordinal) IMAGE_ORDINAL64(Ordinal) 557typedef IMAGE_THUNK_DATA64 IMAGE_THUNK_DATA; 558typedef PIMAGE_THUNK_DATA64 PIMAGE_THUNK_DATA; 559#define IMAGE_SNAP_BY_ORDINAL(Ordinal) IMAGE_SNAP_BY_ORDINAL64(Ordinal) 560typedef IMAGE_TLS_DIRECTORY64 IMAGE_TLS_DIRECTORY; 561typedef PIMAGE_TLS_DIRECTORY64 PIMAGE_TLS_DIRECTORY; 562#else 563#define IMAGE_ORDINAL_FLAG IMAGE_ORDINAL_FLAG32 564#define IMAGE_ORDINAL(Ordinal) IMAGE_ORDINAL32(Ordinal) 565typedef IMAGE_THUNK_DATA32 IMAGE_THUNK_DATA; 566typedef PIMAGE_THUNK_DATA32 PIMAGE_THUNK_DATA; 567#define IMAGE_SNAP_BY_ORDINAL(Ordinal) IMAGE_SNAP_BY_ORDINAL32(Ordinal) 568typedef IMAGE_TLS_DIRECTORY32 IMAGE_TLS_DIRECTORY; 569typedef PIMAGE_TLS_DIRECTORY32 PIMAGE_TLS_DIRECTORY; 570#endif 571 572typedef struct _IMAGE_IMPORT_DESCRIPTOR { 573 _ANONYMOUS_UNION union { 574 ULONG Characteristics; 575 ULONG OriginalFirstThunk; 576 } DUMMYUNIONNAME; 577 ULONG TimeDateStamp; 578 ULONG ForwarderChain; 579 ULONG Name; 580 ULONG FirstThunk; 581} IMAGE_IMPORT_DESCRIPTOR, *PIMAGE_IMPORT_DESCRIPTOR; 582 583#include <poppack.h> 584 585#endif /* _NTIMAGE_ */