MiInitializePartitionThreads

INT64 __stdcall MiInitializePartitionThreads(PVOID StartContext){
  PKSTART_ROUTINE *v1; 
  int *v2; 
  unsigned int v4; 
  void *v5; 
  __int64 v6; 
  _QWORD *ZeroThreadContext; 
  NTSTATUS v8; 
  PVOID ThreadHandle; 
  int v11[4]; 
  _QWORD v12[3]; 
  ThreadHandle = 0i64;
  v11[0] = 0;
  v1 = (PKSTART_ROUTINE *)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, 0i64);
      *((_QWORD *)StartContext + 805) = ZeroThreadContext;
      if( !ZeroThreadContext )
        return 3221225626i64;
    }
    v8 = PsCreateSystemThreadEx(&ThreadHandle, 0x1FFFFFui64, 0i64, v5, 0i64, *v1, StartContext, 0i64, 0i64);
    if( v8 < 0 )
      break;
    ++v4;
    ++v2;
    *((_QWORD *)StartContext + v6 + 16) = ThreadHandle;
    ++v1;
    if( v4 >= 3 )
      return 0i64;
  }
  if( !(_DWORD)v6 )
  {
    MiDeleteZeroThreadContext(*((PVOID *)StartContext + 805));
    *((_QWORD *)StartContext + 805) = 0i64;
  }
  return(unsigned int)v8;
}

Referenced by:

No references.