uBOOL BtreeFlush::CheckObjInMem(void) { sLONG i; CheckAssert(IsValidFastPtr(this)); CheckAssert(nkeys>=0 && nkeys<=32); for (i=0;(i<=nkeys);i++) { CheckAssert(IsValidFastPtr(tabsous[i])); } return(true); }
int __cdecl IniLoadFile(int *ModelTable, int *pulModelTableCount, void **a3, int a4, LPCSTR lpFileName, __int16 a6, int a7) { char v7; // ST1C_1@9 char v9; // ST1C_1@13 DWORD v10; // eax@17 DWORD v11; // eax@41 signed int v12; // eax@44 int v13; // eax@44 BlowfishBlock *v14; // eax@50 int v15; // edx@50 BlowfishBlock *v16; // eax@59 int v17; // edx@59 char v18; // [sp+20h] [bp-31C8h]@59 int ctx; // [sp+28h] [bp-31C0h]@50 char v20; // [sp+30h] [bp-31B8h]@44 BlowfishPad v21; // [sp+1078h] [bp-2170h]@44 SIZE_T nNumberOfBytesToWrite; // [sp+20C0h] [bp-1128h]@57 DWORD NumberOfBytesWritten; // [sp+20C4h] [bp-1124h]@57 HANDLE hFile; // [sp+20C8h] [bp-1120h]@56 LPCVOID lpBuffer; // [sp+20CCh] [bp-111Ch]@56 int L; // [sp+20D0h] [bp-1118h]@50 int R; // [sp+20D4h] [bp-1114h]@50 void *v28; // [sp+20D8h] [bp-1110h]@54 unsigned int byteSize; // [sp+20DCh] [bp-110Ch]@45 int dest; // [sp+20E0h] [bp-1108h]@45 unsigned int v31; // [sp+20E4h] [bp-1104h]@45 BlowfishBlock chain; // [sp+20E8h] [bp-1100h]@44 BlowfishPad pad; // [sp+20F0h] [bp-10F8h]@44 int cnt; // [sp+3138h] [bp-B0h]@60 int i; // [sp+313Ch] [bp-ACh]@60 char key; // [sp+3140h] [bp-A8h]@44 __int16 v37; // [sp+316Ch] [bp-7Ch]@44 unsigned int v38; // [sp+3170h] [bp-78h]@1 unsigned int j; // [sp+3174h] [bp-74h]@85 DWORD Buffer; // [sp+3178h] [bp-70h]@34 _BYTE *lpMem; // [sp+317Ch] [bp-6Ch]@1 ModelTable *v42; // [sp+3180h] [bp-68h]@1 SIZE_T nNumberOfBytesToRead; // [sp+3184h] [bp-64h]@31 int ulCount; // [sp+3188h] [bp-60h]@1 HANDLE hObject; // [sp+318Ch] [bp-5Ch]@30 ModelTable v46; // [sp+3190h] [bp-58h]@82 int v47; // [sp+31DCh] [bp-Ch]@85 char v48[4]; // [sp+31E0h] [bp-8h]@1 int v49; // [sp+31E4h] [bp-4h]@1 int v50; // [sp+31E8h] [bp+0h]@1 v38 = (unsigned int)&v50 ^ dword_10072570; lpMem = 0; v49 = 0; v42 = 0; ulCount = 0; *(_DWORD *)v48 = 0; if ( g_LogEvents ) { if ( DebugMsg1("IniLoadFile") ) DebugMsg3("Entry - '%s'.", (char)lpFileName); } if ( !lpFileName || !ModelTable || !pulModelTableCount ) { if ( DebugMsg1("IniLoadFile") ) CheckAssert("NULL Pointer.", v7); return 0; } if ( !*lpFileName ) { if ( DebugMsg1("IniLoadFile") ) CheckAssert("EMPTY String.", v9); return 0; } v42 = (ModelTable *)HeapAlloc(g_hHeap, 8u, 0x11000u); if ( !v42 ) { if ( DebugMsg1("IniLoadFile") ) { v10 = GetLastError(); CheckAssert("Failed to allocated %d bytes. Reason:%d.", 0, v10); } return 0; } if ( *ModelTable && (unsigned int)*pulModelTableCount < 0x400 ) { ulCount = *pulModelTableCount; memcpy_fast((unsigned int)v42, *ModelTable, 0x44 * ulCount); HeapFree(g_hHeap, 0, (LPVOID)*ModelTable); if ( !ulCount ) { if ( DebugMsg1("IniLoadFile") ) CheckAssert("%s - %s line %d: assert %s\n", (unsigned int)"IniLoadFile", ".\\IniMgr.cpp", 1598, "ulCount > 0"); } if ( DebugMsg1("IniLoadFile") ) DebugMsg2(131072, "IniLoadFilesFromPath - Found %d device from previous file(s).\n", ulCount); } else { ulCount = 0; if ( *pulModelTableCount ) { if ( DebugMsg1("IniLoadFile") ) CheckAssert( "%s - %s line %d: assert %s\n", (unsigned int)"IniLoadFile", ".\\IniMgr.cpp", 1604, "*pulModelTableCount == 0"); } } hObject = CreateFileA(lpFileName, 0x80000000u, 0, 0, 3u, 0x80u, 0); if ( hObject != (HANDLE)-1 ) { nNumberOfBytesToRead = GetFileSize(hObject, 0); if ( nNumberOfBytesToRead != -1 ) lpMem = HeapAlloc(g_hHeap, 8u, nNumberOfBytesToRead); if ( lpMem ) { if ( ReadFile(hObject, lpMem, nNumberOfBytesToRead, &Buffer, 0) == 1 ) { if ( DebugMsg1("IniLoadFile") ) DebugMsg2(131072, "IniLoadFilesFromPath - Read %d bytes from file.\n", Buffer); } else { if ( DebugMsg1("IniLoadFile") ) CheckAssert("%s - %s line %d: assert %s\n", (unsigned int)"IniLoadFile", ".\\IniMgr.cpp", 1632, "FALSE"); if ( DebugMsg1("IniLoadFile") ) { v11 = GetLastError(); DebugMsg2(131072, "IniLoadFilesFromPath - ReadFile Failed %d.\n", v11); } HeapFree(g_hHeap, 0, lpMem); lpMem = 0; } } CloseHandle(hObject); if ( lpMem ) { memcpy(&key, "SetPoint-83918EEE-DB31-4df1-B11D-F93932DBC1B8", 44u); v37 = *(_WORD *)&aSetpoint83918e[44]; v12 = strlen(&key); v13 = BlowfishGeneratePad((int)&v20, (int)&key, v12); memcpy_fast((unsigned int)&v21, v13, 0x1048u); memcpy_fast((unsigned int)&pad, (int)&v21, 0x1048u); BlowfishBlock__ctor(&chain, 0xC009F158u, 0x17EC17ECu); if ( strncmp(lpMem, ";KHAL", 5u) ) { dest = 0; v31 = *(_DWORD *)lpMem; byteSize = GetBlockSizeOfBuffer(v31, 8u); if ( Buffer != byteSize + 12 || v31 > byteSize ) { HeapFree(g_hHeap, 0, lpMem); goto LABEL_101; } dest = (int)HeapAlloc(g_hHeap, 8u, byteSize + 1); if ( !dest ) { HeapFree(g_hHeap, 0, lpMem); goto LABEL_101; } BlowfishDecryptCBC(&pad, (int)(lpMem + 4), dest, byteSize, &chain); v14 = BlowfishEncipherBlock((int)&ctx, &pad, &chain); v15 = v14->R; chain.L = v14->L; chain.R = v15; L = *(_DWORD *)&lpMem[byteSize + 4]; R = *(_DWORD *)&lpMem[byteSize + 8]; if ( chain.L != L || chain.R != R ) { if ( DebugMsg1("IniLoadFile") ) CheckAssert( "%s - %s line %d: assert %s\n", (unsigned int)"IniLoadFile", ".\\IniMgr.cpp", 1681, "chain.L == L && chain.R == R"); } v28 = lpMem; lpMem = (_BYTE *)dest; HeapFree(g_hHeap, 0, v28); Buffer = v31; } else { if ( a6 & 0x400 ) { lpBuffer = 0; hFile = CreateFileA(lpFileName, 0x40000000u, 0, 0, 2u, 0x80u, 0); if ( hFile != (HANDLE)-1 ) { nNumberOfBytesToWrite = GetBlockSizeOfBuffer(Buffer, 8u); lpBuffer = HeapAlloc(g_hHeap, 8u, nNumberOfBytesToWrite); WriteFile(hFile, &Buffer, 4u, &NumberOfBytesWritten, 0); if ( lpBuffer ) { BlowfishDecryptCFB(&pad, (int)lpMem, (int)lpBuffer, nNumberOfBytesToWrite, &chain); WriteFile(hFile, lpBuffer, nNumberOfBytesToWrite, &NumberOfBytesWritten, 0); HeapFree(g_hHeap, 0, (LPVOID)lpBuffer); } v16 = BlowfishEncipherBlock((int)&v18, &pad, &chain); v17 = v16->R; chain.L = v16->L; chain.R = v17; WriteFile(hFile, &chain, 4u, &NumberOfBytesWritten, 0); WriteFile(hFile, &chain.R, 4u, &NumberOfBytesWritten, 0); CloseHandle(hFile); } } } cnt = 0; i = -1; while ( cnt < (signed int)Buffer ) { if ( lpMem[cnt] == ';' ) { for ( i = cnt + 1; i < (signed int)Buffer && lpMem[i] != '\r' && lpMem[i] != '\n'; ++i ) ; while ( i < (signed int)Buffer && (lpMem[i] == '\r' || lpMem[i] == '\n') ) ++i; if ( i < (signed int)Buffer ) memcpy_fast((unsigned int)&lpMem[cnt], (int)&lpMem[i], Buffer - i); Buffer -= i - cnt; } else { ++cnt; } } cnt = -1; for ( i = 0; i < (signed int)Buffer; ++i ) { if ( lpMem[i] == '[' || i == Buffer - 1 ) { if ( cnt >= 0 ) { lpMem[i - 1] = 0; memset(&v46, 0, 0x44u); if ( IniLoadUnsupportedSection(a3, (_DWORD *)a4, &lpMem[cnt]) != 1 ) { if ( IniLoadSection(&v46, (int)&lpMem[cnt]) == 1 ) { v47 = 1; for ( j = 0; j < ulCount; ++j ) { if ( v46.field_0 == v42[j].field_0 && v46.field_4 == v42[j].field_4 ) { IniFreeModelInfo((unsigned int)&v46, (int)v42, &v46); if ( a7 ) { if ( dword_10072548 ) { if ( DebugMsg1("IniLoadFile") ) sub_1003DBE0("Model Overwrite (%08X-%X).\n", *(_QWORD *)&v46); } } v47 = 0; break; } } if ( v47 ) { memcpy(&v42[ulCount++], &v46, sizeof(v42[ulCount++])); ++*(_DWORD *)v48; } } } } cnt = i; } } HeapFree(g_hHeap, 0, lpMem); lpMem = 0; goto LABEL_101; } } LABEL_101: if ( ulCount ) { *ModelTable = (int)HeapAlloc(g_hHeap, 8u, 68 * ulCount); if ( *ModelTable ) { memcpy_fast(*ModelTable, (int)v42, 68 * ulCount); *pulModelTableCount = ulCount; } else { if ( DebugMsg1("IniLoadFile") ) CheckAssert("%s - %s line %d: assert %s\n", (unsigned int)"IniLoadFile", ".\\IniMgr.cpp", 1840, "FALSE"); *pulModelTableCount = 0; } } else { *pulModelTableCount = 0; *ModelTable = 0; } HeapFree(g_hHeap, 0, v42); v42 = 0; if ( g_LogEvents ) { if ( DebugMsg1("IniLoadFile") ) DebugMsg3("Exit %d.", v48[0]); } return *(_DWORD *)v48; }