MiMapBBTMemory

VOID __stdcall MiMapBBTMemory(_LOADER_PARAMETER_BLOCK *LoaderBlock){
  unsigned __int64 v1; 
  _QWORD *BbtBuffer; 
  unsigned __int64 v4; 
  unsigned __int64 v5; 
  _MMPTE *PteBase; 
  _XSTATE_CONFIGURATION *v7; 
  INT64 v8; 
  _MI_TB_FLUSH_LIST *v9; 
  unsigned __int64 v10; 
  unsigned __int64 v11; 
  _LIST_ENTRY *p_MemoryDescriptorListHead; 
  _LIST_ENTRY *Flink; 
  _LIST_ENTRY *v14; 
  _LIST_ENTRY *Blink; 
  unsigned __int64 v16; 
  int v17; 
  UINT64 v18; 
  INT64 v19; 
  _LIST_ENTRY *v20; 
  _QWORD *v21; 

  v1 = 0i64;
  if( BBTPagesToReserve )
  {
    BbtBuffer = LoaderBlock->Extension->BbtBuffer;
    if( BbtBuffer )
    {
      v1 = (BBTPagesToReserve + 511) & 0xFFFFFFFFFFFFFE00ui64;
LABEL_25:
      v18 = v1 << 12;
      KeZeroPages(BbtBuffer, v18);
      *BbtBuffer = v18;
      goto LABEL_26;
    }
    v4 = (BBTPagesToReserve + 511) & 0xFFFFFFFFFFFFFE00ui64;
    v5 = (unsigned __int64)MiObtainSystemVa(v4 >> 9, MiVaSystemPtes);
    v21 = (_QWORD *)v5;
    BbtBuffer = (_QWORD *)v5;
    if( v5 )
    {
      PteBase = MmGetPteBase();
      v7 = (_XSTATE_CONFIGURATION *)((char *)PteBase + ((v5 >> 9) & 0x7FFFFFFFF8i64));
      LODWORD(v19) = 0;
      v8 = (INT64)v7 + 8 * v4 - 8;
      if( MiMakeZeroedPageTablesEx((INT64)v7, v8, 0i64, 9i64, v19) )
      {
        LODWORD(v10) = MiMakeValidPte(v7, 0i64, 2684354564i64);
        v11 = v10;
        p_MemoryDescriptorListHead = &LoaderBlock->MemoryDescriptorListHead;
        Flink = LoaderBlock->MemoryDescriptorListHead.Flink;
        v20 = p_MemoryDescriptorListHead;
        if( Flink != p_MemoryDescriptorListHead )
        {
          while( 1 )
          {
            if( LODWORD(Flink[1].Flink) == 23 )
            {
              v14 = Flink[2].Flink;
              Blink = Flink[1].Blink;
              if( (unsigned __int64)v14 + v1 > BBTPagesToReserve )
                v14 = (_LIST_ENTRY *)(BBTPagesToReserve - v1);
              v1 += (unsigned __int64)v14;
              do
              {
                v11 ^= (v11 ^ ((_QWORD)Blink << 12)) & 0xFFFFFFFFF000i64;
                v16 = v11;
                LOBYTE(v17) = MiPteInShadowRange((UINT64)v7);
                if( v17 && (KeGetCurrentThread()->ApcState.Process->Flags3 & 0x1000) != 0 && (v11 & 1) != 0 )
                  v16 = v11 | 0x8000000000000000ui64;
                v7->EnabledFeatures = v16;
                v7 = (_XSTATE_CONFIGURATION *)((char *)v7 + 8);
                Blink = (_LIST_ENTRY *)((char *)Blink + 1);
                v14 = (_LIST_ENTRY *)((char *)v14 - 1);
              }
              while( v14 );
              if( v1 == BBTPagesToReserve )
              {
LABEL_22:
                BbtBuffer = v21;
                break;
              }
              p_MemoryDescriptorListHead = v20;
            }
            Flink = Flink->Flink;
            if( Flink == p_MemoryDescriptorListHead )
              goto LABEL_22;
          }
        }
        if( v1 < BBTPagesToReserve )
          BBTPagesToReserve = v1;
        goto LABEL_25;
      }
      MiReturnSystemVa(
        BbtBuffer,
        (VOID *)(((v8 << 25) - ((_QWORD)PteBase << 25) + 0x10000000) >> 16),
        MiVaSystemPtes,
        v9);
      BbtBuffer = 0i64;
    }
    BBTPagesToReserve = 0i64;
LABEL_26:
    BBTBuffer = (__int64)BbtBuffer;
  }
}

Referenced by:

MiInitSystem