MiCombiningInProgress

VOID __stdcall MiCombiningInProgress(_MI_PAGE_COMBINING_SUPPORT *Pcs, _MI_ARBITRARY_PAGE_MAP *PageMap, UINT64 Starting){
  _MI_PARTITION *Partition; 
  int v5; 
  unsigned __int64 v7; 
  _ETHREAD *CurrentThread; 
  _QWORD *p_Flink; 
  _LIST_ENTRY *Flink; 
  BOOL v11; 
  _QWORD *v12; 
  _QWORD *v13; 
  __int64 v14; 
  _MI_ARBITRARY_PAGE_MAP **v15; 

  Partition = Pcs->Partition;
  v5 = Starting;
  v7 = (unsigned __int8)ExAcquireSpinLockExclusive((INT64 *)&stru_140C4DB30 + 234);
  if( v5 != 1 )
  {
    v14 = *(_QWORD *)PageMap;
    v15 = (_MI_ARBITRARY_PAGE_MAP **)*((_QWORD *)PageMap + 1);
    if( *(_MI_ARBITRARY_PAGE_MAP **)(*(_QWORD *)PageMap + 8i64) == PageMap && *v15 == PageMap )
    {
      *v15 = (_MI_ARBITRARY_PAGE_MAP *)v14;
      *(_QWORD *)(v14 + 8) = v15;
      RtlAvlRemoveNode((UINT64 *)&stru_140C4DB30 + 235, (INT64 *)PageMap + 2);
      --Pcs->CombiningThreadCount;
      if( *(&stru_140C4DB30 + 469) == 1 )
        MiFlushEntireTbDueToAttributeChange();
      --*(&stru_140C4DB30 + 469);
      goto LABEL_16;
    }
LABEL_19:
    __fastfail(3u);
  }
  ++Pcs->CombiningThreadCount;
  ++*(&stru_140C4DB30 + 469);
  if( !*(&stru_140C4DB30 + 474) )
  {
    *(&stru_140C4DB30 + 474) = 1;
    *(&stru_140C4DB30 + 236) = _InterlockedIncrement64(&PsNextSecurityDomain);
  }
  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  memset(PageMap, 0i64, 0x50u);
  p_Flink = &Partition->PageCombine.ArbitraryPfnMapList.Flink;
  *((_QWORD *)PageMap + 5) = CurrentThread;
  Flink = Partition->PageCombine.ArbitraryPfnMapList.Flink;
  if( Flink->Blink != &Partition->PageCombine.ArbitraryPfnMapList )
    goto LABEL_19;
  *(_QWORD *)PageMap = Flink;
  v11 = 0;
  *((_QWORD *)PageMap + 1) = p_Flink;
  Flink->Blink = (_LIST_ENTRY *)PageMap;
  *p_Flink = PageMap;
  v12 = (_QWORD *)*(&stru_140C4DB30 + 235);
  if( !*(&stru_140C4DB30 + 235) )
    goto LABEL_18;
  while( (unsigned __int64)CurrentThread < v12[3] )
  {
    v13 = (_QWORD *)*v12;
    if( !*v12 )
      goto LABEL_18;
LABEL_8:
    v12 = v13;
  }
  v13 = (_QWORD *)v12[1];
  if( v13 )
    goto LABEL_8;
  v11 = 1;
LABEL_18:
  RtlAvlInsertNodeEx(
    (_RTL_BALANCED_NODE **)&stru_140C4DB30 + 235,
    (UINT64)v12,
    v11,
    (_RTL_BALANCED_NODE *)(PageMap + 4));
LABEL_16:
  ExReleaseSpinLockExclusiveFromDpcLevel((INT64 *)&stru_140C4DB30 + 234);
  __writecr8(v7);
}

Referenced by:

MiCombineIdenticalPages