KeInitializeProcess

NTSTATUS __stdcall KeInitializeProcess(
        _EPROCESS *Process,
        INT64 BasePriority,
        _GROUP_AFFINITY *GroupAffinity,
        _KNODE *IdealNode,
        _KSCHEDULING_GROUP *SchedulingGroup,
        UINT64 Flags){
  int SecureProcess; 
  __int64 Group; 
  unsigned __int64 Mask; 
  _EPROCESS *v12; 
  __int16 v13; 
  *((_BYTE *)Process + 640) = BasePriority;
  *(_BYTE *)Process = 3;
  *((_DWORD *)Process + 92) = 1310740;
  SecureProcess = 0;
  *((_QWORD *)Process + 2) = (char *)Process + 8;
  *((_DWORD *)Process + 93) = 0;
  *((_QWORD *)Process + 1) = (char *)Process + 8;
  memset((INT64)Process + 376, 0i64);
  if( (Flags & 1) != 0 )
    *((_DWORD *)Process + 158) |= 1u;
  *((_DWORD *)Process + 21) = 0;
  *((_DWORD *)Process + 20) = 1310721;
  memset((INT64)Process + 88, 0i64);
  Group = GroupAffinity->Group;
  Mask = GroupAffinity->Mask;
  if( *((_WORD *)Process + 40) <= (unsigned __int16)Group )
    *((_WORD *)Process + 40) = Group + 1;
  *((_QWORD *)Process + Group + 11) |= Mask;
  KeSetGroupMaskProcess((INT64)Process, (unsigned int)(1 << LOBYTE(GroupAffinity->Group)));
  *((_DWORD *)Process + 210) = 0;
  *((_QWORD *)Process + 4) = (char *)Process + 24;
  *((_QWORD *)Process + 3) = (char *)Process + 24;
  *((_QWORD *)Process + 44) = (char *)Process + 344;
  *((_QWORD *)Process + 43) = (char *)Process + 344;
  *((_QWORD *)Process + 7) = (char *)Process + 48;
  *((_QWORD *)Process + 6) = (char *)Process + 48;
  *((_BYTE *)Process + 641) = 6;
  KiSetIdealNodeProcessByGroup(v12, IdealNode, GroupAffinity->Group);
  v13 = *((_WORD *)Process + GroupAffinity->Group + 386);
  *((_QWORD *)Process + 110) = SchedulingGroup;
  *((_WORD *)Process + 418) = v13;
  if( (Flags & 2) != 0 )
  {
    SecureProcess = VslCreateSecureProcess((INT64)Process, 0i64, (_QWORD *)Process + 124);
    if( SecureProcess >= 0 )
      *((_QWORD *)Process + 124) |= 1ui64;
  }
  return SecureProcess;
}

Referenced by:

KiInitializeKernel
PspAllocateProcess