- resolved issue #20 (problems with MapFileAndCheckSumW)

This commit is contained in:
Mr. eXoDia 2014-03-08 19:38:27 +01:00
parent 41c8fa80c3
commit bc75cfe305
1 changed files with 32 additions and 22 deletions

View File

@ -8,36 +8,46 @@
// TitanEngine.Realigner.functions: // TitanEngine.Realigner.functions:
__declspec(dllexport) bool TITCALL FixHeaderCheckSum(char* szFileName) __declspec(dllexport) bool TITCALL FixHeaderCheckSum(char* szFileName)
{ {
HANDLE FileHandle;
DWORD HeaderSum = NULL; DWORD FileSize;
DWORD CheckSum = NULL; HANDLE FileMap;
ULONG_PTR FileMapVA;
if(MapFileAndCheckSumA(szFileName, &HeaderSum, &CheckSum) == NULL) if(MapFileEx(szFileName, UE_ACCESS_READ, &FileHandle, &FileSize, &FileMap, &FileMapVA, 0))
{ {
SetPE32Data(szFileName, NULL, UE_CHECKSUM, (ULONG_PTR)CheckSum); DWORD HeaderSum;
return true; DWORD CheckSum;
} if(CheckSumMappedFile((PVOID)FileMapVA, FileSize, &HeaderSum, &CheckSum) != NULL)
else {
{ UnMapFileEx(FileHandle, FileSize, FileMap, FileMapVA);
return false; 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) __declspec(dllexport) bool TITCALL FixHeaderCheckSumW(wchar_t* szFileName)
{ {
HANDLE FileHandle;
DWORD HeaderSum = NULL; DWORD FileSize;
DWORD CheckSum = NULL; HANDLE FileMap;
ULONG_PTR FileMapVA;
if(MapFileAndCheckSumW(szFileName, &HeaderSum, &CheckSum) == NULL) if(MapFileExW(szFileName, UE_ACCESS_READ, &FileHandle, &FileSize, &FileMap, &FileMapVA, 0))
{ {
SetPE32DataW(szFileName, NULL, UE_CHECKSUM, (ULONG_PTR)CheckSum); DWORD HeaderSum;
return true; DWORD CheckSum;
} if(CheckSumMappedFile((PVOID)FileMapVA, FileSize, &HeaderSum, &CheckSum) != NULL)
else {
{ UnMapFileEx(FileHandle, FileSize, FileMap, FileMapVA);
return false; 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) __declspec(dllexport) long TITCALL RealignPE(ULONG_PTR FileMapVA, DWORD FileSize, DWORD RealingMode)
{ {