MiInsertSharedCommitNode

__int64 __fastcall MiInsertSharedCommitNode(_QWORD *a1, unsigned __int64 a2, int a3){
  __int64 *v6; 
  int inserted; 
  unsigned __int64 v8; 
  __int64 v9; 
  _ETHREAD *CurrentThread; 
  _QWORD **v11; 
  _QWORD *v12; 
  bool v13; 
  int v14; 
  _QWORD *PoolMm; 
  unsigned __int64 CommittedPages; 
  _QWORD *v17; 
  _QWORD *v18; 
  _QWORD *v19; 
  volatile signed __int64 *v20; 
  _QWORD *v22; 
  UINT64 v23; 
  unsigned __int64 v24; 
  __int64 v25; 
  unsigned __int64 *v26; 
  if( !(unsigned int)MiIncludeSharedCommit((_CONTROL_AREA *)a1) || (v6[7] & 0x20) != 0 )
    return 0i64;
  inserted = 0;
  if( (a2 & 1) == 0 )
  {
    v8 = a2;
    if( (*(_DWORD *)(a2 + 2172) & 0x10) == 0 )
    {
      v24 = 0i64;
      v23 = 64i64;
      goto LABEL_6;
    }
    return 0i64;
  }
  v23 = 40i64;
  v8 = 0i64;
  v24 = a2 & 0xFFFFFFFFFFFFFFFEui64;
LABEL_6:
  v9 = *v6;
  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  v11 = (_QWORD **)(v9 + 72);
  v26 = (unsigned __int64 *)(v9 + 72);
  v25 = v9;
  if( (a3 & 1) == 0 )
  {
    --*((_WORD *)CurrentThread + 243);
    ExAcquirePushLockExclusiveEx(v8 + 2352, 0i64);
    v9 = v25;
  }
  if( (a3 & 2) == 0 )
  {
    --*((_WORD *)CurrentThread + 243);
    ExAcquirePushLockExclusiveEx(v9 + 40, 0i64);
  }
  v12 = *v11;
  v13 = 0;
  if( !v12 )
    goto LABEL_11;
  while( a2 <= v12[3] )
  {
    if( a2 >= v12[3] )
    {
      ++v12[4];
      goto LABEL_21;
    }
    v22 = (_QWORD *)*v12;
    if( !*v12 )
      goto LABEL_11;
LABEL_32:
    v12 = v22;
  }
  v22 = (_QWORD *)v12[1];
  if( v22 )
    goto LABEL_32;
  v13 = 1;
LABEL_11:
  LOWORD(v14) = MmGetCurrentProcessorColor();
  PoolMm = ExAllocatePoolMm(256i64, v23, 0x6E53694Dui64, v14 | 0x80000000);
  if( PoolMm )
  {
    PoolMm[4] = 1i64;
    PoolMm[3] = a2;
    CommittedPages = MiGetCommittedPages(a1);
    if( v8 )
    {
      v17[7] = a1;
      v18 = *(_QWORD **)(v8 + 2368);
      v19 = v17 + 5;
      if( *v18 != v8 + 2360 )
        __fastfail(3u);
      *v19 = v8 + 2360;
      v17[6] = v18;
      *v18 = v19;
      *(_QWORD *)(v8 + 2368) = v19;
      v20 = (volatile signed __int64 *)(v8 + 2344);
    }
    else
    {
      v20 = (volatile signed __int64 *)(v24 + 1336);
    }
    _InterlockedExchangeAdd64(v20, CommittedPages);
    RtlAvlInsertNodeEx(v26, (__int64)v12, v13, v17);
    if( v8 )
    {
      if( (*(_DWORD *)(v8 + 2172) & 8) != 0 )
      {
        inserted = MiInsertSharedCommitNode(a1, *(_QWORD *)(v8 + 1296) | 1i64, 3);
        if( inserted < 0 )
          MiRemoveSharedCommitNode(a1, v8, a3 | 7u);
      }
    }
  }
  else
  {
    inserted = -1073741670;
  }
LABEL_21:
  if( (a3 & 2) == 0 )
  {
    if( (_InterlockedExchangeAdd64((volatile signed __int64 *)(v25 + 40), 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
      ExfTryToWakePushLock((volatile INT64 *)(v25 + 40));
    KeAbPostRelease((PVOID)(v25 + 40));
    KiLeaveGuardedRegionUnsafe((__int64)CurrentThread);
  }
  if( (a3 & 1) == 0 )
  {
    if( (_InterlockedExchangeAdd64((volatile signed __int64 *)(v8 + 2352), 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
      ExfTryToWakePushLock((volatile INT64 *)(v8 + 2352));
    KeAbPostRelease((PVOID)(v8 + 2352));
    KiLeaveGuardedRegionUnsafe((__int64)CurrentThread);
  }
  return(unsigned int)inserted;
}

Referenced by:

MiAllocateChildVads
MiDeletePartialVad
MiInsertSharedCommitNode
MiMapViewOfDataSection
MiMapViewOfImageSection
MiSectionOpen
MmLinkJobProcess