KiInitializeMTRR

VOID __stdcall KiInitializeMTRR(UINT8 LastProcessor){
  UINT8 v1; 
  char v2; 
  unsigned __int64 v3; 
  unsigned __int64 v4; 
  unsigned int v5; 
  __int64 v6; 
  unsigned int v7; 
  unsigned __int64 v8; 
  unsigned __int64 v9; 
  __int64 v10; 
  unsigned __int64 v11; 
  __int64 v12; 
  struct _KPRCB *CurrentPrcb; 
  VOID *PoolWithTag; 
  VOID *v15; 
  v1 = LastProcessor;
  v2 = 1;
  if( !*((_DWORD *)KeGetPcr() + 105) )
  {
    qword_140C2B128 = __readmsr(0xFEu);
    KiMtrrInfo = __readmsr(0x2FFu);
    CurrentPrcb = KeGetCurrentPrcb();
    byte_140C2B131 = 0;
    if( *((_BYTE *)CurrentPrcb + 141) == 1 && (__readmsr(0xC0010010) & 0x40000) != 0 )
      byte_140C2B131 = 1;
    if( (((_BYTE)qword_140C2B128 != 0) & _bittest64(&KiMtrrInfo, 0xBu)) != 0 )
    {
      if( (KeFeatureBits & 0x40) == 0 && (qword_140C2B128 & 0x400) != 0 )
        qword_140C2B128 &= ~0x400ui64;
      PoolWithTag = qword_140C2B138;
      if( qword_140C2B138
        || (PoolWithTag = ExAllocatePoolWithTag(
                            NonPagedPoolNx,
                            16 * (unsigned int)(unsigned __int8)qword_140C2B128,
                            0x2020654Bui64),
            (qword_140C2B138 = PoolWithTag) != 0i64) )
      {
        memset((INT64)PoolWithTag, 0i64);
      }
      v15 = qword_140C2B140;
      if( qword_140C2B140
        || (qword_140C2B128 & 0x100) != 0
        && (v15 = ExAllocatePoolWithTag(NonPagedPoolNx, 0x58ui64, 0x2020654Bui64), (qword_140C2B140 = v15) != 0i64) )
      {
        memset((INT64)v15, 0i64);
      }
    }
    else
    {
      if( (KeFeatureBits & 0x40) != 0
        && (qword_140C2B128 & 0x1FF) != 0
        && (KiMtrrInfo & 0x800) == 0
        && (*((_BYTE *)CurrentPrcb + 141) != 1 || (_BYTE)KiMtrrInfo != 6)
        && (_BYTE)KdDebuggerEnabled )
      {
        DbgPrintEx(0x65u, 0, "Caching is disabled by incorrect MTRR settings.\n");
        __debugbreak();
      }
      v2 = 0;
    }
  }
  if( qword_140C2B138 && (qword_140C2B140 || (qword_140C2B128 & 0x100) == 0) )
  {
    v3 = __readmsr(0xFEu);
    if( (KeFeatureBits & 0x40) == 0 && (v3 & 0x400) != 0 )
      v3 &= ~0x400ui64;
    if( v3 != qword_140C2B128 )
      KeBugCheckEx(0x3Eu, 0x40ui64, 0i64, 0i64, 0i64);
    if( __readmsr(0x2FFu) != KiMtrrInfo )
      DbgPrintEx(0x65u, 0, "KiInitializeMTRR: MTRR_MSR_DEFAULT is not consistent between processors.\n");
  }
  else
  {
    v2 = 0;
    LOBYTE(v3) = 0;
  }
  if( !v2 )
    goto LABEL_51;
  if( !*((_DWORD *)KeGetPcr() + 105) )
  {
    if( qword_140C2B140 )
      KiReadFixedMtrr((UINT64 *)qword_140C2B140);
    v4 = (unsigned __int8)v3;
    v5 = 0;
    if( (_BYTE)v3 )
    {
      v6 = 0i64;
      v7 = 513;
      do
      {
        v8 = __readmsr(v7 - 1);
        v9 = __readmsr(v7);
        v11 = v9;
        if( (v9 & 0x800) != 0 )
        {
          v10 = v9 & KiMtrrMaskMask;
          if( ((v10 + KiMaskToLength(v9 & KiMtrrMaskMask)) & ~(1i64 << *(char *)KiMtrrMaxRangeShift)) != 0 )
          {
            DbgPrintEx(0x65u, 0, "KiInitializeMTRR: Found non-contiguous MTRR mask!\n");
            v2 = 0;
          }
          v12 = 2 * v6;
          *((_QWORD *)qword_140C2B138 + v12) = v8;
          *((_QWORD *)qword_140C2B138 + v12 + 1) = v11;
        }
        ++v5;
        v7 += 2;
        v6 = v5;
      }
      while( v5 < v4 );
      v1 = LastProcessor;
    }
  }
  if( v2 )
  {
    if( v1 )
    {
      byte_140C2B130 = 1;
      if( KeGetCurrentIrql() < 2u )
      {
        MmLockPagableSectionByHandle(ExPageLockHandle);
        KeRestoreMtrrBroadcast();
        MiLockPagableImageSection(ExPageLockHandle, 0i64);
      }
    }
  }
  else
  {
LABEL_51:
    if( qword_140C2B138 )
    {
      ExFreePoolWithTag(qword_140C2B138, 0);
      qword_140C2B138 = 0i64;
    }
    if( qword_140C2B140 )
    {
      ExFreePoolWithTag(qword_140C2B140, 0);
      qword_140C2B140 = 0i64;
    }
  }
}

Referenced by:

KiInitMachineDependent