[PATCH] [ImageHlp]: MapAndLoad
Eric Pouech
eric.pouech at wanadoo.fr
Tue Jan 2 07:24:00 CST 2007
- Fixed computation of SizeOfImage (makes Zuma happy, and
completly fixes #6099)
- Now making use of the bReadOnly parameter
A+
---
dlls/imagehlp/access.c | 16 ++++++++++++----
1 files changed, 12 insertions(+), 4 deletions(-)
diff --git a/dlls/imagehlp/access.c b/dlls/imagehlp/access.c
index cca765e..1e4cbed 100644
--- a/dlls/imagehlp/access.c
+++ b/dlls/imagehlp/access.c
@@ -153,6 +153,7 @@ BOOL WINAPI MapAndLoad(LPSTR pszImageNam
HANDLE hFileMapping = NULL;
PVOID mapping = NULL;
PIMAGE_NT_HEADERS pNtHeader = NULL;
+ unsigned i;
TRACE("(%s, %s, %p, %d, %d)\n",
pszImageName, pszDllPath, pLoadedImage, bDotDll, bReadOnly);
@@ -164,7 +165,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 +175,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)
{
@@ -199,7 +204,10 @@ BOOL WINAPI MapAndLoad(LPSTR pszImageNam
((LPBYTE) &pNtHeader->OptionalHeader +
pNtHeader->FileHeader.SizeOfOptionalHeader);
pLoadedImage->NumberOfSections = pNtHeader->FileHeader.NumberOfSections;
- pLoadedImage->SizeOfImage = pNtHeader->OptionalHeader.SizeOfImage;
+ /* we need to return the size of image which has been mapped */
+ pLoadedImage->SizeOfImage = pNtHeader->OptionalHeader.SizeOfHeaders;
+ for (i = 0; i < pLoadedImage->NumberOfSections; i++)
+ pLoadedImage->SizeOfImage += pLoadedImage->Sections[i].SizeOfRawData;
pLoadedImage->Characteristics = pNtHeader->FileHeader.Characteristics;
pLoadedImage->LastRvaSection = pLoadedImage->Sections;
More information about the wine-patches
mailing list