Browse Source

--- Merging r30182 into '.':
U rtl/win/wininc/base.inc
U rtl/win/wininc/func.inc
U rtl/win/wininc/defines.inc
U rtl/win/wininc/struct.inc
--- Merging r30185 into '.':
G rtl/win/wininc/func.inc
--- Merging r30256 into '.':
G rtl/win/wininc/base.inc
--- Merging r30264 into '.':
G rtl/win/wininc/struct.inc
--- Merging r30279 into '.':
G rtl/win/wininc/struct.inc

# revisions: 30182,30185,30256,30264,30279

git-svn-id: branches/fixes_3_0@30328 -

marco 10 years ago
parent
commit
f4093c1bfb
4 changed files with 373 additions and 0 deletions
  1. 59 0
      rtl/win/wininc/base.inc
  2. 82 0
      rtl/win/wininc/defines.inc
  3. 17 0
      rtl/win/wininc/func.inc
  4. 215 0
      rtl/win/wininc/struct.inc

+ 59 - 0
rtl/win/wininc/base.inc

@@ -593,6 +593,21 @@
   #endif
    }
 
+
+  function IMAGE_ORDINAL64(Ordinal : uint64) : uint64; inline;
+  function IMAGE_ORDINAL32(Ordinal : cardinal) : cardinal;inline;
+  function IMAGE_SNAP_BY_ORDINAL64(Ordinal : uint64) : boolean;  inline;
+  function IMAGE_SNAP_BY_ORDINAL32(Ordinal : cardinal) : boolean; inline;
+  {$ifdef WIN64}
+    function IMAGE_ORDINAL(Ordinal : uint64) : uint64; inline;
+    function IMAGE_SNAP_BY_ORDINAL(Ordinal : uint64) : boolean; inline;
+  {$else}
+    function IMAGE_ORDINAL(Ordinal : cardinal) : cardinal; inline;
+    function IMAGE_SNAP_BY_ORDINAL(Ordinal : cardinal) : boolean; inline;
+  {$endif}
+ 
+
+
  {
     Definitions for callback procedures
  }
@@ -1057,5 +1072,49 @@ type
        PALETTERGB:=$02000000 or (RGB(r,g,b));
     end;
 
+  function IMAGE_ORDINAL64(Ordinal : uint64) : uint64;
+  begin
+    IMAGE_ORDINAL64:=Ordinal and $ffff;
+  end;
+
+  function IMAGE_ORDINAL32(Ordinal : cardinal) : cardinal;
+  begin
+    IMAGE_ORDINAL32:=Ordinal and $ffff;
+  end;
+
+  function IMAGE_SNAP_BY_ORDINAL64(Ordinal : uint64) : boolean;
+  begin
+    IMAGE_SNAP_BY_ORDINAL64:=(Ordinal and IMAGE_ORDINAL_FLAG64)<>0;
+  end;
+
+  function IMAGE_SNAP_BY_ORDINAL32(Ordinal : cardinal) : boolean;
+  begin
+    IMAGE_SNAP_BY_ORDINAL32:=(Ordinal and IMAGE_ORDINAL_FLAG32)<>0;
+  end;
+
+  {$ifdef win64}
+  function IMAGE_ORDINAL(Ordinal : uint64) : uint64;
+  begin
+    IMAGE_ORDINAL:=IMAGE_ORDINAL64(Ordinal);
+  end;
+
+
+  function IMAGE_SNAP_BY_ORDINAL(Ordinal : uint64) : boolean;
+  begin
+    IMAGE_SNAP_BY_ORDINAL:=IMAGE_SNAP_BY_ORDINAL64(Ordinal);
+  end;
+
+  {$else}
+
+  function IMAGE_ORDINAL(Ordinal : cardinal) : cardinal;
+  begin
+    IMAGE_ORDINAL:=IMAGE_ORDINAL32(Ordinal);
+  end;
+
+  function IMAGE_SNAP_BY_ORDINAL(Ordinal : cardinal) : boolean;
+  begin
+    IMAGE_SNAP_BY_ORDINAL:=IMAGE_SNAP_BY_ORDINAL32(Ordinal);
+  end;
+ {$endif}
 {$endif read_implementation}
 

+ 82 - 0
rtl/win/wininc/defines.inc

@@ -5913,6 +5913,68 @@ const
     IMAGE_FILE_MACHINE_CEE               = $C0EE;
     IMAGE_FILE_LARGE_ADDRESS_AWARE       = $20;    // for peflags.
 
+  //
+  // Section characteristics.
+  //
+  //      IMAGE_SCN_TYPE_REG                   = $00000000;  // Reserved.
+  //      IMAGE_SCN_TYPE_DSECT                 = $00000001;  // Reserved.
+  //      IMAGE_SCN_TYPE_NOLOAD                = $00000002;  // Reserved.
+  //      IMAGE_SCN_TYPE_GROUP                 = $00000004;  // Reserved.
+     IMAGE_SCN_TYPE_NO_PAD                = $00000008;  // Reserved.
+  //      IMAGE_SCN_TYPE_COPY                  = $00000010;  // Reserved.
+
+     IMAGE_SCN_CNT_CODE                   = $00000020;  // Section contains code.
+     IMAGE_SCN_CNT_INITIALIZED_DATA       = $00000040;  // Section contains initialized data.
+     IMAGE_SCN_CNT_UNINITIALIZED_DATA     = $00000080;  // Section contains uninitialized data.
+
+     IMAGE_SCN_LNK_OTHER                  = $00000100;  // Reserved.
+     IMAGE_SCN_LNK_INFO                   = $00000200;  // Section contains comments or some other type of information.
+  //      IMAGE_SCN_TYPE_OVER                  = $00000400  // Reserved.
+     IMAGE_SCN_LNK_REMOVE                 = $00000800;  // Section contents will not become part of image.
+     IMAGE_SCN_LNK_COMDAT                 = $00001000;  // Section contents comdat.
+  //                                           = $00002000  // Reserved.
+  //      IMAGE_SCN_MEM_PROTECTED - Obsolete   = $00004000
+     IMAGE_SCN_NO_DEFER_SPEC_EXC          = $00004000;  // Reset speculative exceptions handling bits in the TLB entries for this section.
+     IMAGE_SCN_GPREL                      = $00008000;  // Section content can be accessed relative to GP
+     IMAGE_SCN_MEM_FARDATA                = $00008000;
+  //      IMAGE_SCN_MEM_SYSHEAP  - Obsolete    = $00010000;
+     IMAGE_SCN_MEM_PURGEABLE              = $00020000;
+     IMAGE_SCN_MEM_16BIT                  = $00020000;
+     IMAGE_SCN_MEM_LOCKED                 = $00040000;
+     IMAGE_SCN_MEM_PRELOAD                = $00080000;
+
+     IMAGE_SCN_ALIGN_1BYTES               = $00100000;  //
+     IMAGE_SCN_ALIGN_2BYTES               = $00200000;  //
+     IMAGE_SCN_ALIGN_4BYTES               = $00300000;  //
+     IMAGE_SCN_ALIGN_8BYTES               = $00400000;  //
+     IMAGE_SCN_ALIGN_16BYTES              = $00500000;  // Default alignment if no others are specified.
+     IMAGE_SCN_ALIGN_32BYTES              = $00600000;  //
+     IMAGE_SCN_ALIGN_64BYTES              = $00700000;  //
+     IMAGE_SCN_ALIGN_128BYTES             = $00800000;  //
+     IMAGE_SCN_ALIGN_256BYTES             = $00900000;  //
+     IMAGE_SCN_ALIGN_512BYTES             = $00A00000;  //
+     IMAGE_SCN_ALIGN_1024BYTES            = $00B00000;  //
+     IMAGE_SCN_ALIGN_2048BYTES            = $00C00000;  //
+     IMAGE_SCN_ALIGN_4096BYTES            = $00D00000;  //
+     IMAGE_SCN_ALIGN_8192BYTES            = $00E00000;  //
+  // Unused                                    = $00F00000;
+     IMAGE_SCN_ALIGN_MASK                 = $00F00000;
+
+     IMAGE_SCN_LNK_NRELOC_OVFL            = $01000000;  // Section contains extended relocations.
+     IMAGE_SCN_MEM_DISCARDABLE            = $02000000;  // Section can be discarded.
+     IMAGE_SCN_MEM_NOT_CACHED             = $04000000;  // Section is not cachable.
+     IMAGE_SCN_MEM_NOT_PAGED              = $08000000;  // Section is not pageable.
+     IMAGE_SCN_MEM_SHARED                 = $10000000;  // Section is shareable.
+     IMAGE_SCN_MEM_EXECUTE                = $20000000;  // Section is executable.
+     IMAGE_SCN_MEM_READ                   = $40000000;  // Section is readable.
+     IMAGE_SCN_MEM_WRITE                  = $80000000;  // Section is writeable.
+
+  //
+  // TLS Characteristic Flags
+  //
+     IMAGE_SCN_SCALE_INDEX                = $00000001;  // Tls index is scaled
+
+
     GWLP_WNDPROC        		 = -4; 
     GWLP_HINSTANCE      		 = -6; 
     GWLP_HWNDPARENT     		 = -8; 
@@ -5927,6 +5989,26 @@ const
     GCLP_WNDPROC                         = -24;
     GCLP_HICONSM                         = -34;
 
+    IMAGE_ORDINAL_FLAG64 = uint64($8000000000000000);
+    IMAGE_ORDINAL_FLAG32 = uint32($80000000);
+    bm__IMAGE_TLS_DIRECTORY64_Reserved0 = $FFFFF;
+    bp__IMAGE_TLS_DIRECTORY64_Reserved0 = 0;
+    bm__IMAGE_TLS_DIRECTORY64_Alignment = $F00000;
+    bp__IMAGE_TLS_DIRECTORY64_Alignment = 20;
+    bm__IMAGE_TLS_DIRECTORY64_Reserved1 = $FF000000;
+    bp__IMAGE_TLS_DIRECTORY64_Reserved1 = 24;
+    bm__IMAGE_TLS_DIRECTORY32_Reserved0 = $FFFFF;
+    bp__IMAGE_TLS_DIRECTORY32_Reserved0 = 0;
+    bm__IMAGE_TLS_DIRECTORY32_Alignment = $F00000;
+    bp__IMAGE_TLS_DIRECTORY32_Alignment = 20;
+    bm__IMAGE_TLS_DIRECTORY32_Reserved1 = $FF000000;
+    bp__IMAGE_TLS_DIRECTORY32_Reserved1 = 24;
+
+{$ifdef WIN64}
+    IMAGE_ORDINAL_FLAG = IMAGE_ORDINAL_FLAG64;
+{$else}
+    IMAGE_ORDINAL_FLAG = IMAGE_ORDINAL_FLAG32;
+{$endif}                                                          
 
 // #if(WINVER >= 0x0500)
 {/*

+ 17 - 0
rtl/win/wininc/func.inc

@@ -245,6 +245,7 @@ function SetSystemTime(lpSystemTime:LPSYSTEMTIME):WINBOOL; external 'kernel32' n
 procedure GetLocalTime(lpSystemTime:LPSYSTEMTIME); external 'kernel32' name 'GetLocalTime';
 function SetLocalTime(lpSystemTime:LPSYSTEMTIME):WINBOOL; external 'kernel32' name 'SetLocalTime';
 procedure GetSystemInfo(lpSystemInfo:LPSYSTEM_INFO); external 'kernel32' name 'GetSystemInfo';
+procedure GetNativeSystemInfo(lpSystemInfo:LPSYSTEM_INFO); external 'kernel32' name 'GetNativeSystemInfo';
 function SystemTimeToTzSpecificLocalTime(lpTimeZoneInformation:LPTIME_ZONE_INFORMATION; lpUniversalTime:LPSYSTEMTIME; lpLocalTime:LPSYSTEMTIME):WINBOOL; external 'kernel32' name 'SystemTimeToTzSpecificLocalTime';
 function GetTimeZoneInformation(lpTimeZoneInformation:LPTIME_ZONE_INFORMATION):DWORD; external 'kernel32' name 'GetTimeZoneInformation';
 function SetTimeZoneInformation(lpTimeZoneInformation:LPTIME_ZONE_INFORMATION):WINBOOL; external 'kernel32' name 'SetTimeZoneInformation';
@@ -1273,6 +1274,7 @@ function EndMenu:BOOL; external 'user32' name 'EndMenu';
 
 
 function GetMenuBarInfo(_hwnd:HWND; idObject:longint; idItem:longint; pmbi:LPMENUBARINFO):BOOL; external 'user32' name 'GetMenuBarInfo';
+function IMAGE_FIRST_SECTION(ntheader : PIMAGE_NT_HEADERS):PIMAGE_SECTION_HEADER;
 
 {$endif read_interface}
 
@@ -2372,5 +2374,20 @@ begin
   GetLargestConsoleWindowSize:=COORD(res);
 end;
 
+{
+#define IMAGE_FIRST_SECTION( ntheader ) ((PIMAGE_SECTION_HEADER) \
+    ((ULONG_PTR)(ntheader) + \
+     FIELD_OFFSET( IMAGE_NT_HEADERS, OptionalHeader ) + \
+     ((ntheader))->FileHeader.SizeOfOptionalHeader \
+    )) 
+
+}
+
+function IMAGE_FIRST_SECTION(ntheader : PIMAGE_NT_HEADERS):PIMAGE_SECTION_HEADER;
+// (PTRUINT(ntheader)+ OFS(ntheader^.OptionalHeader) - OFS(NTHEADER);  -> address of ntheader cancels.
+begin
+  IMAGE_FIRST_SECTION:=PIMAGE_SECTION_HEADER(OFS(ntheader^.OptionalHeader) + ntheader^.FileHeader.SizeOfOptionalHeader);
+end;
+
 {$endif read_implementation}
 

+ 215 - 0
rtl/win/wininc/struct.inc

@@ -8344,6 +8344,221 @@ type
      PIMAGE_LOAD_CONFIG_DIRECTORY = PIMAGE_LOAD_CONFIG_DIRECTORY32;
 {$endif}
 
+{$push}
+{$packrecords 4}
+
+    PIMAGE_EXPORT_DIRECTORY = ^TIMAGE_EXPORT_DIRECTORY;
+    IMAGE_EXPORT_DIRECTORY = record
+        Characteristics : DWORD;
+        TimeDateStamp   : DWORD;
+        MajorVersion    : WORD;
+        MinorVersion    : WORD;
+        Name 	        : DWORD;
+        Base 		    : DWORD;
+        NumberOfFunctions : DWORD;
+        NumberOfNames   : DWORD;
+        AddressOfFunctions : DWORD;     { RVA from base of image }
+        AddressOfNames  : DWORD;        { RVA from base of image }
+        AddressOfNameOrdinals : DWORD;  { RVA from base of image }
+      end;
+    TIMAGE_EXPORT_DIRECTORY = IMAGE_EXPORT_DIRECTORY; 
+    _IMAGE_EXPORT_DIRECTORY = IMAGE_EXPORT_DIRECTORY;
+    LPIMAGE_EXPORT_DIRECTORY= PIMAGE_EXPORT_DIRECTORY;
+
+  P_IMAGE_IMPORT_BY_NAME = ^_IMAGE_IMPORT_BY_NAME;
+  _IMAGE_IMPORT_BY_NAME =  record
+      Hint : WORD;
+      Name : array[0..0] of AnsiCHAR;
+    end;
+  IMAGE_IMPORT_BY_NAME = _IMAGE_IMPORT_BY_NAME;
+  PIMAGE_IMPORT_BY_NAME = ^IMAGE_IMPORT_BY_NAME;
+  LPIMAGE_IMPORT_BY_NAME = P_IMAGE_IMPORT_BY_NAME;
+  PPIMAGE_IMPORT_BY_NAME = ^PIMAGE_IMPORT_BY_NAME;
+
+  {$push}{$packrecords 8}              // Use align 8 for the 64-bit IAT.}
+  P_IMAGE_THUNK_DATA64 = ^_IMAGE_THUNK_DATA64;
+  _IMAGE_THUNK_DATA64 =  record
+      u1 :  record
+          case longint of
+            0 : ( ForwarderString : ULONGLONG );    { PBYTE  }
+            1 : ( _Function : ULONGLONG );          { PDWORD }
+            2 : ( Ordinal : ULONGLONG );
+            3 : ( AddressOfData : ULONGLONG );      { PIMAGE_IMPORT_BY_NAME }
+          end;
+    end;
+  IMAGE_THUNK_DATA64 = _IMAGE_THUNK_DATA64;
+  PIMAGE_THUNK_DATA64 = ^IMAGE_THUNK_DATA64;
+
+  PPIMAGE_THUNK_DATA64 = ^PIMAGE_THUNK_DATA64;
+  LPIMAGE_THUNK_DATA64 = PIMAGE_THUNK_DATA64;
+  {$pop}                        // Back to 4 byte packing}
+
+  P_IMAGE_THUNK_DATA32 = ^_IMAGE_THUNK_DATA32;
+  _IMAGE_THUNK_DATA32 =  record
+      u1 :  record
+          case longint of
+            0 : ( ForwarderString : DWORD );          { PBYTE  }
+            1 : ( _Function : DWORD );                { PDWORD }
+            2 : ( Ordinal : DWORD );
+            3 : ( AddressOfData : DWORD );            { PIMAGE_IMPORT_BY_NAME }
+          end;
+    end;
+  IMAGE_THUNK_DATA32 = _IMAGE_THUNK_DATA32;
+  PIMAGE_THUNK_DATA32 = ^IMAGE_THUNK_DATA32;
+
+  PPIMAGE_THUNK_DATA32 = ^PIMAGE_THUNK_DATA32;
+  LPIMAGE_THUNK_DATA32 = PIMAGE_THUNK_DATA32;
+
+  { }
+  { Thread Local Storage }
+  { }
+
+  PIMAGE_TLS_CALLBACK = procedure (DllHandle:PVOID; Reason:DWORD; Reserved:PVOID);stdcall; {NTAPI}
+
+  P_IMAGE_TLS_DIRECTORY64 = ^_IMAGE_TLS_DIRECTORY64;
+  _IMAGE_TLS_DIRECTORY64 =  record
+      StartAddressOfRawData : ULONGLONG;
+      EndAddressOfRawData : ULONGLONG;
+      AddressOfIndex : ULONGLONG;               { PDWORD }
+      AddressOfCallBacks : ULONGLONG;           { PIMAGE_TLS_CALLBACK *; }
+      SizeOfZeroFill : DWORD;
+          case longint of
+            0 : ( Characteristics : DWORD );
+            1 : ( CharacteristicsFields:  bitpacked record
+                                  Reserved0 : 0..$FFFFF; // 5 nibbles=20 bits
+                                  Alignment : 0..$F;      // 4 bits
+                                  Reserved1 : 0..$FF;     // 8 bits
+              end );
+    end;
+  IMAGE_TLS_DIRECTORY64 = _IMAGE_TLS_DIRECTORY64;
+  PIMAGE_TLS_DIRECTORY64 = ^IMAGE_TLS_DIRECTORY64;
+
+  PPIMAGE_TLS_DIRECTORY64 = ^PIMAGE_TLS_DIRECTORY64;
+  LPIMAGE_TLS_DIRECTORY64 = PIMAGE_TLS_DIRECTORY64;
+  P_IMAGE_TLS_DIRECTORY32 = ^_IMAGE_TLS_DIRECTORY32;
+  _IMAGE_TLS_DIRECTORY32 =  record
+      StartAddressOfRawData : DWORD;
+      EndAddressOfRawData : DWORD;
+      AddressOfIndex : DWORD;                      { PDWORD }
+      AddressOfCallBacks : DWORD;                  { PIMAGE_TLS_CALLBACK * }
+      SizeOfZeroFill : DWORD;
+          case longint of
+            0 : ( Characteristics : DWORD );
+            1 : ( CharacteristicsFields : bitpacked  record
+                                 Reserved0 : 0..$FFFFF; // 5 nibbles=20 bits
+                                 Alignment : 0..$F;      // 4 bits
+                                 Reserved1 : 0..$FF;     // 8 bits
+              end );
+
+    end;
+  IMAGE_TLS_DIRECTORY32 = _IMAGE_TLS_DIRECTORY32;
+  PIMAGE_TLS_DIRECTORY32 = ^IMAGE_TLS_DIRECTORY32;
+
+
+
+  PPIMAGE_TLS_DIRECTORY32 = ^PIMAGE_TLS_DIRECTORY32;
+  LPIMAGE_TLS_DIRECTORY32 = PIMAGE_TLS_DIRECTORY32;
+
+  {$ifdef WIN64}
+
+  PIMAGE_THUNK_DATA = PIMAGE_THUNK_DATA64;
+  IMAGE_THUNK_DATA = IMAGE_THUNK_DATA64;
+
+  PPIMAGE_THUNK_DATA = ^PIMAGE_THUNK_DATA64;
+  LPIMAGE_THUNK_DATA = PIMAGE_THUNK_DATA64;
+
+  PIMAGE_TLS_DIRECTORY = ^IMAGE_TLS_DIRECTORY;
+  IMAGE_TLS_DIRECTORY = IMAGE_TLS_DIRECTORY64;
+
+  PPIMAGE_TLS_DIRECTORY = ^PIMAGE_TLS_DIRECTORY;
+  LPIMAGE_TLS_DIRECTORY = PIMAGE_TLS_DIRECTORY64;
+  {$else}
+
+  PIMAGE_THUNK_DATA = PIMAGE_THUNK_DATA32;
+  IMAGE_THUNK_DATA = IMAGE_THUNK_DATA32;
+
+  PPIMAGE_THUNK_DATA = ^PIMAGE_THUNK_DATA;
+  LPIMAGE_THUNK_DATA = PIMAGE_THUNK_DATA32;
+  PIMAGE_TLS_DIRECTORY = ^IMAGE_TLS_DIRECTORY;
+  IMAGE_TLS_DIRECTORY = IMAGE_TLS_DIRECTORY32;
+
+  PPIMAGE_TLS_DIRECTORY = ^PIMAGE_TLS_DIRECTORY;
+  LPIMAGE_TLS_DIRECTORY = PIMAGE_TLS_DIRECTORY32;
+  {$endif}
+
+  P_IMAGE_IMPORT_DESCRIPTOR = ^_IMAGE_IMPORT_DESCRIPTOR;
+  _IMAGE_IMPORT_DESCRIPTOR =  record
+          case longint of
+            0 : ( Characteristics : DWORD );     { 0 for terminating null import descriptor }
+            1 : ( OriginalFirstThunk : DWORD;    { RVA to original unbound IAT (PIMAGE_THUNK_DATA) }
+                  TimeDateStamp : DWORD;         { 0 if not bound, }
+                                                 // -1 if bound, and real date\time stamp
+                                                 //     in IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT (new BIND)
+                                                 // O.W. date/time stamp of DLL bound to (Old BIND)
+                  ForwarderChain : DWORD;        // -1 if no forwarders
+                  Name : DWORD;
+                  FirstThunk : DWORD;            // RVA to IAT (if bound this IAT has actual addresses)
+                );  
+    end;
+  IMAGE_IMPORT_DESCRIPTOR = _IMAGE_IMPORT_DESCRIPTOR;
+  PIMAGE_IMPORT_DESCRIPTOR = ^IMAGE_IMPORT_DESCRIPTOR   {UNALIGNED  }     ;
+
+
+  PPIMAGE_IMPORT_DESCRIPTOR = ^PIMAGE_IMPORT_DESCRIPTOR;
+  LPIMAGE_IMPORT_DESCRIPTOR = PIMAGE_IMPORT_DESCRIPTOR;
+  { }
+  { New format import descriptors pointed to by DataDirectory[ IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT ] }
+  { }
+
+
+  P_IMAGE_BOUND_IMPORT_DESCRIPTOR = ^_IMAGE_BOUND_IMPORT_DESCRIPTOR;
+  _IMAGE_BOUND_IMPORT_DESCRIPTOR =  record
+      TimeDateStamp : DWORD;
+      OffsetModuleName : WORD;
+      NumberOfModuleForwarderRefs : WORD;
+      { Array of zero or more IMAGE_BOUND_FORWARDER_REF follows }
+    end;
+
+  IMAGE_BOUND_IMPORT_DESCRIPTOR = _IMAGE_BOUND_IMPORT_DESCRIPTOR;
+  PIMAGE_BOUND_IMPORT_DESCRIPTOR = ^IMAGE_BOUND_IMPORT_DESCRIPTOR;
+  LPIMAGE_BOUND_IMPORT_DESCRIPTOR = P_IMAGE_BOUND_IMPORT_DESCRIPTOR;
+  PPIMAGE_BOUND_IMPORT_DESCRIPTOR = ^PIMAGE_BOUND_IMPORT_DESCRIPTOR;
+
+  P_IMAGE_BOUND_FORWARDER_REF = ^_IMAGE_BOUND_FORWARDER_REF;
+  _IMAGE_BOUND_FORWARDER_REF =  record
+      TimeDateStamp : DWORD;
+      OffsetModuleName : WORD;
+      Reserved : WORD;
+    end;
+  IMAGE_BOUND_FORWARDER_REF = _IMAGE_BOUND_FORWARDER_REF;
+  PIMAGE_BOUND_FORWARDER_REF = ^IMAGE_BOUND_FORWARDER_REF;
+  LPIMAGE_BOUND_FORWARDER_REF = P_IMAGE_BOUND_FORWARDER_REF;
+  PPIMAGE_BOUND_FORWARDER_REF = ^PIMAGE_BOUND_FORWARDER_REF;
+  { Delay load version 2 }
+
+  _IMAGE_DELAYLOAD_DESCRIPTOR = record
+        case longint of
+        0: (AllAttributes :Dword;
+            DllNameRVA,                       // RVA to the name of the target library (NULL-terminate ASCII string)
+            ModuleHandleRVA,                  // RVA to the HMODULE caching location (PHMODULE)
+            ImportAddressTableRVA,            // RVA to the start of the IAT (PIMAGE_THUNK_DATA)
+            ImportNameTableRVA,               // RVA to the start of the name table (PIMAGE_THUNK_DATA::AddressOfData)
+            BoundImportAddressTableRVA,       // RVA to an optional bound IAT
+            UnloadInformationTableRVA,        // RVA to an optional unload info table
+            TimeDateStamp            : DWORD; // 0 if not bound,
+                                            // Otherwise, date/time of the target DLL
+         );
+        1: (Attributes:bitpacked record
+             rvabased:0..1;  {1 bits}                 // Delay load version 2
+             ReservedAttributes: 0..$7FFFFFF; {31 bits}
+             end;)
+     end;
+
+  IMAGE_DELAYLOAD_DESCRIPTOR= _IMAGE_DELAYLOAD_DESCRIPTOR;
+  PIMAGE_DELAYLOAD_DESCRIPTOR= ^_IMAGE_DELAYLOAD_DESCRIPTOR;
+  PCIMAGE_DELAYLOAD_DESCRIPTOR= PIMAGE_DELAYLOAD_DESCRIPTOR;
+{$pop}
+
  tagCOMBOBOXINFO = record
     cbSize: DWORD;
     rcItem: TRect;