Alexandre Julliard : ntdll: Handle LOAD_LIBRARY_AS_IMAGE_RESOURCE modules when loading resources.

Alexandre Julliard julliard at winehq.org
Tue Mar 6 16:48:51 CST 2018


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

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Tue Mar  6 09:08:10 2018 -0600

ntdll: Handle LOAD_LIBRARY_AS_IMAGE_RESOURCE modules when loading resources.

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

---

 dlls/ntdll/loader.c   |  7 ++-----
 dlls/ntdll/resource.c | 12 ++++++------
 2 files changed, 8 insertions(+), 11 deletions(-)

diff --git a/dlls/ntdll/loader.c b/dlls/ntdll/loader.c
index de2cc54..7140645 100644
--- a/dlls/ntdll/loader.c
+++ b/dlls/ntdll/loader.c
@@ -3277,11 +3277,8 @@ PVOID WINAPI RtlImageDirectoryEntryToData( HMODULE module, BOOL image, WORD dir,
     const IMAGE_NT_HEADERS *nt;
     DWORD addr;
 
-    if ((ULONG_PTR)module & 1)  /* mapped as data file */
-    {
-        module = (HMODULE)((ULONG_PTR)module & ~1);
-        image = FALSE;
-    }
+    if ((ULONG_PTR)module & 1) image = FALSE;  /* mapped as data file */
+    module = (HMODULE)((ULONG_PTR)module & ~3);
     if (!(nt = RtlImageNtHeader( module ))) return NULL;
     if (nt->OptionalHeader.Magic == IMAGE_NT_OPTIONAL_HDR64_MAGIC)
     {
diff --git a/dlls/ntdll/resource.c b/dlls/ntdll/resource.c
index f542677..0d5172a 100644
--- a/dlls/ntdll/resource.c
+++ b/dlls/ntdll/resource.c
@@ -333,12 +333,12 @@ static inline NTSTATUS access_resource( HMODULE hmod, const IMAGE_RESOURCE_DATA_
         {
             if (ptr)
             {
-                if (is_data_file_module(hmod))
-                {
-                    HMODULE mod = (HMODULE)((ULONG_PTR)hmod & ~1);
-                    *ptr = RtlImageRvaToVa( RtlImageNtHeader(mod), mod, entry->OffsetToData, NULL );
-                }
-                else *ptr = (char *)hmod + entry->OffsetToData;
+                BOOL is_data_file = is_data_file_module(hmod);
+                hmod = (HMODULE)((ULONG_PTR)hmod & ~3);
+                if (is_data_file)
+                    *ptr = RtlImageRvaToVa( RtlImageNtHeader(hmod), hmod, entry->OffsetToData, NULL );
+                else
+                    *ptr = (char *)hmod + entry->OffsetToData;
             }
             if (size) *size = entry->Size;
             status = STATUS_SUCCESS;




More information about the wine-cvs mailing list