MiPurgeLargeZeroNodePages

VOID __stdcall MiPurgeLargeZeroNodePages(_MI_PARTITION *Partition){
  WORK_QUEUE_TYPE v1; 
  void *v2; 
  unsigned __int64 v3; 
  _LIST_ENTRY *v4; 
  unsigned __int8 CurrentIrql; 
  unsigned int v6; 
  int *v7; 
  _QWORD *v8; 
  unsigned int v9; 
  unsigned int v10; 
  __int64 v11; 
  __int64 v12; 
  int v13; 
  _QWORD *v14; 
  unsigned int v15; 
  WORK_QUEUE_TYPE v16; 
  PVOID v17; 
  __int64 v18; 
  __int64 v19; 
  int *v20; 
  _QWORD *v21; 
  unsigned __int64 v22; 
  struct _IO_WORKITEM LockHandle; 
  int v24; 
  int v25; 
  unsigned int v26; 
  int v27; 
  v24 = (int)Partition;
  v3 = *((_QWORD *)Partition + 2);
  memset(&LockHandle, 0, 24);
  v22 = v3 + 4544i64 * (unsigned __int16)KeNumberNodes;
  if( v3 < v22 )
  {
    v4 = (_LIST_ENTRY *)(v3 + 4328);
    do
    {
      CurrentIrql = KeGetCurrentIrql();
      __writecr8(2ui64);
      LockHandle.WorkItem.List.Flink = 0i64;
      LockHandle.WorkItem.List.Blink = v4;
      KxAcquireQueuedSpinLock(&LockHandle, (PIO_WORKITEM_ROUTINE)v4, v1, v2);
      v6 = 0;
      v21 = (_QWORD *)v3;
      v7 = dword_140C4DCC0;
      v26 = 0;
      v20 = dword_140C4DCC0;
      v8 = (_QWORD *)v3;
      do
      {
        if( *v8 )
        {
          v9 = *v7;
          v10 = 0;
          v27 = *v7;
          if( MmNumberOfChannels )
          {
            do
            {
              v11 = 32i64 * v10 + 560;
              v25 = 0;
              v19 = v11;
              do
              {
                v12 = v11;
                v13 = 0;
                v18 = v11;
                do
                {
                  v14 = *(_QWORD **)((char *)v8 + v12);
                  v15 = 0;
                  if( v9 )
                  {
                    do
                    {
                      if( (_QWORD *)*v14 != v14 )
                      {
                        if( !(unsigned int)MiMoveLargeZeroToFree(v24, v3, v6, v25, v15, v10, v13) )
                        {
                          KeReleaseInStackQueuedSpinLockFromDpcLevel((_KLOCK_QUEUE_HANDLE *)&LockHandle);
                          __writecr8(CurrentIrql);
                          --v15;
                          v14 -= 3;
                          CurrentIrql = KeGetCurrentIrql();
                          __writecr8(2ui64);
                          LockHandle.WorkItem.List.Flink = 0i64;
                          LockHandle.WorkItem.List.Blink = v4;
                          KxAcquireQueuedSpinLock(&LockHandle, (PIO_WORKITEM_ROUTINE)v4, v16, v17);
                        }
                        v9 = v27;
                        v6 = v26;
                      }
                      ++v15;
                      v14 += 3;
                    }
                    while( v15 < v9 );
                    v8 = v21;
                    v12 = v18;
                  }
                  v12 += 8i64;
                  ++v13;
                  v18 = v12;
                }
                while( v13 <= 3 );
                ++v25;
                v11 = v19 + 256;
                v19 += 256i64;
              }
              while( v25 <= 1 );
              ++v10;
            }
            while( v10 < MmNumberOfChannels );
            v7 = v20;
          }
        }
        ++v6;
        ++v7;
        v8 += 134;
        v26 = v6;
        v20 = v7;
        v21 = v8;
      }
      while( v6 < 3 );
      KeReleaseInStackQueuedSpinLockFromDpcLevel((_KLOCK_QUEUE_HANDLE *)&LockHandle);
      __writecr8(CurrentIrql);
      v3 += 4544i64;
      v4 += 284;
    }
    while( v3 < v22 );
  }
}

Referenced by:

MiPurgeZeroList