MiZeroInParallelWorker

VOID __stdcall MiZeroInParallelWorker(PVOID Context){
  char *v1; 
  _ETHREAD *CurrentThread; 
  KPRIORITY v3; 
  __int64 v4; 
  __int64 v5; 
  INT64 v6; 
  unsigned __int64 v7; 
  int v8; 
  UINT64 v9; 
  int v10; 
  INT64 *v11; 
  __int64 v12; 
  INT64 v13; 
  UINT64 v14; 
  unsigned int PfnPageSizeIndex; 
  unsigned int v16; 
  unsigned __int64 v17; 
  unsigned __int64 v18; 
  UINT64 v19; 
  UINT64 v20; 
  int v21; 
  UINT64 Processor; 
  INT64 v23; 
  unsigned int v24; 
  _ETHREAD *v25; 
  __int64 v26; 
  __int64 *v27; 
  struct _GROUP_AFFINITY Affinity; 
  INT64 v30[16]; 
  v1 = (char *)Context;
  memset((INT64)v30, 0i64);
  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  v3 = -1;
  v27 = (__int64 *)*((_QWORD *)v1 + 1);
  Processor = 0xFFFFFFFF00000000ui64;
  v4 = *v27;
  v5 = *((unsigned int *)v27 + 4);
  v24 = *((_DWORD *)v27 + 3);
  v25 = CurrentThread;
  if( KeGetCurrentIrql() == 2 || *((VOID(__stdcall **)(PVOID))CurrentThread + 154) == KiExecuteDpc )
  {
    CurrentThread = 0i64;
    v25 = 0i64;
  }
  else if( *(_DWORD *)v1 != -1 )
  {
    v3 = KeSetPriorityThread((PKTHREAD)CurrentThread, *(_DWORD *)v1);
    HIDWORD(Processor) = v3;
  }
  v6 = 0i64;
  v23 = 0i64;
  LODWORD(v7) = 0;
  v8 = (unsigned int)MiCreateUltraThreadContext((INT64)v30, 0i64, 15i64) != 0 ? 0xF : 0;
  v21 = v8;
  if( (_DWORD)v5 )
  {
    v9 = 0i64;
    v10 = v8;
    v11 = (INT64 *)(v4 + 32);
    v12 = v5;
    v26 = v5;
    do
    {
      if( !*((_DWORD *)v11 - 8) && _InterlockedIncrement((volatile signed __int32 *)v11 - 8) == 1 )
      {
        if( CurrentThread )
        {
          Affinity = *(struct _GROUP_AFFINITY *)(v11 - 3);
          LODWORD(Processor) = MiSetIdealProcessorThread(&Affinity);
        }
        v13 = *v11;
        if( (INT64 *)*v11 != v11 )
        {
          do
          {
            v14 = 3i64;
            if( (*(_QWORD *)(v13 + 40) & 0x1000000000i64) == 0 )
              goto LABEL_18;
            PfnPageSizeIndex = MiGetPfnPageSizeIndex(v13);
            v14 = PfnPageSizeIndex;
            if( PfnPageSizeIndex == -1 )
              v14 = v16;
            if( (unsigned int)v14 < v16 )
              v17 = MiLargePageSizes[v14];
            else
LABEL_18:
              v17 = 1i64;
            if( (unsigned int)v14 > 2 || *(unsigned __int8 *)(v13 + 34) >> 6 == v24 )
            {
              if( v10 )
              {
                MiZeroWithUltraSpace((INT64)v30, v13);
              }
              else
              {
                if( !v6 )
                  goto LABEL_28;
                if( v9 < v17 )
                {
                  MiReleasePtes((INT64)&qword_140C4EC80, v6, (unsigned int)v7);
                  v6 = 0i64;
                }
                if( v6 )
                {
                  v19 = v23;
                }
                else
                {
LABEL_28:
                  v18 = *(v11 - 1);
                  v7 = v17;
                  if( v18 > 0x4000 )
                    v18 = 0x4000i64;
                  if( v18 >= v17 )
                    v7 = v18;
                  do
                  {
                    v6 = MiReservePtes((INT64)&qword_140C4EC80, (unsigned int)v7);
                    if( v6 )
                      break;
                    v7 = (v7 >> 1) & ~(v17 - 1);
                  }
                  while( v7 >= v17 );
                  v19 = v6;
                  v9 = v7;
                  v23 = v6;
                }
                v20 = MiZeroWithSystemPtes(v19, v9, v13);
                v9 -= v20;
                v23 += 8 * v20;
              }
            }
            else
            {
              MiZeroAndConvertPage(v13, v14, v24, *((_DWORD *)v27 + 2));
            }
            v13 = *(_QWORD *)v13;
            *(v11 - 1) -= v17;
          }
          while( (INT64 *)v13 != v11 );
          CurrentThread = v25;
          v12 = v26;
        }
        if( CurrentThread && (_DWORD)Processor != -1 )
          KeSetIdealProcessorThreadEx(KeGetCurrentThread(), (unsigned int)Processor, 0i64);
      }
      v11 += 6;
      v26 = --v12;
    }
    while( v12 );
    v1 = (char *)Context;
    v3 = HIDWORD(Processor);
    if( v6 )
      MiReleasePtes((INT64)&qword_140C4EC80, v6, (unsigned int)v7);
    v8 = v21;
  }
  if( _InterlockedExchangeAdd((volatile signed __int32 *)v1 + 1, 0xFFFFFFFF) == 1 )
    KeSignalGate((_KGATE *)(v1 + 16), 1i64);
  if( v3 != -1 )
    KeSetPriorityThread((PKTHREAD)CurrentThread, v3);
  if( v8 )
    MiDeleteUltraThreadContext((INT64)v30);
}

Referenced by:

MiZeroInParallel