MiInitializeCacheSizes

INT64 __stdcall MiInitializeCacheSizes(){
  unsigned int v0; 
  unsigned int v1; 
  unsigned int v2; 
  unsigned int v3; 
  int v5; 
  struct _KPRCB *CurrentPrcb; 
  __int64 v7; 
  char *v8; 
  INT64 result; 
  v0 = *((_DWORD *)KeGetPcr() + 47);
  dword_140C4DC18 = v0;
  v1 = *((unsigned __int8 *)KeGetPcr() + 81);
  if( (_BYTE)v1 )
    v0 /= v1;
  if( v0 )
  {
    _BitScanReverse(&v2, v0);
    v0 = 1 << v2;
  }
  if( v0 - 8 > 0xF8 )
  {
    if( qword_140C525D0 < 0x80000 )
      v0 = qword_140C525D0 < 0x40000 ? 64 : 128;
    else
      v0 = 256;
  }
  dword_140C4DC3C = v0;
  dword_140C4DC38 = v0 - 1;
  v3 = v0 >> 4;
  if( (v0 & 0xF) != 0 )
    ++v3;
  if( _BitScanReverse((unsigned int *)&v5, v3) )
    v3 = 1 << v5;
  dword_140C4DCC8 = v3;
  MiInitializeLargePageColorSizes();
  CurrentPrcb = KeGetCurrentPrcb();
  v7 = *((unsigned int *)CurrentPrcb + 8389);
  v8 = (char *)CurrentPrcb + 33496;
  if( (_DWORD)v7 )
  {
    do
    {
      if( *v8 == 1 && (*((_DWORD *)v8 + 2) & 0xFFFFFFFD) == 0 )
        dword_140C4DC1C = *((_DWORD *)v8 + 1);
      v8 += 12;
      --v7;
    }
    while( v7 );
  }
  result = 0x4000i64;
  if( (unsigned int)dword_140C4DC1C < 0x4000 )
    dword_140C4DC1C = 0x4000;
  dword_140C4DC4C = 256;
  return result;
}

Referenced by:

MiInitializeColors