X-Git-Url: https://sfsrealm.hopto.org/projects/?a=blobdiff_plain;f=MpqHashTable.cpp;h=625746c3370b1e20b97756517288fbbc05665aaa;hb=a36705ea24b6ce9c6df1e070176014e9fb2394ca;hp=90072c17e960337d62e3cf719f4abe09b5e10b69;hpb=b54fa405fd2c0d0b3c8ddbd55297b37cdeb833b5;p=SFmpqapi.git diff --git a/MpqHashTable.cpp b/MpqHashTable.cpp index 90072c1..625746c 100644 --- a/MpqHashTable.cpp +++ b/MpqHashTable.cpp @@ -2,6 +2,7 @@ #include #include "SFmpqapi.h" +#include "SFmpqInternal.h" #include "SFUtil.h" #include "MpqCrypt.h" @@ -13,13 +14,13 @@ BOOL WriteHashTable(MPQARCHIVE *mpqOpenArc) if (buffer) { memcpy(buffer,mpqOpenArc->lpHashTable,sizeof(HASHTABLEENTRY) * mpqOpenArc->MpqHeader.dwHashTableSize); EncryptData((LPBYTE)buffer,sizeof(HASHTABLEENTRY) * mpqOpenArc->MpqHeader.dwHashTableSize,dwHashTableKey); - SFSetFilePointer(mpqOpenArc->hFile,mpqOpenArc->dwMPQStart+mpqOpenArc->MpqHeader.dwHashTableOffset,FILE_BEGIN); + SFSetFilePointer(mpqOpenArc->hFile, mpqOpenArc->qwMPQStart + mpqOpenArc->MpqHeader.dwHashTableOffset + ((UINT64)mpqOpenArc->MpqHeader_Ex.wHashTableOffsetHigh << 32), FILE_BEGIN); WriteFile(mpqOpenArc->hFile,buffer,sizeof(HASHTABLEENTRY) * mpqOpenArc->MpqHeader.dwHashTableSize,&tsz,0); SFFree(buffer); } else { EncryptData((LPBYTE)mpqOpenArc->lpHashTable,sizeof(HASHTABLEENTRY) * mpqOpenArc->MpqHeader.dwHashTableSize,dwHashTableKey); - SFSetFilePointer(mpqOpenArc->hFile,mpqOpenArc->dwMPQStart+mpqOpenArc->MpqHeader.dwHashTableOffset,FILE_BEGIN); + SFSetFilePointer(mpqOpenArc->hFile, mpqOpenArc->qwMPQStart + mpqOpenArc->MpqHeader.dwHashTableOffset + ((UINT64)mpqOpenArc->MpqHeader_Ex.wHashTableOffsetHigh << 32), FILE_BEGIN); WriteFile(mpqOpenArc->hFile,mpqOpenArc->lpHashTable,sizeof(HASHTABLEENTRY) * mpqOpenArc->MpqHeader.dwHashTableSize,&tsz,0); DecryptData((LPBYTE)mpqOpenArc->lpHashTable,sizeof(HASHTABLEENTRY) * mpqOpenArc->MpqHeader.dwHashTableSize,dwHashTableKey); }