MiGetPageForWriteCluster

VOID __fastcall MiGetPageForWriteCluster(
        _RTL_BITMAP *AllocationBitmap,
        _MMPTE *PointerPte,
        _MMPTE ComparePte,
        _MMPTE *OwningPte,
        UINT64 ContainingFrame,
        UINT64 *DummyGapLength,
        _MI_RESAVAIL_CHARGE *ChargeState){
  _MI_RESAVAIL_CHARGE *v7; 
  UINT64 *v8; 
  int v9; 
  union {unsigned __int64 Long;volatile unsigned __int64 VolatileLong;_MMPTE_HARDWARE Hard;_MMPTE_PROTOTYPE Proto;_MMPTE_SOFTWARE Soft;_MMPTE_TIMESTAMP TimeStamp;_MMPTE_TRANSITION Trans;_MMPTE_SUBSECTION Subsect;_MMPTE_LIST List;} v10; 
  _MMPFN *v12; 
  _MMPFN *v13; 
  UINT64 v14; 
  _MMPTE *PageIrql; 

  PageIrql = OwningPte;
  v7 = ChargeState;
  v8 = DummyGapLength;
  v9 = 0;
  LOBYTE(PageIrql) = 0;
  v10.Long = ComparePte.u.Long;
  *ChargeState = MiChargedLocal;
  v12 = MiCheckPteForWriteCluster(AllocationBitmap, (ULONG_PTR)PointerPte, ComparePte, OwningPte, v14, &PageIrql);
  v13 = v12;
  if( v12 )
  {
    *v7 = MiReferencePageForModifiedWrite(v12, 0i64);
    _InterlockedAnd64(&v13->u2.Lock, 0x7FFFFFFFFFFFFFFFui64);
    __writecr8((unsigned __int8)PageIrql);
    if( *v7 )
      goto LABEL_8;
  }
  else if( *(_DWORD *)v8 <= 0x1Fu )
  {
    if( *(&stru_140C4DB30 + 42) )
    {
      if( (v10.Long & 0x10) == 0 )
        v10.Long &= ~*(&stru_140C4DB30 + 42);
    }
    if( !_bittest64((const signed __int64 *)AllocationBitmap->Buffer, HIDWORD(v10.Long)) )
    {
      v9 = *(_DWORD *)v8 + 1;
LABEL_8:
      *(_DWORD *)v8 = v9;
    }
  }
}

Referenced by:

MiBuildReservationCluster