Alexandre Julliard : kernel32/tests: Add some tests for CIL 32-bit image flags.

Alexandre Julliard julliard at winehq.org
Thu Feb 15 14:42:28 CST 2018


Module: wine
Branch: master
Commit: 2df367a4f7e84a5c97d26ae326167755c7197207
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=2df367a4f7e84a5c97d26ae326167755c7197207

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Thu Feb 15 08:07:09 2018 +0100

kernel32/tests: Add some tests for CIL 32-bit image flags.

Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/kernel32/tests/loader.c | 29 ++++++++++++++++++++++++++++-
 include/winnt.h              |  3 ++-
 2 files changed, 30 insertions(+), 2 deletions(-)

diff --git a/dlls/kernel32/tests/loader.c b/dlls/kernel32/tests/loader.c
index b4fb1c6..877d381 100644
--- a/dlls/kernel32/tests/loader.c
+++ b/dlls/kernel32/tests/loader.c
@@ -405,7 +405,8 @@ static BOOL query_image_section( int id, const char *dll_name, const IMAGE_NT_HE
         todo_wine
         ok( S(U(image)).ComPlusILOnly || broken(is_winxp),
             "%u: wrong ComPlusILOnly flags %02x\n", id, U(image).ImageFlags );
-        if (nt_header->OptionalHeader.Magic == IMAGE_NT_OPTIONAL_HDR32_MAGIC)
+        if (nt_header->OptionalHeader.Magic == IMAGE_NT_OPTIONAL_HDR32_MAGIC &&
+            !(cor_header->Flags & COMIMAGE_FLAGS_32BITREQUIRED))
             todo_wine
             ok( S(U(image)).ComPlusNativeReady || broken(is_winxp),
                 "%u: wrong ComPlusNativeReady flags %02x\n", id, U(image).ImageFlags );
@@ -1019,6 +1020,14 @@ static void test_Loader(void)
     status = map_image_section( &nt_header, &section, &cor_header, __LINE__ );
     ok( status == STATUS_SUCCESS, "NtCreateSection error %08x\n", status );
 
+    cor_header.Flags = COMIMAGE_FLAGS_ILONLY | COMIMAGE_FLAGS_32BITREQUIRED;
+    status = map_image_section( &nt_header, &section, &cor_header, __LINE__ );
+    ok( status == STATUS_SUCCESS, "NtCreateSection error %08x\n", status );
+
+    cor_header.Flags = COMIMAGE_FLAGS_ILONLY | COMIMAGE_FLAGS_32BITPREFERRED;
+    status = map_image_section( &nt_header, &section, &cor_header, __LINE__ );
+    ok( status == STATUS_SUCCESS, "NtCreateSection error %08x\n", status );
+
     cor_header.Flags = 0;
     status = map_image_section( &nt_header, &section, &cor_header, __LINE__ );
     ok( status == STATUS_SUCCESS, "NtCreateSection error %08x\n", status );
@@ -1122,6 +1131,16 @@ static void test_Loader(void)
         ok( status == (is_wow64 ? STATUS_SUCCESS : STATUS_INVALID_IMAGE_WIN_64),
             "NtCreateSection error %08x\n", status );
 
+        cor_header.Flags = COMIMAGE_FLAGS_ILONLY | COMIMAGE_FLAGS_32BITREQUIRED;
+        status = map_image_section( (IMAGE_NT_HEADERS *)&nt64, &section, &cor_header, __LINE__ );
+        ok( status == (is_wow64 ? STATUS_SUCCESS : STATUS_INVALID_IMAGE_WIN_64),
+            "NtCreateSection error %08x\n", status );
+
+        cor_header.Flags = COMIMAGE_FLAGS_ILONLY | COMIMAGE_FLAGS_32BITPREFERRED;
+        status = map_image_section( (IMAGE_NT_HEADERS *)&nt64, &section, &cor_header, __LINE__ );
+        ok( status == (is_wow64 ? STATUS_SUCCESS : STATUS_INVALID_IMAGE_WIN_64),
+            "NtCreateSection error %08x\n", status );
+
         cor_header.Flags = 0;
         status = map_image_section( (IMAGE_NT_HEADERS *)&nt64, &section, &cor_header, __LINE__ );
         ok( status == (is_wow64 ? STATUS_SUCCESS : STATUS_INVALID_IMAGE_WIN_64),
@@ -1218,6 +1237,14 @@ static void test_Loader(void)
         status = map_image_section( (IMAGE_NT_HEADERS *)&nt32, &section, &cor_header, __LINE__ );
         ok( status == STATUS_SUCCESS, "NtCreateSection error %08x\n", status );
 
+        cor_header.Flags = COMIMAGE_FLAGS_ILONLY | COMIMAGE_FLAGS_32BITREQUIRED;
+        status = map_image_section( (IMAGE_NT_HEADERS *)&nt32, &section, &cor_header, __LINE__ );
+        ok( status == STATUS_SUCCESS, "NtCreateSection error %08x\n", status );
+
+        cor_header.Flags = COMIMAGE_FLAGS_ILONLY | COMIMAGE_FLAGS_32BITPREFERRED;
+        status = map_image_section( (IMAGE_NT_HEADERS *)&nt32, &section, &cor_header, __LINE__ );
+        ok( status == STATUS_SUCCESS, "NtCreateSection error %08x\n", status );
+
         cor_header.Flags = 0;
         status = map_image_section( (IMAGE_NT_HEADERS *)&nt32, &section, &cor_header, __LINE__ );
         ok( status == STATUS_SUCCESS, "NtCreateSection error %08x\n", status );
diff --git a/include/winnt.h b/include/winnt.h
index 855d2a8..56b533c 100644
--- a/include/winnt.h
+++ b/include/winnt.h
@@ -3621,10 +3621,11 @@ typedef enum ReplacesCorHdrNumericDefines
     COMIMAGE_FLAGS_STRONGNAMESIGNED = 0x00000008,
     COMIMAGE_FLAGS_NATIVE_ENTRYPOINT= 0x00000010,
     COMIMAGE_FLAGS_TRACKDEBUGDATA   = 0x00010000,
+    COMIMAGE_FLAGS_32BITPREFERRED   = 0x00020000,
 
     COR_VERSION_MAJOR_V2       = 2,
     COR_VERSION_MAJOR          = COR_VERSION_MAJOR_V2,
-    COR_VERSION_MINOR          = 0,
+    COR_VERSION_MINOR          = 5,
     COR_DELETED_NAME_LENGTH    = 8,
     COR_VTABLEGAP_NAME_LENGTH  = 8,
 




More information about the wine-cvs mailing list