MiZeroPageThread

VOID __stdcall MiZeroPageThread(PVOID Context){
  _DWORD *v2; 
  unsigned int v3; 
  _ETHREAD *CurrentThread; 
  unsigned int v5; 
  unsigned int v6; 
  unsigned int i; 
  INT64 v8; 
  if( Context != &MiSystemPartition || (int)MiZeroBootLargePages((INT64)Context) < 0 )
  {
    v2 = (_DWORD *)*((_QWORD *)Context + 805);
    v3 = 0;
    v2[67] = -1;
    MiInitializeColorTable(v2 + 62, 0i64);
    CurrentThread = (_ETHREAD *)KeGetCurrentThread();
    v8 = 0i64;
    *((_DWORD *)CurrentThread + 325) |= 0x400u;
    v5 = MiSetZeroPageThreadPriority((INT64)Context, (INT64)CurrentThread, 0i64);
    while( 1 )
    {
      v6 = MiWaitForFreePagesToZero((INT64)Context, &v8, v3);
      if( v6 == -1 )
        break;
      if( v3 != v6 )
      {
        v3 = v6;
        MiInitializeColorTable(v2 + 62, v6);
      }
      for( i = 0; i <= 3; ++i )
      {
        if( (unsigned int)MiGetPagesToZero((INT64)Context, (UINT64)v2, i) )
          break;
      }
      if( i <= 3 )
        MiZeroPage((INT64)v2, (INT64)Context);
    }
    MiSetZeroPageThreadPriority((INT64)Context, (INT64)CurrentThread, v5);
    *((_DWORD *)CurrentThread + 325) &= ~0x400u;
    MiDeleteZeroThreadContext(v2);
    *((_QWORD *)Context + 805) = 0i64;
  }
}

Referenced by:

No references.