Owen Rudge : imagehlp: Check for 64-bit PE files in CheckSumMappedFile.
Alexandre Julliard
julliard at winehq.org
Mon Dec 7 10:26:11 CST 2009
Module: wine
Branch: master
Commit: ba5a86e349bc4f5943413b2d89cd1f1165b93ad7
URL: http://source.winehq.org/git/wine.git/?a=commit;h=ba5a86e349bc4f5943413b2d89cd1f1165b93ad7
Author: Owen Rudge <orudge at codeweavers.com>
Date: Fri Dec 4 10:12:00 2009 -0600
imagehlp: Check for 64-bit PE files in CheckSumMappedFile.
---
dlls/imagehlp/modify.c | 32 ++++++++++++++++++++++++++------
1 files changed, 26 insertions(+), 6 deletions(-)
diff --git a/dlls/imagehlp/modify.c b/dlls/imagehlp/modify.c
index 02636bd..debccc0 100644
--- a/dlls/imagehlp/modify.c
+++ b/dlls/imagehlp/modify.c
@@ -89,11 +89,14 @@ PIMAGE_NT_HEADERS WINAPI CheckSumMappedFile(
LPVOID BaseAddress, DWORD FileLength,
LPDWORD HeaderSum, LPDWORD CheckSum)
{
- PIMAGE_NT_HEADERS Header;
+ IMAGE_DOS_HEADER *dos = (IMAGE_DOS_HEADER *) BaseAddress;
+ PIMAGE_NT_HEADERS32 Header32;
+ PIMAGE_NT_HEADERS64 Header64;
+ DWORD *ChecksumFile;
DWORD CalcSum;
DWORD HdrSum;
- FIXME("(%p, %d, %p, %p): stub\n",
+ TRACE("(%p, %d, %p, %p)\n",
BaseAddress, FileLength, HeaderSum, CheckSum
);
@@ -101,8 +104,25 @@ PIMAGE_NT_HEADERS WINAPI CheckSumMappedFile(
BaseAddress,
(FileLength + 1) / sizeof(WORD));
- Header = RtlImageNtHeader(BaseAddress);
- HdrSum = Header->OptionalHeader.CheckSum;
+ if (dos->e_magic != IMAGE_DOS_SIGNATURE)
+ return NULL;
+
+ Header32 = (IMAGE_NT_HEADERS32 *)((char *)dos + dos->e_lfanew);
+
+ if (Header32->Signature != IMAGE_NT_SIGNATURE)
+ return NULL;
+
+ if (Header32->OptionalHeader.Magic == IMAGE_NT_OPTIONAL_HDR32_MAGIC)
+ ChecksumFile = &Header32->OptionalHeader.CheckSum;
+ else if (Header32->OptionalHeader.Magic == IMAGE_NT_OPTIONAL_HDR64_MAGIC)
+ {
+ Header64 = (IMAGE_NT_HEADERS64 *)Header32;
+ ChecksumFile = &Header64->OptionalHeader.CheckSum;
+ }
+ else
+ return NULL;
+
+ HdrSum = *ChecksumFile;
/* Subtract image checksum from calculated checksum. */
/* fix low word of checksum */
@@ -129,9 +149,9 @@ PIMAGE_NT_HEADERS WINAPI CheckSumMappedFile(
CalcSum += FileLength;
*CheckSum = CalcSum;
- *HeaderSum = Header->OptionalHeader.CheckSum;
+ *HeaderSum = *ChecksumFile;
- return Header;
+ return (PIMAGE_NT_HEADERS) Header32;
}
/***********************************************************************
More information about the wine-cvs
mailing list