ntdll: Randomize security cookie when available (try 2)

André Hentschel nerv at dawncrow.de
Tue Jun 23 13:57:32 CDT 2015


---
 dlls/ntdll/tests/generated.c | 396 +++++++++++++++++++++++++++++--------------
 dlls/ntdll/virtual.c         |  18 ++
 include/winnt.h              |  35 +++-
 tools/winapi/tests.dat       |   2 +
 4 files changed, 324 insertions(+), 127 deletions(-)

diff --git a/dlls/ntdll/tests/generated.c b/dlls/ntdll/tests/generated.c
index 2212dc8..b099a5c 100644
--- a/dlls/ntdll/tests/generated.c
+++ b/dlls/ntdll/tests/generated.c
@@ -839,68 +839,142 @@ static void test_pack_IMAGE_LINENUMBER(void)
 static void test_pack_IMAGE_LOAD_CONFIG_DIRECTORY(void)
 {
     /* IMAGE_LOAD_CONFIG_DIRECTORY */
-    TEST_TYPE_SIZE   (IMAGE_LOAD_CONFIG_DIRECTORY, 88)
+    TEST_TYPE_SIZE   (IMAGE_LOAD_CONFIG_DIRECTORY, 112)
     TEST_TYPE_ALIGN  (IMAGE_LOAD_CONFIG_DIRECTORY, 8)
-    TEST_FIELD_SIZE  (IMAGE_LOAD_CONFIG_DIRECTORY, Size, 4)
-    TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY, Size, 4)
-    TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY, Size, 0)
-    TEST_FIELD_SIZE  (IMAGE_LOAD_CONFIG_DIRECTORY, TimeDateStamp, 4)
-    TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY, TimeDateStamp, 4)
-    TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY, TimeDateStamp, 4)
-    TEST_FIELD_SIZE  (IMAGE_LOAD_CONFIG_DIRECTORY, MajorVersion, 2)
-    TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY, MajorVersion, 2)
-    TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY, MajorVersion, 8)
-    TEST_FIELD_SIZE  (IMAGE_LOAD_CONFIG_DIRECTORY, MinorVersion, 2)
-    TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY, MinorVersion, 2)
-    TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY, MinorVersion, 10)
-    TEST_FIELD_SIZE  (IMAGE_LOAD_CONFIG_DIRECTORY, GlobalFlagsClear, 4)
-    TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY, GlobalFlagsClear, 4)
-    TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY, GlobalFlagsClear, 12)
-    TEST_FIELD_SIZE  (IMAGE_LOAD_CONFIG_DIRECTORY, GlobalFlagsSet, 4)
-    TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY, GlobalFlagsSet, 4)
-    TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY, GlobalFlagsSet, 16)
-    TEST_FIELD_SIZE  (IMAGE_LOAD_CONFIG_DIRECTORY, CriticalSectionDefaultTimeout, 4)
-    TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY, CriticalSectionDefaultTimeout, 4)
-    TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY, CriticalSectionDefaultTimeout, 20)
-    TEST_FIELD_SIZE  (IMAGE_LOAD_CONFIG_DIRECTORY, DeCommitFreeBlockThreshold, 4)
-    TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY, DeCommitFreeBlockThreshold, 4)
-    TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY, DeCommitFreeBlockThreshold, 24)
-    TEST_FIELD_SIZE  (IMAGE_LOAD_CONFIG_DIRECTORY, DeCommitTotalFreeThreshold, 4)
-    TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY, DeCommitTotalFreeThreshold, 4)
-    TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY, DeCommitTotalFreeThreshold, 28)
-    TEST_FIELD_SIZE  (IMAGE_LOAD_CONFIG_DIRECTORY, LockPrefixTable, 8)
-    TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY, LockPrefixTable, 8)
-    TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY, LockPrefixTable, 32)
-    TEST_FIELD_SIZE  (IMAGE_LOAD_CONFIG_DIRECTORY, MaximumAllocationSize, 4)
-    TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY, MaximumAllocationSize, 4)
-    TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY, MaximumAllocationSize, 40)
-    TEST_FIELD_SIZE  (IMAGE_LOAD_CONFIG_DIRECTORY, VirtualMemoryThreshold, 4)
-    TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY, VirtualMemoryThreshold, 4)
-    TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY, VirtualMemoryThreshold, 44)
-    TEST_FIELD_SIZE  (IMAGE_LOAD_CONFIG_DIRECTORY, ProcessHeapFlags, 4)
-    TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY, ProcessHeapFlags, 4)
-    TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY, ProcessHeapFlags, 48)
-    TEST_FIELD_SIZE  (IMAGE_LOAD_CONFIG_DIRECTORY, ProcessAffinityMask, 4)
-    TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY, ProcessAffinityMask, 4)
-    TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY, ProcessAffinityMask, 52)
-    TEST_FIELD_SIZE  (IMAGE_LOAD_CONFIG_DIRECTORY, CSDVersion, 2)
-    TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY, CSDVersion, 2)
-    TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY, CSDVersion, 56)
-    TEST_FIELD_SIZE  (IMAGE_LOAD_CONFIG_DIRECTORY, Reserved1, 2)
-    TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY, Reserved1, 2)
-    TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY, Reserved1, 58)
-    TEST_FIELD_SIZE  (IMAGE_LOAD_CONFIG_DIRECTORY, EditList, 8)
-    TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY, EditList, 8)
-    TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY, EditList, 64)
-    TEST_FIELD_SIZE  (IMAGE_LOAD_CONFIG_DIRECTORY, SecurityCookie, 4)
-    TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY, SecurityCookie, 4)
-    TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY, SecurityCookie, 72)
-    TEST_FIELD_SIZE  (IMAGE_LOAD_CONFIG_DIRECTORY, SEHandlerTable, 4)
-    TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY, SEHandlerTable, 4)
-    TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY, SEHandlerTable, 76)
-    TEST_FIELD_SIZE  (IMAGE_LOAD_CONFIG_DIRECTORY, SEHandlerCount, 4)
-    TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY, SEHandlerCount, 4)
-    TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY, SEHandlerCount, 80)
+}
+
+static void test_pack_IMAGE_LOAD_CONFIG_DIRECTORY32(void)
+{
+    /* IMAGE_LOAD_CONFIG_DIRECTORY32 */
+    TEST_TYPE_SIZE   (IMAGE_LOAD_CONFIG_DIRECTORY32, 88)
+    TEST_TYPE_ALIGN  (IMAGE_LOAD_CONFIG_DIRECTORY32, 8)
+    TEST_FIELD_SIZE  (IMAGE_LOAD_CONFIG_DIRECTORY32, Size, 4)
+    TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY32, Size, 4)
+    TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY32, Size, 0)
+    TEST_FIELD_SIZE  (IMAGE_LOAD_CONFIG_DIRECTORY32, TimeDateStamp, 4)
+    TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY32, TimeDateStamp, 4)
+    TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY32, TimeDateStamp, 4)
+    TEST_FIELD_SIZE  (IMAGE_LOAD_CONFIG_DIRECTORY32, MajorVersion, 2)
+    TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY32, MajorVersion, 2)
+    TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY32, MajorVersion, 8)
+    TEST_FIELD_SIZE  (IMAGE_LOAD_CONFIG_DIRECTORY32, MinorVersion, 2)
+    TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY32, MinorVersion, 2)
+    TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY32, MinorVersion, 10)
+    TEST_FIELD_SIZE  (IMAGE_LOAD_CONFIG_DIRECTORY32, GlobalFlagsClear, 4)
+    TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY32, GlobalFlagsClear, 4)
+    TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY32, GlobalFlagsClear, 12)
+    TEST_FIELD_SIZE  (IMAGE_LOAD_CONFIG_DIRECTORY32, GlobalFlagsSet, 4)
+    TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY32, GlobalFlagsSet, 4)
+    TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY32, GlobalFlagsSet, 16)
+    TEST_FIELD_SIZE  (IMAGE_LOAD_CONFIG_DIRECTORY32, CriticalSectionDefaultTimeout, 4)
+    TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY32, CriticalSectionDefaultTimeout, 4)
+    TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY32, CriticalSectionDefaultTimeout, 20)
+    TEST_FIELD_SIZE  (IMAGE_LOAD_CONFIG_DIRECTORY32, DeCommitFreeBlockThreshold, 4)
+    TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY32, DeCommitFreeBlockThreshold, 4)
+    TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY32, DeCommitFreeBlockThreshold, 24)
+    TEST_FIELD_SIZE  (IMAGE_LOAD_CONFIG_DIRECTORY32, DeCommitTotalFreeThreshold, 4)
+    TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY32, DeCommitTotalFreeThreshold, 4)
+    TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY32, DeCommitTotalFreeThreshold, 28)
+    TEST_FIELD_SIZE  (IMAGE_LOAD_CONFIG_DIRECTORY32, LockPrefixTable, 8)
+    TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY32, LockPrefixTable, 8)
+    TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY32, LockPrefixTable, 32)
+    TEST_FIELD_SIZE  (IMAGE_LOAD_CONFIG_DIRECTORY32, MaximumAllocationSize, 4)
+    TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY32, MaximumAllocationSize, 4)
+    TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY32, MaximumAllocationSize, 40)
+    TEST_FIELD_SIZE  (IMAGE_LOAD_CONFIG_DIRECTORY32, VirtualMemoryThreshold, 4)
+    TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY32, VirtualMemoryThreshold, 4)
+    TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY32, VirtualMemoryThreshold, 44)
+    TEST_FIELD_SIZE  (IMAGE_LOAD_CONFIG_DIRECTORY32, ProcessHeapFlags, 4)
+    TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY32, ProcessHeapFlags, 4)
+    TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY32, ProcessHeapFlags, 48)
+    TEST_FIELD_SIZE  (IMAGE_LOAD_CONFIG_DIRECTORY32, ProcessAffinityMask, 4)
+    TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY32, ProcessAffinityMask, 4)
+    TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY32, ProcessAffinityMask, 52)
+    TEST_FIELD_SIZE  (IMAGE_LOAD_CONFIG_DIRECTORY32, CSDVersion, 2)
+    TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY32, CSDVersion, 2)
+    TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY32, CSDVersion, 56)
+    TEST_FIELD_SIZE  (IMAGE_LOAD_CONFIG_DIRECTORY32, Reserved1, 2)
+    TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY32, Reserved1, 2)
+    TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY32, Reserved1, 58)
+    TEST_FIELD_SIZE  (IMAGE_LOAD_CONFIG_DIRECTORY32, EditList, 8)
+    TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY32, EditList, 8)
+    TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY32, EditList, 64)
+    TEST_FIELD_SIZE  (IMAGE_LOAD_CONFIG_DIRECTORY32, SecurityCookie, 4)
+    TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY32, SecurityCookie, 4)
+    TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY32, SecurityCookie, 72)
+    TEST_FIELD_SIZE  (IMAGE_LOAD_CONFIG_DIRECTORY32, SEHandlerTable, 4)
+    TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY32, SEHandlerTable, 4)
+    TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY32, SEHandlerTable, 76)
+    TEST_FIELD_SIZE  (IMAGE_LOAD_CONFIG_DIRECTORY32, SEHandlerCount, 4)
+    TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY32, SEHandlerCount, 4)
+    TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY32, SEHandlerCount, 80)
+}
+
+static void test_pack_IMAGE_LOAD_CONFIG_DIRECTORY64(void)
+{
+    /* IMAGE_LOAD_CONFIG_DIRECTORY64 */
+    TEST_TYPE_SIZE   (IMAGE_LOAD_CONFIG_DIRECTORY64, 112)
+    TEST_TYPE_ALIGN  (IMAGE_LOAD_CONFIG_DIRECTORY64, 8)
+    TEST_FIELD_SIZE  (IMAGE_LOAD_CONFIG_DIRECTORY64, Size, 4)
+    TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY64, Size, 4)
+    TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY64, Size, 0)
+    TEST_FIELD_SIZE  (IMAGE_LOAD_CONFIG_DIRECTORY64, TimeDateStamp, 4)
+    TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY64, TimeDateStamp, 4)
+    TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY64, TimeDateStamp, 4)
+    TEST_FIELD_SIZE  (IMAGE_LOAD_CONFIG_DIRECTORY64, MajorVersion, 2)
+    TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY64, MajorVersion, 2)
+    TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY64, MajorVersion, 8)
+    TEST_FIELD_SIZE  (IMAGE_LOAD_CONFIG_DIRECTORY64, MinorVersion, 2)
+    TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY64, MinorVersion, 2)
+    TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY64, MinorVersion, 10)
+    TEST_FIELD_SIZE  (IMAGE_LOAD_CONFIG_DIRECTORY64, GlobalFlagsClear, 4)
+    TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY64, GlobalFlagsClear, 4)
+    TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY64, GlobalFlagsClear, 12)
+    TEST_FIELD_SIZE  (IMAGE_LOAD_CONFIG_DIRECTORY64, GlobalFlagsSet, 4)
+    TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY64, GlobalFlagsSet, 4)
+    TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY64, GlobalFlagsSet, 16)
+    TEST_FIELD_SIZE  (IMAGE_LOAD_CONFIG_DIRECTORY64, CriticalSectionDefaultTimeout, 4)
+    TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY64, CriticalSectionDefaultTimeout, 4)
+    TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY64, CriticalSectionDefaultTimeout, 20)
+    TEST_FIELD_SIZE  (IMAGE_LOAD_CONFIG_DIRECTORY64, DeCommitFreeBlockThreshold, 8)
+    TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY64, DeCommitFreeBlockThreshold, 8)
+    TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY64, DeCommitFreeBlockThreshold, 24)
+    TEST_FIELD_SIZE  (IMAGE_LOAD_CONFIG_DIRECTORY64, DeCommitTotalFreeThreshold, 8)
+    TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY64, DeCommitTotalFreeThreshold, 8)
+    TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY64, DeCommitTotalFreeThreshold, 32)
+    TEST_FIELD_SIZE  (IMAGE_LOAD_CONFIG_DIRECTORY64, LockPrefixTable, 8)
+    TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY64, LockPrefixTable, 8)
+    TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY64, LockPrefixTable, 40)
+    TEST_FIELD_SIZE  (IMAGE_LOAD_CONFIG_DIRECTORY64, MaximumAllocationSize, 8)
+    TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY64, MaximumAllocationSize, 8)
+    TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY64, MaximumAllocationSize, 48)
+    TEST_FIELD_SIZE  (IMAGE_LOAD_CONFIG_DIRECTORY64, VirtualMemoryThreshold, 8)
+    TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY64, VirtualMemoryThreshold, 8)
+    TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY64, VirtualMemoryThreshold, 56)
+    TEST_FIELD_SIZE  (IMAGE_LOAD_CONFIG_DIRECTORY64, ProcessAffinityMask, 8)
+    TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY64, ProcessAffinityMask, 8)
+    TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY64, ProcessAffinityMask, 64)
+    TEST_FIELD_SIZE  (IMAGE_LOAD_CONFIG_DIRECTORY64, ProcessHeapFlags, 4)
+    TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY64, ProcessHeapFlags, 4)
+    TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY64, ProcessHeapFlags, 72)
+    TEST_FIELD_SIZE  (IMAGE_LOAD_CONFIG_DIRECTORY64, CSDVersion, 2)
+    TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY64, CSDVersion, 2)
+    TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY64, CSDVersion, 76)
+    TEST_FIELD_SIZE  (IMAGE_LOAD_CONFIG_DIRECTORY64, Reserved1, 2)
+    TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY64, Reserved1, 2)
+    TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY64, Reserved1, 78)
+    TEST_FIELD_SIZE  (IMAGE_LOAD_CONFIG_DIRECTORY64, EditList, 8)
+    TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY64, EditList, 8)
+    TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY64, EditList, 80)
+    TEST_FIELD_SIZE  (IMAGE_LOAD_CONFIG_DIRECTORY64, SecurityCookie, 8)
+    TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY64, SecurityCookie, 8)
+    TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY64, SecurityCookie, 88)
+    TEST_FIELD_SIZE  (IMAGE_LOAD_CONFIG_DIRECTORY64, SEHandlerTable, 8)
+    TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY64, SEHandlerTable, 8)
+    TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY64, SEHandlerTable, 96)
+    TEST_FIELD_SIZE  (IMAGE_LOAD_CONFIG_DIRECTORY64, SEHandlerCount, 8)
+    TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY64, SEHandlerCount, 8)
+    TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY64, SEHandlerCount, 104)
 }
 
 static void test_pack_IMAGE_NT_HEADERS(void)
@@ -2105,8 +2179,6 @@ static void test_pack_PIMAGE_LOAD_CONFIG_DIRECTORY(void)
     /* PIMAGE_LOAD_CONFIG_DIRECTORY */
     TEST_TYPE_SIZE   (PIMAGE_LOAD_CONFIG_DIRECTORY, 8)
     TEST_TYPE_ALIGN  (PIMAGE_LOAD_CONFIG_DIRECTORY, 8)
-    TEST_TARGET_SIZE (PIMAGE_LOAD_CONFIG_DIRECTORY, 88)
-    TEST_TARGET_ALIGN(PIMAGE_LOAD_CONFIG_DIRECTORY, 8)
 }
 
 static void test_pack_PIMAGE_NT_HEADERS(void)
@@ -4186,66 +4258,140 @@ static void test_pack_IMAGE_LOAD_CONFIG_DIRECTORY(void)
     /* IMAGE_LOAD_CONFIG_DIRECTORY */
     TEST_TYPE_SIZE   (IMAGE_LOAD_CONFIG_DIRECTORY, 72)
     TEST_TYPE_ALIGN  (IMAGE_LOAD_CONFIG_DIRECTORY, 4)
-    TEST_FIELD_SIZE  (IMAGE_LOAD_CONFIG_DIRECTORY, Size, 4)
-    TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY, Size, 4)
-    TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY, Size, 0)
-    TEST_FIELD_SIZE  (IMAGE_LOAD_CONFIG_DIRECTORY, TimeDateStamp, 4)
-    TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY, TimeDateStamp, 4)
-    TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY, TimeDateStamp, 4)
-    TEST_FIELD_SIZE  (IMAGE_LOAD_CONFIG_DIRECTORY, MajorVersion, 2)
-    TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY, MajorVersion, 2)
-    TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY, MajorVersion, 8)
-    TEST_FIELD_SIZE  (IMAGE_LOAD_CONFIG_DIRECTORY, MinorVersion, 2)
-    TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY, MinorVersion, 2)
-    TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY, MinorVersion, 10)
-    TEST_FIELD_SIZE  (IMAGE_LOAD_CONFIG_DIRECTORY, GlobalFlagsClear, 4)
-    TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY, GlobalFlagsClear, 4)
-    TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY, GlobalFlagsClear, 12)
-    TEST_FIELD_SIZE  (IMAGE_LOAD_CONFIG_DIRECTORY, GlobalFlagsSet, 4)
-    TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY, GlobalFlagsSet, 4)
-    TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY, GlobalFlagsSet, 16)
-    TEST_FIELD_SIZE  (IMAGE_LOAD_CONFIG_DIRECTORY, CriticalSectionDefaultTimeout, 4)
-    TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY, CriticalSectionDefaultTimeout, 4)
-    TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY, CriticalSectionDefaultTimeout, 20)
-    TEST_FIELD_SIZE  (IMAGE_LOAD_CONFIG_DIRECTORY, DeCommitFreeBlockThreshold, 4)
-    TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY, DeCommitFreeBlockThreshold, 4)
-    TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY, DeCommitFreeBlockThreshold, 24)
-    TEST_FIELD_SIZE  (IMAGE_LOAD_CONFIG_DIRECTORY, DeCommitTotalFreeThreshold, 4)
-    TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY, DeCommitTotalFreeThreshold, 4)
-    TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY, DeCommitTotalFreeThreshold, 28)
-    TEST_FIELD_SIZE  (IMAGE_LOAD_CONFIG_DIRECTORY, LockPrefixTable, 4)
-    TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY, LockPrefixTable, 4)
-    TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY, LockPrefixTable, 32)
-    TEST_FIELD_SIZE  (IMAGE_LOAD_CONFIG_DIRECTORY, MaximumAllocationSize, 4)
-    TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY, MaximumAllocationSize, 4)
-    TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY, MaximumAllocationSize, 36)
-    TEST_FIELD_SIZE  (IMAGE_LOAD_CONFIG_DIRECTORY, VirtualMemoryThreshold, 4)
-    TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY, VirtualMemoryThreshold, 4)
-    TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY, VirtualMemoryThreshold, 40)
-    TEST_FIELD_SIZE  (IMAGE_LOAD_CONFIG_DIRECTORY, ProcessHeapFlags, 4)
-    TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY, ProcessHeapFlags, 4)
-    TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY, ProcessHeapFlags, 44)
-    TEST_FIELD_SIZE  (IMAGE_LOAD_CONFIG_DIRECTORY, ProcessAffinityMask, 4)
-    TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY, ProcessAffinityMask, 4)
-    TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY, ProcessAffinityMask, 48)
-    TEST_FIELD_SIZE  (IMAGE_LOAD_CONFIG_DIRECTORY, CSDVersion, 2)
-    TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY, CSDVersion, 2)
-    TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY, CSDVersion, 52)
-    TEST_FIELD_SIZE  (IMAGE_LOAD_CONFIG_DIRECTORY, Reserved1, 2)
-    TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY, Reserved1, 2)
-    TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY, Reserved1, 54)
-    TEST_FIELD_SIZE  (IMAGE_LOAD_CONFIG_DIRECTORY, EditList, 4)
-    TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY, EditList, 4)
-    TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY, EditList, 56)
-    TEST_FIELD_SIZE  (IMAGE_LOAD_CONFIG_DIRECTORY, SecurityCookie, 4)
-    TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY, SecurityCookie, 4)
-    TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY, SecurityCookie, 60)
-    TEST_FIELD_SIZE  (IMAGE_LOAD_CONFIG_DIRECTORY, SEHandlerTable, 4)
-    TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY, SEHandlerTable, 4)
-    TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY, SEHandlerTable, 64)
-    TEST_FIELD_SIZE  (IMAGE_LOAD_CONFIG_DIRECTORY, SEHandlerCount, 4)
-    TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY, SEHandlerCount, 4)
-    TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY, SEHandlerCount, 68)
+}
+
+static void test_pack_IMAGE_LOAD_CONFIG_DIRECTORY32(void)
+{
+    /* IMAGE_LOAD_CONFIG_DIRECTORY32 */
+    TEST_TYPE_SIZE   (IMAGE_LOAD_CONFIG_DIRECTORY32, 72)
+    TEST_TYPE_ALIGN  (IMAGE_LOAD_CONFIG_DIRECTORY32, 4)
+    TEST_FIELD_SIZE  (IMAGE_LOAD_CONFIG_DIRECTORY32, Size, 4)
+    TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY32, Size, 4)
+    TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY32, Size, 0)
+    TEST_FIELD_SIZE  (IMAGE_LOAD_CONFIG_DIRECTORY32, TimeDateStamp, 4)
+    TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY32, TimeDateStamp, 4)
+    TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY32, TimeDateStamp, 4)
+    TEST_FIELD_SIZE  (IMAGE_LOAD_CONFIG_DIRECTORY32, MajorVersion, 2)
+    TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY32, MajorVersion, 2)
+    TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY32, MajorVersion, 8)
+    TEST_FIELD_SIZE  (IMAGE_LOAD_CONFIG_DIRECTORY32, MinorVersion, 2)
+    TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY32, MinorVersion, 2)
+    TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY32, MinorVersion, 10)
+    TEST_FIELD_SIZE  (IMAGE_LOAD_CONFIG_DIRECTORY32, GlobalFlagsClear, 4)
+    TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY32, GlobalFlagsClear, 4)
+    TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY32, GlobalFlagsClear, 12)
+    TEST_FIELD_SIZE  (IMAGE_LOAD_CONFIG_DIRECTORY32, GlobalFlagsSet, 4)
+    TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY32, GlobalFlagsSet, 4)
+    TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY32, GlobalFlagsSet, 16)
+    TEST_FIELD_SIZE  (IMAGE_LOAD_CONFIG_DIRECTORY32, CriticalSectionDefaultTimeout, 4)
+    TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY32, CriticalSectionDefaultTimeout, 4)
+    TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY32, CriticalSectionDefaultTimeout, 20)
+    TEST_FIELD_SIZE  (IMAGE_LOAD_CONFIG_DIRECTORY32, DeCommitFreeBlockThreshold, 4)
+    TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY32, DeCommitFreeBlockThreshold, 4)
+    TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY32, DeCommitFreeBlockThreshold, 24)
+    TEST_FIELD_SIZE  (IMAGE_LOAD_CONFIG_DIRECTORY32, DeCommitTotalFreeThreshold, 4)
+    TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY32, DeCommitTotalFreeThreshold, 4)
+    TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY32, DeCommitTotalFreeThreshold, 28)
+    TEST_FIELD_SIZE  (IMAGE_LOAD_CONFIG_DIRECTORY32, LockPrefixTable, 4)
+    TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY32, LockPrefixTable, 4)
+    TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY32, LockPrefixTable, 32)
+    TEST_FIELD_SIZE  (IMAGE_LOAD_CONFIG_DIRECTORY32, MaximumAllocationSize, 4)
+    TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY32, MaximumAllocationSize, 4)
+    TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY32, MaximumAllocationSize, 36)
+    TEST_FIELD_SIZE  (IMAGE_LOAD_CONFIG_DIRECTORY32, VirtualMemoryThreshold, 4)
+    TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY32, VirtualMemoryThreshold, 4)
+    TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY32, VirtualMemoryThreshold, 40)
+    TEST_FIELD_SIZE  (IMAGE_LOAD_CONFIG_DIRECTORY32, ProcessHeapFlags, 4)
+    TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY32, ProcessHeapFlags, 4)
+    TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY32, ProcessHeapFlags, 44)
+    TEST_FIELD_SIZE  (IMAGE_LOAD_CONFIG_DIRECTORY32, ProcessAffinityMask, 4)
+    TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY32, ProcessAffinityMask, 4)
+    TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY32, ProcessAffinityMask, 48)
+    TEST_FIELD_SIZE  (IMAGE_LOAD_CONFIG_DIRECTORY32, CSDVersion, 2)
+    TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY32, CSDVersion, 2)
+    TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY32, CSDVersion, 52)
+    TEST_FIELD_SIZE  (IMAGE_LOAD_CONFIG_DIRECTORY32, Reserved1, 2)
+    TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY32, Reserved1, 2)
+    TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY32, Reserved1, 54)
+    TEST_FIELD_SIZE  (IMAGE_LOAD_CONFIG_DIRECTORY32, EditList, 4)
+    TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY32, EditList, 4)
+    TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY32, EditList, 56)
+    TEST_FIELD_SIZE  (IMAGE_LOAD_CONFIG_DIRECTORY32, SecurityCookie, 4)
+    TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY32, SecurityCookie, 4)
+    TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY32, SecurityCookie, 60)
+    TEST_FIELD_SIZE  (IMAGE_LOAD_CONFIG_DIRECTORY32, SEHandlerTable, 4)
+    TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY32, SEHandlerTable, 4)
+    TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY32, SEHandlerTable, 64)
+    TEST_FIELD_SIZE  (IMAGE_LOAD_CONFIG_DIRECTORY32, SEHandlerCount, 4)
+    TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY32, SEHandlerCount, 4)
+    TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY32, SEHandlerCount, 68)
+}
+
+static void test_pack_IMAGE_LOAD_CONFIG_DIRECTORY64(void)
+{
+    /* IMAGE_LOAD_CONFIG_DIRECTORY64 */
+    TEST_TYPE_SIZE   (IMAGE_LOAD_CONFIG_DIRECTORY64, 112)
+    TEST_TYPE_ALIGN  (IMAGE_LOAD_CONFIG_DIRECTORY64, 8)
+    TEST_FIELD_SIZE  (IMAGE_LOAD_CONFIG_DIRECTORY64, Size, 4)
+    TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY64, Size, 4)
+    TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY64, Size, 0)
+    TEST_FIELD_SIZE  (IMAGE_LOAD_CONFIG_DIRECTORY64, TimeDateStamp, 4)
+    TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY64, TimeDateStamp, 4)
+    TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY64, TimeDateStamp, 4)
+    TEST_FIELD_SIZE  (IMAGE_LOAD_CONFIG_DIRECTORY64, MajorVersion, 2)
+    TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY64, MajorVersion, 2)
+    TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY64, MajorVersion, 8)
+    TEST_FIELD_SIZE  (IMAGE_LOAD_CONFIG_DIRECTORY64, MinorVersion, 2)
+    TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY64, MinorVersion, 2)
+    TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY64, MinorVersion, 10)
+    TEST_FIELD_SIZE  (IMAGE_LOAD_CONFIG_DIRECTORY64, GlobalFlagsClear, 4)
+    TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY64, GlobalFlagsClear, 4)
+    TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY64, GlobalFlagsClear, 12)
+    TEST_FIELD_SIZE  (IMAGE_LOAD_CONFIG_DIRECTORY64, GlobalFlagsSet, 4)
+    TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY64, GlobalFlagsSet, 4)
+    TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY64, GlobalFlagsSet, 16)
+    TEST_FIELD_SIZE  (IMAGE_LOAD_CONFIG_DIRECTORY64, CriticalSectionDefaultTimeout, 4)
+    TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY64, CriticalSectionDefaultTimeout, 4)
+    TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY64, CriticalSectionDefaultTimeout, 20)
+    TEST_FIELD_SIZE  (IMAGE_LOAD_CONFIG_DIRECTORY64, DeCommitFreeBlockThreshold, 8)
+    TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY64, DeCommitFreeBlockThreshold, 8)
+    TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY64, DeCommitFreeBlockThreshold, 24)
+    TEST_FIELD_SIZE  (IMAGE_LOAD_CONFIG_DIRECTORY64, DeCommitTotalFreeThreshold, 8)
+    TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY64, DeCommitTotalFreeThreshold, 8)
+    TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY64, DeCommitTotalFreeThreshold, 32)
+    TEST_FIELD_SIZE  (IMAGE_LOAD_CONFIG_DIRECTORY64, LockPrefixTable, 8)
+    TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY64, LockPrefixTable, 8)
+    TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY64, LockPrefixTable, 40)
+    TEST_FIELD_SIZE  (IMAGE_LOAD_CONFIG_DIRECTORY64, MaximumAllocationSize, 8)
+    TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY64, MaximumAllocationSize, 8)
+    TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY64, MaximumAllocationSize, 48)
+    TEST_FIELD_SIZE  (IMAGE_LOAD_CONFIG_DIRECTORY64, VirtualMemoryThreshold, 8)
+    TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY64, VirtualMemoryThreshold, 8)
+    TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY64, VirtualMemoryThreshold, 56)
+    TEST_FIELD_SIZE  (IMAGE_LOAD_CONFIG_DIRECTORY64, ProcessAffinityMask, 8)
+    TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY64, ProcessAffinityMask, 8)
+    TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY64, ProcessAffinityMask, 64)
+    TEST_FIELD_SIZE  (IMAGE_LOAD_CONFIG_DIRECTORY64, ProcessHeapFlags, 4)
+    TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY64, ProcessHeapFlags, 4)
+    TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY64, ProcessHeapFlags, 72)
+    TEST_FIELD_SIZE  (IMAGE_LOAD_CONFIG_DIRECTORY64, CSDVersion, 2)
+    TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY64, CSDVersion, 2)
+    TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY64, CSDVersion, 76)
+    TEST_FIELD_SIZE  (IMAGE_LOAD_CONFIG_DIRECTORY64, Reserved1, 2)
+    TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY64, Reserved1, 2)
+    TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY64, Reserved1, 78)
+    TEST_FIELD_SIZE  (IMAGE_LOAD_CONFIG_DIRECTORY64, EditList, 8)
+    TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY64, EditList, 8)
+    TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY64, EditList, 80)
+    TEST_FIELD_SIZE  (IMAGE_LOAD_CONFIG_DIRECTORY64, SecurityCookie, 8)
+    TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY64, SecurityCookie, 8)
+    TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY64, SecurityCookie, 88)
+    TEST_FIELD_SIZE  (IMAGE_LOAD_CONFIG_DIRECTORY64, SEHandlerTable, 8)
+    TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY64, SEHandlerTable, 8)
+    TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY64, SEHandlerTable, 96)
+    TEST_FIELD_SIZE  (IMAGE_LOAD_CONFIG_DIRECTORY64, SEHandlerCount, 8)
+    TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY64, SEHandlerCount, 8)
+    TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY64, SEHandlerCount, 104)
 }
 
 static void test_pack_IMAGE_NT_HEADERS(void)
@@ -5450,8 +5596,6 @@ static void test_pack_PIMAGE_LOAD_CONFIG_DIRECTORY(void)
     /* PIMAGE_LOAD_CONFIG_DIRECTORY */
     TEST_TYPE_SIZE   (PIMAGE_LOAD_CONFIG_DIRECTORY, 4)
     TEST_TYPE_ALIGN  (PIMAGE_LOAD_CONFIG_DIRECTORY, 4)
-    TEST_TARGET_SIZE (PIMAGE_LOAD_CONFIG_DIRECTORY, 72)
-    TEST_TARGET_ALIGN(PIMAGE_LOAD_CONFIG_DIRECTORY, 4)
 }
 
 static void test_pack_PIMAGE_NT_HEADERS(void)
@@ -6822,6 +6966,8 @@ static void test_pack(void)
     test_pack_IMAGE_IMPORT_DESCRIPTOR();
     test_pack_IMAGE_LINENUMBER();
     test_pack_IMAGE_LOAD_CONFIG_DIRECTORY();
+    test_pack_IMAGE_LOAD_CONFIG_DIRECTORY32();
+    test_pack_IMAGE_LOAD_CONFIG_DIRECTORY64();
     test_pack_IMAGE_NT_HEADERS();
     test_pack_IMAGE_NT_HEADERS32();
     test_pack_IMAGE_NT_HEADERS64();
diff --git a/dlls/ntdll/virtual.c b/dlls/ntdll/virtual.c
index 72309f6..811c4e2 100644
--- a/dlls/ntdll/virtual.c
+++ b/dlls/ntdll/virtual.c
@@ -1068,6 +1068,7 @@ static NTSTATUS map_image( HANDLE hmapping, int fd, char *base, SIZE_T total_siz
     IMAGE_SECTION_HEADER *sec;
     IMAGE_DATA_DIRECTORY *imports;
     NTSTATUS status = STATUS_CONFLICTING_ADDRESSES;
+    DWORD addr;
     int i;
     off_t pos;
     sigset_t sigset;
@@ -1278,6 +1279,23 @@ static NTSTATUS map_image( HANDLE hmapping, int fd, char *base, SIZE_T total_siz
         }
     }
 
+
+    /* randomize security cookie */
+
+    if (IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG < nt->OptionalHeader.NumberOfRvaAndSizes &&
+        (addr = nt->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG].VirtualAddress))
+    {
+        IMAGE_LOAD_CONFIG_DIRECTORY *loadcfg = (IMAGE_LOAD_CONFIG_DIRECTORY *)(ptr + addr);
+        PULONG_PTR cookie = (PULONG_PTR)loadcfg->SecurityCookie;
+
+        srand( time( NULL ) );
+        *cookie = rand();
+#ifdef _WIN64
+        /* Fill up, but keep the highest word clear */
+        *cookie ^= (ULONGLONG)rand() << 16;
+#endif
+    }
+
     /* set the image protections */
 
     VIRTUAL_SetProt( view, ptr, ROUND_SIZE( 0, header_size ), VPROT_COMMITTED | VPROT_READ );
diff --git a/include/winnt.h b/include/winnt.h
index 08e7f48..d077005 100644
--- a/include/winnt.h
+++ b/include/winnt.h
@@ -3620,7 +3620,30 @@ typedef struct _FPO_DATA {
   WORD  cbFrame  : 2;
 } FPO_DATA, *PFPO_DATA;
 
-typedef struct _IMAGE_LOAD_CONFIG_DIRECTORY {
+typedef struct _IMAGE_LOAD_CONFIG_DIRECTORY64 {
+  DWORD     Size;
+  DWORD     TimeDateStamp;
+  WORD      MajorVersion;
+  WORD      MinorVersion;
+  DWORD     GlobalFlagsClear;
+  DWORD     GlobalFlagsSet;
+  DWORD     CriticalSectionDefaultTimeout;
+  ULONGLONG DeCommitFreeBlockThreshold;
+  ULONGLONG DeCommitTotalFreeThreshold;
+  ULONGLONG LockPrefixTable;
+  ULONGLONG MaximumAllocationSize;
+  ULONGLONG VirtualMemoryThreshold;
+  ULONGLONG ProcessAffinityMask;
+  DWORD     ProcessHeapFlags;
+  WORD      CSDVersion;
+  WORD      Reserved1;
+  ULONGLONG EditList;
+  ULONGLONG SecurityCookie;
+  ULONGLONG SEHandlerTable;
+  ULONGLONG SEHandlerCount;
+} IMAGE_LOAD_CONFIG_DIRECTORY64, *PIMAGE_LOAD_CONFIG_DIRECTORY64;
+
+typedef struct _IMAGE_LOAD_CONFIG_DIRECTORY32 {
   DWORD Size;
   DWORD TimeDateStamp;
   WORD  MajorVersion;
@@ -3641,7 +3664,15 @@ typedef struct _IMAGE_LOAD_CONFIG_DIRECTORY {
   DWORD SecurityCookie;
   DWORD SEHandlerTable;
   DWORD SEHandlerCount;
-} IMAGE_LOAD_CONFIG_DIRECTORY, *PIMAGE_LOAD_CONFIG_DIRECTORY;
+} IMAGE_LOAD_CONFIG_DIRECTORY32, *PIMAGE_LOAD_CONFIG_DIRECTORY32;
+
+#ifdef _WIN64
+typedef IMAGE_LOAD_CONFIG_DIRECTORY64   IMAGE_LOAD_CONFIG_DIRECTORY;
+typedef PIMAGE_LOAD_CONFIG_DIRECTORY64  PIMAGE_LOAD_CONFIG_DIRECTORY;
+#else
+typedef IMAGE_LOAD_CONFIG_DIRECTORY32   IMAGE_LOAD_CONFIG_DIRECTORY;
+typedef PIMAGE_LOAD_CONFIG_DIRECTORY32  PIMAGE_LOAD_CONFIG_DIRECTORY;
+#endif
 
 typedef struct _IMAGE_FUNCTION_ENTRY {
   DWORD StartingAddress;
diff --git a/tools/winapi/tests.dat b/tools/winapi/tests.dat
index 3f07943..4632a8b 100644
--- a/tools/winapi/tests.dat
+++ b/tools/winapi/tests.dat
@@ -691,6 +691,8 @@ IMAGE_IMPORT_BY_NAME
 IMAGE_IMPORT_DESCRIPTOR
 IMAGE_LINENUMBER
 IMAGE_LOAD_CONFIG_DIRECTORY
+IMAGE_LOAD_CONFIG_DIRECTORY32
+IMAGE_LOAD_CONFIG_DIRECTORY64
 IMAGE_NT_HEADERS
 IMAGE_NT_HEADERS32
 IMAGE_NT_HEADERS64
-- 
1.9.1




More information about the wine-patches mailing list