MiComputeDataFlushRange

__int64 __fastcall MiComputeDataFlushRange(
        __int64 a1,
        unsigned __int8 a2,
        unsigned __int64 *a3,
        __int64 a4,
        int a5,
        __int64 a6){
  unsigned __int64 v8; 
  __int64 v9; 
  _SUBSECTION *v10; 
  __int64 v11; 
  unsigned __int64 v12; 
  _SUBSECTION *SubsectionNode; 
  unsigned __int64 v14; 
  unsigned __int64 v15; 
  _SUBSECTION *v16; 
  _SUBSECTION *LastSubsection; 
  unsigned __int64 v18; 
  int v19; 
  int v20; 
  __int64 v21; 
  int v22; 
  _QWORD *v23; 
  _QWORD *v24; 
  __int64 v25; 
  __int64 result; 
  INT64 *v27; 
  __int64 v28; 
  int v29; 
  v8 = a2;
  v9 = a1;
  if( !*(_QWORD *)(a1 + 32) )
  {
    v27 = (INT64 *)(a1 + 72);
LABEL_18:
    ExReleaseSpinLockExclusiveFromDpcLevel(v27);
LABEL_19:
    __writecr8(v8);
    return 0i64;
  }
  v10 = 0i64;
  v11 = a1 + 128;
  if( !a3 )
  {
    v14 = 0i64;
LABEL_16:
    LastSubsection = MiFindLastSubsection((_CONTROL_AREA *)a1, 1ui64);
    v18 = *((_DWORD *)LastSubsection + 11) - (*((_DWORD *)LastSubsection + 13) & 0x3FFFFFFFu) - 1;
    goto LABEL_7;
  }
  v12 = *a3 >> 12;
  SubsectionNode = MiLocateSubsectionNode((_CONTROL_AREA *)a1, *a3, 1ui64);
  v11 = (__int64)SubsectionNode;
  if( !SubsectionNode )
  {
LABEL_24:
    v27 = (INT64 *)(v9 + 72);
    goto LABEL_18;
  }
  v14 = v12
      - (*((unsigned int *)SubsectionNode + 9) | ((unsigned __int64)(*((_WORD *)SubsectionNode + 16) & 0xFFC0) << 26));
  if( !a4
    || (v15 = (*a3 + a4 - 1) >> 12,
        v16 = MiLocateSubsectionNode((_CONTROL_AREA *)v9, *a3 + a4 - 1, 1ui64),
        (LastSubsection = v16) == 0i64) )
  {
    a1 = v9;
    goto LABEL_16;
  }
  v18 = v15 - (*((unsigned int *)v16 + 9) | ((unsigned __int64)(*((_WORD *)v16 + 16) & 0xFFC0) << 26));
LABEL_7:
  if( !*(_DWORD *)(v11 + 104) || (MiReferenceSubsection((_SUBSECTION *)v11, 0i64), v19 <= 1) )
  {
    v20 = *(_DWORD *)(v11 + 44) - v14;
    if( (_SUBSECTION *)v11 == LastSubsection )
    {
LABEL_26:
      ExReleaseSpinLockExclusiveFromDpcLevel((INT64 *)(v9 + 72));
      goto LABEL_19;
    }
    while( 1 )
    {
      v11 = *(_QWORD *)(v11 + 16);
      if( !v11 )
        goto LABEL_24;
      if( *(_DWORD *)(v11 + 104) )
      {
        MiReferenceSubsection((_SUBSECTION *)v11, 0i64);
        if( v29 > 1 )
        {
          v21 = *(_QWORD *)(v11 + 8);
          goto LABEL_10;
        }
      }
      v20 += *(_DWORD *)(v11 + 44);
      if( (_SUBSECTION *)v11 == LastSubsection )
        goto LABEL_26;
    }
  }
  v20 = 0;
  v21 = *(_QWORD *)(v11 + 8) + 8 * v14;
LABEL_10:
  if( !*((_DWORD *)LastSubsection + 26) || (MiReferenceSubsection(LastSubsection, 0i64), v22 <= 1) )
  {
    v28 = *(_QWORD *)(v11 + 16);
    if( (_SUBSECTION *)v28 == LastSubsection )
      goto LABEL_22;
    do
    {
      if( *(_DWORD *)(v28 + 104) && *(_QWORD *)(v28 + 8) )
        v10 = (_SUBSECTION *)v28;
      v28 = *(_QWORD *)(v28 + 16);
    }
    while( (_SUBSECTION *)v28 != LastSubsection );
    if( !v10 )
LABEL_22:
      LastSubsection = (_SUBSECTION *)v11;
    else
      LastSubsection = v10;
    MiReferenceSubsection(LastSubsection, 0i64);
    v18 = *((_DWORD *)LastSubsection + 11) - (*((_DWORD *)LastSubsection + 13) & 0x3FFFFFFFu) - 1;
  }
  ++*(_QWORD *)(v9 + 40);
  MiBuildWakeList((_CONTROL_AREA *)v9, 4ui64);
  v24 = v23;
  MiRemoveUnusedSegment((_CONTROL_AREA *)v9);
  if( a5 == 1 )
    *(_DWORD *)(v9 + 56) |= 4u;
  ExReleaseSpinLockExclusiveFromDpcLevel((INT64 *)(v9 + 72));
  __writecr8(v8);
  MiReleaseControlAreaWaiters(v24);
  v25 = *((_QWORD *)LastSubsection + 1);
  *(_QWORD *)a6 = v9;
  *(_QWORD *)(a6 + 8) = v21;
  *(_QWORD *)(a6 + 16) = v25 + 8 * v18;
  result = 259i64;
  *(_QWORD *)(a6 + 24) = v11;
  *(_QWORD *)(a6 + 32) = LastSubsection;
  *(_DWORD *)(a6 + 40) = v20;
  return result;
}

Referenced by:

MiComputeFlushRange
MmPurgeSection