From bc75cfe305eb9b68f46797a12ffbef37e958480f Mon Sep 17 00:00:00 2001 From: "Mr. eXoDia" Date: Sat, 8 Mar 2014 19:38:27 +0100 Subject: [PATCH] - resolved issue #20 (problems with MapFileAndCheckSumW) --- TitanEngine/TitanEngine.Realigner.cpp | 54 ++++++++++++++++----------- 1 file changed, 32 insertions(+), 22 deletions(-) diff --git a/TitanEngine/TitanEngine.Realigner.cpp b/TitanEngine/TitanEngine.Realigner.cpp index be46481..e7c785e 100644 --- a/TitanEngine/TitanEngine.Realigner.cpp +++ b/TitanEngine/TitanEngine.Realigner.cpp @@ -8,36 +8,46 @@ // TitanEngine.Realigner.functions: __declspec(dllexport) bool TITCALL FixHeaderCheckSum(char* szFileName) { - - DWORD HeaderSum = NULL; - DWORD CheckSum = NULL; - - if(MapFileAndCheckSumA(szFileName, &HeaderSum, &CheckSum) == NULL) + HANDLE FileHandle; + DWORD FileSize; + HANDLE FileMap; + ULONG_PTR FileMapVA; + if(MapFileEx(szFileName, UE_ACCESS_READ, &FileHandle, &FileSize, &FileMap, &FileMapVA, 0)) { - SetPE32Data(szFileName, NULL, UE_CHECKSUM, (ULONG_PTR)CheckSum); - return true; - } - else - { - return false; + DWORD HeaderSum; + DWORD CheckSum; + if(CheckSumMappedFile((PVOID)FileMapVA, FileSize, &HeaderSum, &CheckSum) != NULL) + { + UnMapFileEx(FileHandle, FileSize, FileMap, FileMapVA); + return false; + } + UnMapFileEx(FileHandle, FileSize, FileMap, FileMapVA); + return SetPE32Data(szFileName, NULL, UE_CHECKSUM, (ULONG_PTR)CheckSum); } + return false; } + __declspec(dllexport) bool TITCALL FixHeaderCheckSumW(wchar_t* szFileName) { - - DWORD HeaderSum = NULL; - DWORD CheckSum = NULL; - - if(MapFileAndCheckSumW(szFileName, &HeaderSum, &CheckSum) == NULL) + HANDLE FileHandle; + DWORD FileSize; + HANDLE FileMap; + ULONG_PTR FileMapVA; + if(MapFileExW(szFileName, UE_ACCESS_READ, &FileHandle, &FileSize, &FileMap, &FileMapVA, 0)) { - SetPE32DataW(szFileName, NULL, UE_CHECKSUM, (ULONG_PTR)CheckSum); - return true; - } - else - { - return false; + DWORD HeaderSum; + DWORD CheckSum; + if(CheckSumMappedFile((PVOID)FileMapVA, FileSize, &HeaderSum, &CheckSum) != NULL) + { + UnMapFileEx(FileHandle, FileSize, FileMap, FileMapVA); + return false; + } + UnMapFileEx(FileHandle, FileSize, FileMap, FileMapVA); + return SetPE32DataW(szFileName, NULL, UE_CHECKSUM, (ULONG_PTR)CheckSum); } + return false; } + __declspec(dllexport) long TITCALL RealignPE(ULONG_PTR FileMapVA, DWORD FileSize, DWORD RealingMode) {