MiDecrementCloneBlockReference

INT64 __fastcall MiDecrementCloneBlockReference(UINT64 P2, volatile INT64 *P3, UINT64 a3){
  _ETHREAD *v5; 
  INT64 v7; 
  unsigned int v8; 
  v5 = *(_ETHREAD **)(a3 + 1248);
  if( v5 && v5 != (_ETHREAD *)KeGetCurrentThread() )
    KeBugCheckEx(0x1Au, 0x61945ui64, P2, (ULONG_PTR)P3, 0i64);
  v7 = *(_QWORD *)(*(_QWORD *)(P2 + 56) + 24i64);
  if( *(_QWORD *)(qword_140C4E388 + 8i64 * *(unsigned __int16 *)(a3 + 1838)) != v7
    && _InterlockedExchangeAdd64(P3 + 1, 0xFFFFFFFFFFFFFFFFui64) == 1 )
  {
    MiReturnCrossPartitionCloneCharges(v7);
  }
  if( _InterlockedExchangeAdd64(P3 + 3, 0xFFFFFFFFFFFFFFFFui64) == 1 )
    v8 = MiDeleteMergedPte((_MI_PARTITION *)v7, (_MMPTE *)P3);
  else
    v8 = 4;
  if( *(_QWORD *)(*(_QWORD *)(a3 + 1680) + 360i64) > *(_QWORD *)(P2 + 96) )
  {
    if( (_InterlockedDecrement64(P3 + 2) & 0x7FFFFFFFFFFFFFFi64) == 0 )
    {
      _InterlockedAdd64((volatile signed __int64 *)(v7 + 7624), 0xFFFFFFFFFFFFFFFFui64);
      if( v8 != 3 )
        MiReturnCommit((_MI_PARTITION *)v7, 1ui64);
    }
    v8 = 5;
  }
  if( _InterlockedExchangeAdd64((volatile signed __int64 *)(P2 + 48), 0xFFFFFFFFFFFFFFFFui64) == 1 )
    MiDeleteCloneDescriptor(a3, P2);
  return v8;
}

Referenced by:

MiCopyOnWrite
MiDecommitPages
MiDeletePteList
MiDeletePteRun
MiDeleteVa