This commit is contained in:
Shauren
2017-08-17 17:31:02 +02:00
parent 43d268d75c
commit 3f39913628
11 changed files with 290 additions and 38 deletions

View File

@@ -121,6 +121,29 @@ static bool IsIndexFileName_V2(const TCHAR * szFileName)
_tcsicmp(szFileName + 0x0A, _T(".idx")) == 0);
}
static bool IsRootFile_Starcraft1(LPBYTE pbFileData, DWORD cbFileData)
{
LPBYTE pbFileEnd = pbFileData + cbFileData;
LPBYTE pbHashName;
LPBYTE pbHashEnd;
// Skip the file name
while(pbFileData < pbFileEnd && pbFileData[0] != '|')
pbFileData++;
if(pbFileData[0] != '|')
return false;
// Then, a MD5 must follow
pbHashName = pbHashEnd = pbFileData + 1;
while(pbHashEnd < pbFileEnd && pbHashEnd[0] != 0x0A)
pbHashEnd++;
if(pbHashEnd[0] != 0x0A)
return false;
// The length must be exactly 32 characters
return ((pbHashEnd - pbHashName) == 32);
}
static bool IsCascIndexHeader_V1(LPBYTE pbFileData, DWORD cbFileData)
{
PFILE_INDEX_HEADER_V1 pIndexHeader = (PFILE_INDEX_HEADER_V1)pbFileData;
@@ -913,7 +936,10 @@ static int LoadRootFile(TCascStorage * hs, DWORD dwLocaleMask)
break;
default:
nError = RootHandler_CreateWoW6(hs, pbRootFile, cbRootFile, dwLocaleMask);
if(IsRootFile_Starcraft1(pbRootFile, cbRootFile))
nError = RootHandler_CreateSC1(hs, pbRootFile, cbRootFile);
else
nError = RootHandler_CreateWoW6(hs, pbRootFile, cbRootFile, dwLocaleMask);
break;
}
}
@@ -1123,6 +1149,10 @@ bool WINAPI CascGetStorageInfo(
dwInfoValue = hs->dwBuildNumber;
break;
case CascStorageInstalledLocales:
dwInfoValue = hs->dwDefaultLocale;
break;
default:
SetLastError(ERROR_INVALID_PARAMETER);
return false;