KiSetStandardizedCacheInformation
unsigned __int32 __fastcall KiSetStandardizedCacheInformation(__int64 a1, int a2){
__int64 v2;
__int64 v3;
unsigned __int32 result;
unsigned __int32 v7;
__int64 v8;
__int32 v9;
int v10;
int v11;
int v12;
int v13;
char v14;
__int64 v15;
unsigned __int32 v16;
unsigned int v17;
__int64 v18;
int v19;
int i;
__int64 v21;
v2 = 0i64;
v3 = a1 + 33496;
do
{
v8 = __cpuid(a2, v2);
result = EAX(v8);
v7 = EBX(v8);
v9 = ECX(v8);
v10 = (int)(result << 27) >> 27;
if( !v10 )
break;
v11 = v10 - 1;
if( !v11 )
{
*(_DWORD *)(v3 + 8) = 2;
goto LABEL_7;
}
v12 = v11 - 1;
if( !v12 )
{
*(_DWORD *)(v3 + 8) = 1;
goto LABEL_7;
}
v13 = v12 - 1;
if( !v13 )
{
*(_DWORD *)(v3 + 8) = 0;
LABEL_7:
if( (result & 0x200) != 0 )
v14 = -1;
else
v14 = (v7 >> 22) + 1;
*(_BYTE *)(v3 + 1) = v14;
*(_BYTE *)v3 = (result >> 5) & 7;
*(_WORD *)(v3 + 2) = (v7 & 0xFFF) + 1;
*(_DWORD *)(v3 + 4) = (v9 + 1) * ((v7 >> 22) + 1) * ((v7 & 0xFFF) + 1) * (((v7 >> 12) & 0x3FF) + 1);
v15 = *(_QWORD *)(a1 + 200);
v16 = (result >> 14) & 0xFFF;
if( v16 )
{
_BitScanReverse(&v17, 2 * v16 + 1);
v18 = 0i64;
v19 = ~((unsigned __int8)(1 << v17) - 1);
for( i = v19 & *(_DWORD *)(a1 + 212);
(unsigned int)v18 < (unsigned int)KeNumberProcessors_0;
v18 = (unsigned int)(v18 + 1) )
{
v21 = (__int64)*(&KiProcessorBlock + v18);
if( *(_QWORD *)(v21 + 192) == *(_QWORD *)(a1 + 192) && (v19 & *(_DWORD *)(v21 + 212)) == i )
{
v15 |= *(_QWORD *)(v21 + 200);
*(_QWORD *)(v21 + 8 * v2 + 33904) |= v15;
}
}
}
v3 += 12i64;
*(_QWORD *)(a1 + 8 * v2 + 33904) = v15;
++*(_DWORD *)(a1 + 33556);
goto LABEL_16;
}
if( v13 == 2 )
{
*(_DWORD *)(v3 + 8) = 3;
goto LABEL_7;
}
LABEL_16:
result = *(_DWORD *)(a1 + 33556);
v2 = (unsigned int)(v2 + 1);
}
while( result < 5 );
return result;
}Referenced by:
KiSetCacheInformationAmd
KiSetCacheInformationIntel