[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