MmInitializeHandBuiltProcess

NTSTATUS __stdcall MmInitializeHandBuiltProcess(_EPROCESS *Process, PULONG_PTR DirectoryTableBase){
  __int64 v3; 
  __int64 v4; 
  char *v5; 
  INT64 *SharedVm; 
  __int64 v7; 
  INT64 *v8; 
  NTSTATUS result; 
  INT64 *v10; 
  _QWORD *v11; 
  __int64 v12; 
  LODWORD(v3) = MiAllocatePool((struct _SLIST_ENTRY *)0x40);
  v4 = v3;
  if( !v3 )
    return -1073741670;
  ExInitializeAutoExpandPushLock((_EX_PUSH_LOCK_AUTO_EXPAND *)(v3 + 408), 1ui64);
  v5 = (char *)*((_QWORD *)KeGetCurrentThread() + 23);
  SharedVm = MiGetSharedVm((INT64)(v5 + 1664));
  v7 = *((_QWORD *)v5 + 5);
  *((_DWORD *)Process + 628) |= 0x20u;
  *((_QWORD *)Process + 153) = 0i64;
  v8 = SharedVm;
  *((_QWORD *)Process + 154) = 0i64;
  *((_QWORD *)Process + 5) = v7;
  *((_QWORD *)Process + 296) = (char *)Process + 2360;
  *((_QWORD *)Process + 295) = (char *)Process + 2360;
  *((_QWORD *)Process + 294) = 0i64;
  result = MiAllocateProcessShadow();
  if( result >= 0 )
  {
    v10 = MiGetSharedVm((INT64)Process + 1664);
    v11 = (_QWORD *)((char *)Process + 1704);
    *(_DWORD *)v10 = 0;
    *((_QWORD *)Process + 251) = 0i64;
    *((_QWORD *)Process + 222) = *((_QWORD *)v5 + 222);
    *((_QWORD *)Process + 227) = *((_QWORD *)v5 + 227);
    v10[6] = v8[6];
    v10[7] = v8[7];
    v12 = 8i64;
    *((_QWORD *)Process + 223) = *((_QWORD *)v5 + 223);
    *((_QWORD *)Process + 224) = *((_QWORD *)v5 + 224);
    *((_QWORD *)Process + 225) = *((_QWORD *)v5 + 225);
    *((_QWORD *)Process + 226) = *((_QWORD *)v5 + 226);
    *((_QWORD *)Process + 187) = *((_QWORD *)v5 + 187);
    *((_QWORD *)Process + 159) = *((_QWORD *)v5 + 159);
    *((_QWORD *)Process + 210) = v4;
    do
    {
      *v11 = *(_QWORD *)((char *)v11 + v5 - (char *)Process);
      ++v11;
      --v12;
    }
    while( v12 );
    MiInsertNewProcess(Process, 0i64);
    MiAllowWorkingSetExpansion((_MMSUPPORT_INSTANCE *)((char *)Process + 1664));
    return 0;
  }
  return result;
}

Referenced by:

PspAllocateProcess