MiDeleteBatch

INT64 __fastcall MiDeleteBatch(UINT8 *a1){
  bool v1; 
  INT64 result; 
  INT64 v4; 
  _LIST_ENTRY *v5; 
  WORK_QUEUE_TYPE v6; 
  PVOID v7; 
  UINT8 v8; 
  _MMPFN *PfnDb; 
  char *v10; 
  char *v11; 
  unsigned __int64 v12; 
  _MMPFN *v13; 
  char v14; 
  char *v15; 
  UINT64 v16; 
  char v17; 
  volatile signed __int64 *v18; 
  __int64 v19; 
  UNICODE_STRING *v20; 
  UINT8 v21; 
  WCHAR *v22; 
  int v23; 
  INT64 v24; 
  __int64 v25; 
  unsigned __int64 v26; 
  UINT8 i; 
  UINT64 v28; 
  struct _IO_WORKITEM LockHandle; 
  UINT64 SpinCount; 
  INT64 v31; 
  v1 = *a1 == 0;
  LockHandle.WorkItem.WorkerRoutine = 0i64;
  if( v1 )
    return 0i64;
  v4 = 0i64;
  v31 = *((_QWORD *)a1 + 2);
  v5 = *(_LIST_ENTRY **)(qword_140C4E388
                       + 8
                       * ((*((_QWORD *)MmGetPfnDb()
                           + 6 * (((unsigned __int64)MI_READ_PTE_LOCK_FREE((INT64)&v31) >> 12) & 0xFFFFFFFFFi64)
                           + 5) >> 39) & 0x3FFi64));
  LockHandle.WorkItem.List.Flink = 0i64;
  LockHandle.WorkItem.List.Blink = v5 + 470;
  KxAcquireQueuedSpinLock(&LockHandle, (PIO_WORKITEM_ROUTINE)&v5[470], v6, v7);
  v8 = 0;
  if( *a1 )
  {
    PfnDb = MmGetPfnDb();
    v10 = (char *)PfnDb + 16;
    do
    {
      v31 = *(_QWORD *)&a1[8 * v8 + 16];
      v11 = (char *)MmGetPfnDb() + 34;
      v12 = 48 * (((unsigned __int64)v31 >> 12) & 0xFFFFFFFFFi64);
      v13 = (_MMPFN *)((char *)PfnDb + v12);
      v14 = v11[v12];
      v15 = &v11[v12];
      if( (v14 & 7) != 6 )
        MiBadShareCount(v13);
      v16 = 0i64;
      if( (v31 & 0x42) != 0 && (v14 & 0x10) == 0 )
      {
        v17 = v14;
        if( (*(_DWORD *)&v10[v12] & 0x400i64) == 0 && (v14 & 8) == 0 )
        {
          v16 = MiCapturePageFileInfoInline((UINT64 *)&v10[v12], 1i64, 0i64);
          v17 = *v15;
        }
        *v15 = v17 | 0x10;
      }
      *(_QWORD *)&a1[8 * v8 + 16] = v16;
      v18 = (volatile signed __int64 *)((char *)MmGetPfnDb() + v12 + 24);
      v19 = *v18 ^ (*v18 ^ (*v18 - 1)) & 0x3FFFFFFFFFFFFFFFi64;
      *v18 = v19;
      if( (v19 & 0x3FFFFFFFFFFFFFFFi64) == 0 && (unsigned int)MiPfnShareCountIsZero((UINT64)v13, 1ui64) == 3 )
      {
        LOBYTE(v23) = MI_PFN_IS_PROTO((UNICODE_STRING *)v13, v20, v21, v22);
        if( !v23 )
          ++v4;
      }
      _InterlockedAnd64(v18, 0x7FFFFFFFFFFFFFFFui64);
      ++v8;
      v10 = (char *)MmGetPfnDb() + 16;
      PfnDb = MmGetPfnDb();
    }
    while( v8 < *a1 );
  }
  KeReleaseInStackQueuedSpinLockFromDpcLevel((_KLOCK_QUEUE_HANDLE *)&LockHandle);
  v25 = *((_QWORD *)a1 + 1);
  if( a1[1] == 1 )
  {
    MiLockNestedPageAtDpcInline(*((_QWORD *)a1 + 1));
  }
  else
  {
    LODWORD(SpinCount) = 0;
    while( _interlockedbittestandset64((volatile signed __int32 *)(v25 + 24), 0x3Fui64) )
    {
      do
        KeYieldProcessorEx(&SpinCount);
      while( *(__int64 *)(v25 + 24) < 0 );
    }
  }
  if( (*(_BYTE *)(v25 + 34) & 7) != 6 || (v26 = *a1, (*(_QWORD *)(v25 + 24) & 0x3FFFFFFFFFFFFFFFui64) < v26) )
    MiBadShareCount((_MMPFN *)v25);
  *(_QWORD *)(v25 + 24) ^= (*(_QWORD *)(v25 + 24) ^ (*(_QWORD *)(v25 + 24) - v26)) & 0x3FFFFFFFFFFFFFFFi64;
  _InterlockedAnd64((volatile signed __int64 *)(v25 + 24), 0x7FFFFFFFFFFFFFFFui64);
  for( i = 0; i < *a1; ++i )
  {
    v28 = *(_QWORD *)&a1[8 * i + 16];
    if( v28 )
      MiReleasePageFileInfo(
        (INT64)v5,
        v28,
        1,
        v24,
        (INT64)LockHandle.WorkItem.List.Flink,
        (INT64)LockHandle.WorkItem.List.Blink,
        (INT64)LockHandle.WorkItem.WorkerRoutine,
        (INT64)LockHandle.WorkItem.Parameter,
        (INT64)LockHandle.Routine,
        (INT64)LockHandle.IoObject,
        (INT64)LockHandle.Context,
        (INT64)LockHandle.WorkOnBehalfThread);
  }
  result = v4;
  *a1 = 0;
  return result;
}

Referenced by:

MiDeleteClusterPage
MiDeletePteRun