MiAppendSubsectionChain

INT64 __fastcall MiAppendSubsectionChain(INT64 a1, INT64 a2, CHAR a3){
  __int64 v4; 
  bool v6; 
  UINT64 v7; 
  KIRQL v8; 
  UINT64 v9; 
  _CONTROL_AREA *v10; 
  unsigned int v11; 
  unsigned __int64 v12; 
  int v13; 
  __int64 v14; 
  __int64 j; 
  __int64 i; 
  __int64 v18; 
  UINT64 inserted; 
  INT64 v20; 
  _CONTROL_AREA *ControlArea; 
  v4 = *(_QWORD *)(a2 + 16);
  v6 = 0;
  ControlArea = *(_CONTROL_AREA **)a1;
  v7 = 0i64;
  v8 = ExAcquireSpinLockExclusive((PEX_SPIN_LOCK)(*(_QWORD *)a1 + 72i64));
  v10 = ControlArea;
  v11 = 2;
  v12 = v8;
  if( *((_QWORD *)ControlArea + 6) )
  {
    if( (*(_DWORD *)(a1 + 48) & 0x3FFFFFFF) != 0 )
    {
      if( (a3 & 2) == 0 )
      {
        ExReleaseSpinLockExclusiveFromDpcLevel((INT64 *)ControlArea + 9);
        goto LABEL_13;
      }
    }
    else
    {
      v6 = (a3 & 2) != 0;
    }
    if( (a3 & 1) != 0 )
    {
      for( i = v4; i; i = *(_QWORD *)(v18 + 16) )
      {
        *(_WORD *)(i + 34) |= 1u;
        if( MiControlAreaUsingExtents((INT64)v10) )
          *(_DWORD *)(v18 + 52) |= 0x40000000u;
      }
      goto LABEL_18;
    }
    ExReleaseSpinLockExclusiveFromDpcLevel((INT64 *)ControlArea + 9);
    v11 = 1;
LABEL_13:
    __writecr8(v12);
    return v11;
  }
  if( *(_QWORD *)(v4 + 8) )
  {
    do
    {
      if( (*(_DWORD *)(v4 + 48) & 0x3FFFFFFF) != 0 )
        MiUpdateSubsectionCrossPartitionRefs((_DWORD *)v4, 0x3FFFFFFFi64);
      *(_QWORD *)(v4 + 96) = 0i64;
      inserted = MiInsertUnusedSubsection((_MSUBSECTION *)v4, v9);
      v4 = *(_QWORD *)(v4 + 16);
      v7 += inserted;
    }
    while( v4 );
    goto LABEL_28;
  }
  if( (a3 & 2) != 0 )
  {
    v6 = 1;
LABEL_18:
    if( !v6 )
      goto LABEL_4;
    do
    {
      v20 = MiDecrementSubsectionViewCount((INT64 *)v4, 24);
      v4 = *(_QWORD *)(v4 + 16);
      v7 += v20;
    }
    while( v4 );
LABEL_28:
    v10 = ControlArea;
  }
LABEL_4:
  *(_WORD *)(a1 + 34) &= 0xFu;
  v13 = *(_DWORD *)(a2 + 40);
  *(_DWORD *)(a1 + 52) &= 0xC0000000;
  *(_DWORD *)(a1 + 40) = v13;
  v14 = *(_QWORD *)(a2 + 16);
  *(_QWORD *)(a1 + 16) = v14;
  for( j = v14; j; v10 = ControlArea )
  {
    MiInsertSubsectionNode(v10, (_MSUBSECTION *)j, 1ui64);
    j = *(_QWORD *)(j + 16);
  }
  ExReleaseSpinLockExclusiveFromDpcLevel((INT64 *)ControlArea + 9);
  __writecr8(v12);
  if( v7 )
    MiReturnCrossPartitionSectionCharges(
      *(volatile INT64 **)(qword_140C4E388 + 8i64 * (*((_WORD *)ControlArea + 30) & 0x3FF)),
      1i64,
      v7);
  return 0i64;
}

Referenced by:

MiExtendSection