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