[PATCH] [ImageHlp]: MapAndLoad

Eric Pouech eric.pouech at wanadoo.fr
Wed Jan 3 07:39:33 CST 2007


- Fixed computation of SizeOfImage (makes Zuma happy, and 
  completly fixes #6099)
- Now making use of the bReadOnly parameter
- Correctly handle files without NT headers

A+
---

 dlls/imagehlp/access.c |   19 ++++++++++++++-----
 1 files changed, 14 insertions(+), 5 deletions(-)

diff --git a/dlls/imagehlp/access.c b/dlls/imagehlp/access.c
index cca765e..1560d11 100644
--- a/dlls/imagehlp/access.c
+++ b/dlls/imagehlp/access.c
@@ -164,7 +164,9 @@ BOOL WINAPI MapAndLoad(LPSTR pszImageNam
         goto Error;
     }
 
-    hFile = CreateFileA(szFileName, GENERIC_READ, FILE_SHARE_READ,
+    hFile = CreateFileA(szFileName,
+                        GENERIC_READ | (bReadOnly ? 0 : GENERIC_WRITE),
+                        FILE_SHARE_READ,
                         NULL, OPEN_EXISTING, 0, NULL);
     if (hFile == INVALID_HANDLE_VALUE)
     {
@@ -172,14 +174,16 @@ BOOL WINAPI MapAndLoad(LPSTR pszImageNam
         goto Error;
     }
 
-    hFileMapping = CreateFileMappingA(hFile, NULL, PAGE_READONLY | SEC_COMMIT, 0, 0, NULL);
+    hFileMapping = CreateFileMappingA(hFile, NULL, 
+                                      (bReadOnly ? PAGE_READONLY : PAGE_READWRITE) | SEC_COMMIT,
+                                      0, 0, NULL);
     if (!hFileMapping)
     {
         WARN("CreateFileMapping: Error = %d\n", GetLastError());
         goto Error;
     }
 
-    mapping = MapViewOfFile(hFileMapping, FILE_MAP_READ, 0, 0, 0);
+    mapping = MapViewOfFile(hFileMapping, bReadOnly ? FILE_MAP_READ : FILE_MAP_WRITE, 0, 0, 0);
     CloseHandle(hFileMapping);
     if (!mapping)
     {
@@ -187,7 +191,12 @@ BOOL WINAPI MapAndLoad(LPSTR pszImageNam
         goto Error;
     }
 
-    pNtHeader = RtlImageNtHeader(mapping);
+    if (!(pNtHeader = RtlImageNtHeader(mapping)))
+    {
+        WARN("Not an NT header\n");
+        UnmapViewOfFile(mapping);
+        goto Error;
+    }
 
     pLoadedImage->ModuleName       = HeapAlloc(GetProcessHeap(), 0,
                                                strlen(szFileName) + 1);
@@ -199,7 +208,7 @@ BOOL WINAPI MapAndLoad(LPSTR pszImageNam
         ((LPBYTE) &pNtHeader->OptionalHeader +
          pNtHeader->FileHeader.SizeOfOptionalHeader);
     pLoadedImage->NumberOfSections = pNtHeader->FileHeader.NumberOfSections;
-    pLoadedImage->SizeOfImage      = pNtHeader->OptionalHeader.SizeOfImage;
+    pLoadedImage->SizeOfImage      = GetFileSize(hFile, NULL);
     pLoadedImage->Characteristics  = pNtHeader->FileHeader.Characteristics;
     pLoadedImage->LastRvaSection   = pLoadedImage->Sections;
 




More information about the wine-patches mailing list