MiZeroPageThread

VOID __stdcall MiZeroPageThread(VOID *Context){
  _MI_ZERO_THREAD_CONTEXT *v2; 
  unsigned int v3; 
  _ETHREAD *CurrentThread; 
  unsigned int v5; 
  int v6; 
  unsigned int i; 
  INT64 a2; 

  if( Context != &Irp || MiZeroBootLargePages((INT64)Context) < 0 )
  {
    v2 = (_MI_ZERO_THREAD_CONTEXT *)*((_QWORD *)Context + 805);
    v3 = 0;
    v2[67] = -1;
    MiInitializeColorTable(v2 + 62, 0);
    CurrentThread = (_ETHREAD *)KeGetCurrentThread();
    a2 = 0i64;
    CurrentThread->SameThreadPassiveFlags |= 0x400u;
    v5 = MiSetZeroPageThreadPriority((INT64)Context, (INT64)CurrentThread, 0i64);
    while( 1 )
    {
      v6 = MiWaitForFreePagesToZero((_MI_PARTITION *)Context, &a2, v3);
      if( v6 == -1 )
        break;
      if( v3 != v6 )
      {
        v3 = v6;
        MiInitializeColorTable(v2 + 62, v6);
      }
      for( i = 0; i <= 3; ++i )
      {
        if( MiGetPagesToZero((INT64)Context, (UINT64)v2, i) )
          break;
      }
      if( i <= 3 )
        MiZeroPage((__int64)v2, (__int64)Context);
    }
    MiSetZeroPageThreadPriority((INT64)Context, (INT64)CurrentThread, v5);
    CurrentThread->SameThreadPassiveFlags &= ~0x400u;
    MiDeleteZeroThreadContext(v2);
    *((_QWORD *)Context + 805) = 0i64;
  }
}

Referenced by:

No references.