MiComputeDataFlushRange

NTSTATUS __stdcall MiComputeDataFlushRange(
        _CONTROL_AREA *ControlArea,
        UINT8 OldIrql,
        _LARGE_INTEGER *Offset,
        UINT64 RegionSize,
        UINT64 Purging,
        _MI_FLUSH_RANGE *FlushRange){
  unsigned __int64 v8; 
  _CONTROL_AREA *v9; 
  _SUBSECTION *v10; 
  _SUBSECTION *v11; 
  unsigned __int64 v12; 
  _SUBSECTION *SubsectionNode; 
  unsigned __int64 v14; 
  UINT64 v15; 
  _SUBSECTION *v16; 
  _SUBSECTION *LastSubsection; 
  UINT64 v18; 
  _MI_FLUSH_RANGE v19; 
  __int64 SubsectionBase; 
  _MI_CONTROL_AREA_WAIT_BLOCK *v21; 
  _MMPTE *v22; 
  NTSTATUS result; 
  INT64 *p_ControlAreaLock; 
  _SUBSECTION *NextSubsection; 

  v8 = OldIrql;
  v9 = ControlArea;
  if( !ControlArea->NumberOfPfnReferences )
  {
    p_ControlAreaLock = (INT64 *)&ControlArea->ControlAreaLock;
LABEL_18:
    ExReleaseSpinLockExclusiveFromDpcLevel(p_ControlAreaLock);
LABEL_19:
    __writecr8(v8);
    return 0;
  }
  v10 = 0i64;
  v11 = (_SUBSECTION *)&ControlArea[1];
  if( !Offset )
  {
    v14 = 0i64;
LABEL_16:
    LastSubsection = MiFindLastSubsection(ControlArea, 1ui64);
    v18 = LastSubsection->PtesInSubsection - (LastSubsection->_bf_34 & 0x3FFFFFFF) - 1;
    goto LABEL_7;
  }
  v12 = (unsigned __int64)Offset->QuadPart >> 12;
  SubsectionNode = MiLocateSubsectionNode(ControlArea, Offset->QuadPart, 1ui64);
  v11 = SubsectionNode;
  if( !SubsectionNode )
  {
LABEL_24:
    p_ControlAreaLock = (INT64 *)&v9->ControlAreaLock;
    goto LABEL_18;
  }
  v14 = v12
      - (SubsectionNode->StartingSector | ((unsigned __int64)(SubsectionNode->u.SubsectionFlags._bf_0 & 0xFFC0) << 26));
  if( !RegionSize
    || (v15 = (Offset->QuadPart + RegionSize - 1) >> 12,
        v16 = MiLocateSubsectionNode(v9, Offset->QuadPart + RegionSize - 1, 1ui64),
        (LastSubsection = v16) == 0i64) )
  {
    ControlArea = v9;
    goto LABEL_16;
  }
  v18 = v15 - (v16->StartingSector | ((unsigned __int64)(v16->u.SubsectionFlags._bf_0 & 0xFFC0) << 26));
LABEL_7:
  if( !v11[1].u1.e1._bf_0 || MiReferenceSubsection(v11, 0i64) <= 1 )
  {
    v19 = v11->PtesInSubsection - v14;
    if( v11 == LastSubsection )
    {
LABEL_26:
      ExReleaseSpinLockExclusiveFromDpcLevel((INT64 *)&v9->ControlAreaLock);
      goto LABEL_19;
    }
    while( 1 )
    {
      v11 = v11->NextSubsection;
      if( !v11 )
        goto LABEL_24;
      if( v11[1].u1.e1._bf_0 && MiReferenceSubsection(v11, 0i64) > 1 )
      {
        SubsectionBase = (__int64)v11->SubsectionBase;
        goto LABEL_10;
      }
      v19 += v11->PtesInSubsection;
      if( v11 == LastSubsection )
        goto LABEL_26;
    }
  }
  v19 = 0;
  SubsectionBase = (__int64)&v11->SubsectionBase[v14];
LABEL_10:
  if( !LastSubsection[1].u1.e1._bf_0 || MiReferenceSubsection(LastSubsection, 0i64) <= 1 )
  {
    NextSubsection = v11->NextSubsection;
    if( NextSubsection == LastSubsection )
      goto LABEL_22;
    do
    {
      if( NextSubsection[1].u1.e1._bf_0 && NextSubsection->SubsectionBase )
        v10 = NextSubsection;
      NextSubsection = NextSubsection->NextSubsection;
    }
    while( NextSubsection != LastSubsection );
    if( !v10 )
LABEL_22:
      LastSubsection = v11;
    else
      LastSubsection = v10;
    MiReferenceSubsection(LastSubsection, 0i64);
    v18 = LastSubsection->PtesInSubsection - (LastSubsection->_bf_34 & 0x3FFFFFFF) - 1;
  }
  ++v9->NumberOfMappedViews;
  v21 = MiBuildWakeList(v9, 4ui64);
  MiRemoveUnusedSegment(v9);
  if( (_DWORD)Purging == 1 )
    v9->u.LongFlags |= 4u;
  ExReleaseSpinLockExclusiveFromDpcLevel((INT64 *)&v9->ControlAreaLock);
  __writecr8(v8);
  MiReleaseControlAreaWaiters(v21);
  v22 = LastSubsection->SubsectionBase;
  *(_QWORD *)FlushRange = v9;
  *((_QWORD *)FlushRange + 1) = SubsectionBase;
  *((_QWORD *)FlushRange + 2) = &v22[v18];
  result = 259;
  *((_QWORD *)FlushRange + 3) = v11;
  *((_QWORD *)FlushRange + 4) = LastSubsection;
  FlushRange[10] = v19;
  return result;
}

Referenced by:

MiComputeFlushRange
MmPurgeSection