Alexandre Julliard : kernel32: Check for a 32-bit NT header before getting module address range in MODULE_GetBinaryType .

Alexandre Julliard julliard at winehq.org
Wed Aug 12 11:10:01 CDT 2009


Module: wine
Branch: master
Commit: 4a59ac76f19c6df4a32b88584a2488ce6f659ccc
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=4a59ac76f19c6df4a32b88584a2488ce6f659ccc

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Wed Aug 12 15:47:57 2009 +0200

kernel32: Check for a 32-bit NT header before getting module address range in MODULE_GetBinaryType.

---

 dlls/kernel32/module.c |   15 +++++++++++++--
 1 files changed, 13 insertions(+), 2 deletions(-)

diff --git a/dlls/kernel32/module.c b/dlls/kernel32/module.c
index 4d0a810..f93580c 100644
--- a/dlls/kernel32/module.c
+++ b/dlls/kernel32/module.c
@@ -282,7 +282,7 @@ DWORD MODULE_GetBinaryType( HANDLE hfile, void **res_start, void **res_end )
         union
         {
             IMAGE_OS2_HEADER os2;
-            IMAGE_NT_HEADERS nt;
+            IMAGE_NT_HEADERS32 nt;
         } ext_header;
 
         /* We do have a DOS image so we will now try to seek into
@@ -311,7 +311,18 @@ DWORD MODULE_GetBinaryType( HANDLE hfile, void **res_start, void **res_end )
                 if (res_start) *res_start = (void *)ext_header.nt.OptionalHeader.ImageBase;
                 if (res_end) *res_end = (void *)(ext_header.nt.OptionalHeader.ImageBase +
                                                  ext_header.nt.OptionalHeader.SizeOfImage);
-                return ret;
+                switch (ext_header.nt.OptionalHeader.Magic)
+                {
+                case IMAGE_NT_OPTIONAL_HDR32_MAGIC:
+                    if (res_start) *res_start = (void *)ext_header.nt.OptionalHeader.ImageBase;
+                    if (res_end) *res_end = (void *)(ext_header.nt.OptionalHeader.ImageBase +
+                                                     ext_header.nt.OptionalHeader.SizeOfImage);
+                    return ret;
+                case IMAGE_NT_OPTIONAL_HDR64_MAGIC:
+                    if (res_start) *res_start = NULL;
+                    if (res_end) *res_end = NULL;
+                    return ret;
+                }
             }
             return BINARY_DOS;
         }




More information about the wine-cvs mailing list