KeGetTbSize
NTSTATUS __stdcall KeGetTbSize(){
unsigned __int8 CpuVendor;
unsigned __int32 v1;
__int64 v2;
unsigned int v3;
__int64 *v4;
unsigned int v5;
unsigned int v6;
int *v7;
__int64 v8;
unsigned int i;
unsigned int v10;
int *v11;
__int128 v13;
__int128 v14;
char v15;
__int64 v16;
char v17;
__int64 v18;
char v19;
__int64 v20;
char v21;
__int64 v22;
char v23;
__int64 v24;
v15 = -76;
v18 = 512i64;
v24 = 512i64;
v16 = 256i64;
v17 = 100;
CpuVendor = KeGetCurrentPrcb()->CpuVendor;
v19 = -63;
v20 = 1024i64;
v21 = -61;
v22 = 1536i64;
v23 = -54;
if( CpuVendor == 1 )
{
if( (unsigned int)EAX(__cpuid(0x80000000, 0)) >= 0x80000006 )
{
LODWORD(v8) = ((unsigned int)EBX(__cpuid(-2147483642, 0)) >> 16) & 0xFFF;
return v8;
}
}
else if( CpuVendor == 2 )
{
v1 = EAX(__cpuid(0, 0));
if( v1 >= 2 )
{
v2 = __cpuid(2, 0);
*(_QWORD *)&v13 = __PAIR64__(EBX(v2), EAX(v2));
*((_QWORD *)&v13 + 1) = __PAIR64__(EDX(v2), ECX(v2));
v14 = v13;
if( v1 >= 0x18 )
{
for( i = 0; i < 0x20; i += 8 )
{
v10 = 0;
v11 = (int *)&v14;
do
{
if( *v11 >= 0 && (unsigned __int8)((unsigned int)*v11 >> i) == 0xFE )
{
LODWORD(v8) = KiGetTbLeafInfo();
return v8;
}
++v10;
++v11;
}
while( v10 < 4 );
}
}
v3 = 0;
v4 = &v16;
do
{
v5 = 0;
while( 2 )
{
v6 = 0;
v7 = (int *)&v14;
do
{
if( *v7 >= 0 && (unsigned __int8)((unsigned int)*v7 >> v5) == *((unsigned __int8 *)v4 - 8) )
return *v4;
++v6;
++v7;
}
while( v6 < 4 );
v5 += 8;
if( v5 < 0x20 )
continue;
break;
}
++v3;
v4 += 2;
}
while( v3 < 5 );
}
}
LODWORD(v8) = 0;
return v8;
}Referenced by:
MiInitializeTbFlushing