RtlInitCodePageTable
VOID __stdcall RtlInitCodePageTable(UINT16 *TableBase, _CPTABLEINFO *CodePageTable){
USHORT *v2;
USHORT v4;
__int64 v5;
UINT16 v6;
unsigned __int16 v7;
UINT16 *v8;
USHORT *v9;
USHORT v10;
v2 = 0i64;
if( !TableBase || (v4 = TableBase[1], v4 == 0xFDE9) )
{
*(_DWORD *)&CodePageTable->CodePage = 327145;
*(_DWORD *)&CodePageTable->DefaultChar = -196545;
*(_DWORD *)&CodePageTable->TransDefaultChar = 4128831;
CodePageTable->DBCSCodePage = 0;
CodePageTable->MultiByteTable = 0i64;
CodePageTable->DBCSRanges = 0i64;
CodePageTable->DBCSOffsets = 0i64;
}
else
{
v5 = *TableBase;
v6 = TableBase[v5];
CodePageTable->CodePage = v4;
v7 = v5 + v6;
CodePageTable->MaximumCharacterSize = TableBase[2];
CodePageTable->DefaultChar = TableBase[3];
CodePageTable->UniDefaultChar = TableBase[4];
CodePageTable->TransDefaultChar = TableBase[5];
CodePageTable->TransUniDefaultChar = TableBase[6];
*(_QWORD *)CodePageTable->LeadByte = *(_QWORD *)(TableBase + 7);
*(_DWORD *)&CodePageTable->LeadByte[8] = *(_DWORD *)(TableBase + 11);
v8 = &TableBase[v5 + 1];
CodePageTable->MultiByteTable = v8;
v9 = (UINT16 *)((char *)v8 + (v8[256] != 0 ? 514i64 : 2i64) + 512);
CodePageTable->DBCSRanges = v9;
if( *v9 )
{
v10 = 1;
v2 = v9 + 1;
}
else
{
v10 = 0;
}
CodePageTable->DBCSOffsets = v2;
CodePageTable->DBCSCodePage = v10;
v2 = &TableBase[v7 + 1];
}
CodePageTable->WideCharTable = v2;
}Referenced by:
RtlInitNlsTables