MiInitializePartitionThreads

NTSTATUS __stdcall MiInitializePartitionThreads(VOID *StartContext){
  VOID **v1; 
  int *v2; 
  unsigned int v4; 
  VOID *v5; 
  __int64 v6; 
  _QWORD *ZeroThreadContext; 
  NTSTATUS SystemThread; 
  __int64 v10; 
  int v11[4]; 
  _QWORD v12[3]; 

  v10 = 0i64;
  v11[0] = 0;
  v1 = (VOID **)v12;
  v12[0] = MiZeroPageThread;
  v2 = v11;
  v11[1] = 1;
  v12[1] = MiRebuildLargePagesThread;
  v11[2] = 2;
  v12[2] = MiPartitionWorkingSetManager;
  v4 = 0;
  v5 = *(VOID **)(*((_QWORD *)StartContext + 22) + 112i64);
  while( 1 )
  {
    v6 = (unsigned int)*v2;
    if( !(_DWORD)v6 )
    {
      ZeroThreadContext = MiCreateZeroThreadContext(0i64, 0);
      *((_QWORD *)StartContext + 805) = ZeroThreadContext;
      if( !ZeroThreadContext )
        return -1073741670;
    }
    SystemThread = PsCreateSystemThreadEx((__int64)&v10, 0x1FFFFF, 0i64, v5, 0i64, *v1, (INT64)StartContext, 0i64, 0i64);
    if( SystemThread < 0 )
      break;
    ++v4;
    ++v2;
    *((_QWORD *)StartContext + v6 + 16) = v10;
    ++v1;
    if( v4 >= 3 )
      return 0;
  }
  if( !(_DWORD)v6 )
  {
    MiDeleteZeroThreadContext(*((_MI_ZERO_THREAD_CONTEXT **)StartContext + 805));
    *((_QWORD *)StartContext + 805) = 0i64;
  }
  return SystemThread;
}

Referenced by:

No references.