MiMarkBootKernelStack

VOID __stdcall MiMarkBootKernelStack(_MMPTE *PointerPte, _MMPTE *EndPte){
  UINT64 v4; 
  VOID *v5; 
  _MMSUPPORT_INSTANCE *AnyMultiplexedVm; 
  _ETHREAD *v7; 
  char v8; 
  char v9; 
  _MMPTE *PteBase; 
  __int64 v11; 
  UINT64 v12; 
  _MI_TB_FLUSH_LIST TbFlushList[48]; 

  memset(TbFlushList, 0i64, 0xB8u);
  *(_QWORD *)&TbFlushList[6] = 0i64;
  v4 = 0i64;
  TbFlushList[2] = 20;
  LOBYTE(TbFlushList[1]) = 1;
  AnyMultiplexedVm = MiGetAnyMultiplexedVm(MiWorkingSetTypeKernelStacks, v5);
  MiLockWorkingSetShared();
  v9 = v8;
  if( PointerPte < EndPte )
  {
    PteBase = MmGetPteBase();
    while( 1 )
    {
      if( !v4 )
        goto LABEL_11;
      if( ((unsigned __int16)PointerPte & 0xFFF) == 0 )
        break;
LABEL_5:
      MiMarkKernelStack(PointerPte, (_MMPTE *)0xFFFFFFFFFFFFFFF0i64, &v7->Tcb);
      if( (MiFlags & 0x40000) == 0 )
      {
        LODWORD(v11) = MI_READ_PTE_LOCK_FREE((INT64)PointerPte);
        MiWriteValidPteNewProtection((INT64 *)PointerPte, v11 | 0x8000000000000062ui64);
        MiInsertTbFlushEntry(
          TbFlushList,
          (VOID *)((__int64)(((_QWORD)PointerPte << 25) - ((_QWORD)PteBase << 25)) >> 16),
          1ui64,
          0i64);
      }
      if( ++PointerPte >= EndPte )
        goto LABEL_8;
    }
    MiUnlockPageTableInternal((INT64)AnyMultiplexedVm, v4);
LABEL_11:
    v4 = (UINT64)PteBase + (((unsigned __int64)PointerPte >> 9) & 0x7FFFFFFFF8i64);
    MiLockPageTableInternal((INT64)AnyMultiplexedVm, v4, 0i64);
    goto LABEL_5;
  }
LABEL_8:
  MiFlushTbList(TbFlushList);
  if( v4 )
    MiUnlockPageTableInternal((INT64)AnyMultiplexedVm, v4);
  LOBYTE(v12) = v9;
  MiUnlockWorkingSetShared(AnyMultiplexedVm, v12);
}

Referenced by:

MiInitializeKernelStacks