MiDeleteCachedSubsection

NTSTATUS __stdcall MiDeleteCachedSubsection(_MI_PARTITION *Partition){
  INT64 *v1; 
  __int64 v3; 
  ULONG_PTR v4; 
  _QWORD **v5; 
  unsigned __int64 v6; 
  _QWORD *i; 
  NTSTATUS result; 
  _QWORD *v9; 
  __int64 v10; 
  _QWORD *v11; 
  UINT64 v12; 
  int v13; 
  UINT64 inserted; 
  int v15; 
  UINT64 v16; 
  int IsSubsectionClean; 
  NTSTATUS v18; 
  KIRQL v19; 
  unsigned __int64 v20; 
  _FILE_OBJECT *v21; 
  unsigned __int64 v22; 
  signed __int64 v23; 
  KIRQL v24; 
  int v25; 
  unsigned __int64 v26; 
  BOOL v27; 
  KIRQL v28; 
  int v29; 
  unsigned int v30; 
  _QWORD *v31; 
  _QWORD *v32; 
  INT64 v33; 
  UINT64 v34; 
  INT16 v35; 
  _QWORD *v36; 
  _QWORD *v37; 
  signed __int64 v38; 
  __int128 v39[6]; 
  __int64 v41; 
  PVOID P; 
  ULONG_PTR v43; 
  v1 = (INT64 *)((char *)Partition + 1344);
  v3 = 1i64;
  v39[0] = 0i64;
  v4 = 1i64;
  v5 = (_QWORD **)((char *)Partition + 1720);
  v6 = ExAcquireSpinLockExclusive((PEX_SPIN_LOCK)Partition + 336);
  for( i = *v5; i != v5; i = (_QWORD *)*i )
  {
    v4 = (ULONG_PTR)(i - 10);
    v3 = *(i - 10);
    if( (unsigned int)ExTryAcquireSpinLockExclusiveAtDpcLevel((INT64 *)(v3 + 72)) )
      break;
  }
  if( i == v5 )
  {
    ExReleaseSpinLockExclusiveFromDpcLevel(v1);
    result = -1073741275;
LABEL_11:
    __writecr8(v6);
    return result;
  }
  v9 = (_QWORD *)(v4 + 80);
  v10 = *(_QWORD *)(v4 + 80);
  v11 = *(_QWORD **)(v4 + 88);
  if( *(_QWORD *)(v10 + 8) != v4 + 80 || (_QWORD *)*v11 != v9 )
    __fastfail(3u);
  *v11 = v10;
  *(_QWORD *)(v10 + 8) = v11;
  *(_WORD *)(v4 + 34) &= ~8u;
  *(_QWORD *)(v4 + 88) = v4 + 80;
  *v9 = v9;
  MiReduceUnusedSubsectionCount((_MSUBSECTION *)v4);
  ExReleaseSpinLockExclusiveFromDpcLevel(v1);
  v13 = *(_DWORD *)(v3 + 56);
  if( (v13 & 1) != 0 )
  {
    ExReleaseSpinLockExclusiveFromDpcLevel((INT64 *)(v3 + 72));
    result = -1073741709;
    goto LABEL_11;
  }
  if( (v13 & 8) != 0 )
  {
    if( *(int *)(v4 + 52) < 0 )
    {
      inserted = MiInsertUnusedSubsection((_MSUBSECTION *)v4, v12);
      ExReleaseSpinLockExclusiveFromDpcLevel((INT64 *)(v3 + 72));
      __writecr8(v6);
      if( inserted )
        MiReturnCrossPartitionSectionCharges((volatile INT64 *)Partition, 1i64, inserted);
      return -1073741792;
    }
    v15 = 1;
  }
  else
  {
    v15 = 0;
  }
  if( *(_QWORD *)(v4 + 96) )
    KeBugCheckEx(0x1Au, 0x42004ui64, v4, 0i64, 0i64);
  *(_QWORD *)(v4 + 96) = 1i64;
  *(_WORD *)(v4 + 32) &= ~1u;
  MiRemoveUnusedSegment((_CONTROL_AREA *)v3);
  *(_DWORD *)(v3 + 56) |= 0x100u;
  P = *(PVOID *)(v4 + 8);
  if( v15 == 1 )
  {
    ++*(_DWORD *)(v3 + 76);
    ExReleaseSpinLockExclusiveFromDpcLevel((INT64 *)(v3 + 72));
    __writecr8(v6);
    IsSubsectionClean = MiIsSubsectionClean(v4, v16);
    if( IsSubsectionClean )
    {
      if( IsSubsectionClean == 1 )
      {
        v19 = ExAcquireSpinLockExclusive((PEX_SPIN_LOCK)(v3 + 72));
        *(_DWORD *)(v4 + 52) |= 0x80000000;
        v20 = v19;
        ExReleaseSpinLockExclusiveFromDpcLevel((INT64 *)(v3 + 72));
        __writecr8(v20);
      }
      v18 = -1073741792;
    }
    else
    {
      v18 = 0;
    }
  }
  else
  {
    v21 = (_FILE_OBJECT *)MiPreventControlAreaDelete(v3);
    ExReleaseSpinLockExclusiveFromDpcLevel((INT64 *)(v3 + 72));
    __writecr8(v6);
    v43 = *(_QWORD *)(v4 + 8);
    v41 = v43 - 8 + 8i64 * *(unsigned int *)(v4 + 44);
    v18 = FsRtlAcquireFileForCcFlushEx(v21);
    v22 = ExAcquireSpinLockExclusive((PEX_SPIN_LOCK)(v3 + 72));
    v23 = _InterlockedDecrement64((volatile signed __int64 *)(v3 + 112));
    v38 = v23;
    *(_QWORD *)(*(_QWORD *)(qword_140C4E388 + 8i64 * (*(_WORD *)(v3 + 60) & 0x3FF)) + 1688i64) = 0i64;
    if( v18 < 0 || (*(_DWORD *)(v3 + 56) & 1) != 0 )
    {
      if( v23 )
        ++*(_DWORD *)(v3 + 76);
      ExReleaseSpinLockExclusiveFromDpcLevel((INT64 *)(v3 + 72));
      __writecr8(v22);
      if( v18 >= 0 )
      {
        FsRtlReleaseFileForCcFlush(v21);
        v18 = -1073741431;
      }
      if( !v38 )
      {
        MiDeleteControlArea((_CONTROL_AREA *)v3);
        ObfDereferenceObjectWithTag(v21, 0x746C6644ui64);
        return v18;
      }
    }
    else
    {
      ++*(_DWORD *)(v3 + 76);
      ExReleaseSpinLockExclusiveFromDpcLevel((INT64 *)(v3 + 72));
      __writecr8(v22);
      *((_QWORD *)KeGetCurrentThread() + 152) = 1i64;
      v18 = MiFlushSectionInternal(v43, v41, (__int64 *)v4, v4, 0i64, 2u, (__int64)v39);
      *((_QWORD *)KeGetCurrentThread() + 152) = 0i64;
      FsRtlReleaseFileForCcFlush(v21);
    }
    MiDereferenceControlAreaFile(v3, (unsigned __int64)v21);
  }
  v24 = ExAcquireSpinLockExclusive((PEX_SPIN_LOCK)(v3 + 72));
  v25 = *(_DWORD *)(v3 + 56);
  v26 = v24;
  if( (v25 & 1) == 0 )
  {
    if( v18 >= 0 )
    {
      if( *(_QWORD *)(v4 + 96) == 1i64 && (*(_BYTE *)(v4 + 32) & 1) == 0 )
      {
        ExReleaseSpinLockExclusiveFromDpcLevel((INT64 *)(v3 + 72));
        __writecr8(v26);
        v27 = MiPurgeSubsection((_MSUBSECTION *)v4) == 0;
        v28 = ExAcquireSpinLockExclusive((PEX_SPIN_LOCK)(v3 + 72));
        v25 = *(_DWORD *)(v3 + 56);
        LOBYTE(v26) = v28;
        v29 = v27;
        goto LABEL_46;
      }
      v18 = -1073741823;
    }
    v29 = 1;
LABEL_46:
    v30 = v25 & 0xFFFFFEFF;
    *(_DWORD *)(v3 + 56) = v30;
    if( (v30 & 1) != 0 )
      goto LABEL_47;
    v33 = 0i64;
    if( v29 == 1 || *(_QWORD *)(v4 + 96) != 1i64 || *(_DWORD *)(v4 + 104) || (*(_BYTE *)(v4 + 32) & 1) != 0 )
    {
      v18 = -1073741823;
      v33 = MiDecrementSubsectionViewCount((INT64 *)v4, 0);
      if( !*(_QWORD *)(v4 + 96) )
        v33 += MiInsertUnusedSubsection((_MSUBSECTION *)v4, v34);
      P = 0i64;
    }
    else
    {
      MiUpdateSystemProtoPtesTree((RTL_BALANCED_NODE *)(v4 + 112), 0i64);
      *(_QWORD *)(v4 + 8) = 0i64;
      *(_QWORD *)(v4 + 96) = 0i64;
    }
    MiDecrementModifiedWriteCount((_CONTROL_AREA *)v3, (_BYTE *)1);
    v37 = v36;
    if( *(_QWORD *)(v3 + 24) | *(_QWORD *)(v3 + 40) )
    {
      ExReleaseSpinLockExclusiveFromDpcLevel((INT64 *)(v3 + 72));
    }
    else
    {
      if( !*(_QWORD *)(v3 + 32) )
      {
        LOBYTE(v35) = v26;
        MiDestroySection((_CONTROL_AREA *)v3, v35, 0i64);
        goto LABEL_64;
      }
      v33 += MiInsertUnusedSegment((_CONTROL_AREA *)v3);
      ExReleaseSpinLockExclusiveFromDpcLevel((INT64 *)(v3 + 72));
    }
    __writecr8((unsigned __int8)v26);
LABEL_64:
    if( v37 )
      MiReleaseControlAreaWaiters(v37);
    if( v33 )
      MiReturnCrossPartitionSectionCharges((volatile INT64 *)Partition, 1i64, v33);
    if( P )
      ExFreePoolWithTag(P, 0);
    return v18;
  }
  *(_DWORD *)(v3 + 56) = v25 & 0xFFFFFEFF;
LABEL_47:
  MiDecrementSubsectionViewCount((INT64 *)v4, 0);
  MiDecrementModifiedWriteCount((_CONTROL_AREA *)v3, (_BYTE *)1);
  v32 = v31;
  ExReleaseSpinLockExclusiveFromDpcLevel((INT64 *)(v3 + 72));
  __writecr8((unsigned __int8)v26);
  if( v32 )
    MiReleaseControlAreaWaiters(v32);
  return -1073741823;
}

Referenced by:

MiRemoveUnusedSegments