MiInsertNewProcess

VOID __stdcall MiInsertNewProcess(_EPROCESS *NewProcess, _MM_SESSION_SPACE *SessionGlobal){
  _QWORD *v4; 
  _QWORD *v5; 
  _MM_SESSION_SPACE **v6; 
  _MM_SESSION_SPACE *v7; 
  struct _KLOCK_QUEUE_HANDLE LockHandle; 
  memset(&LockHandle, 0, sizeof(LockHandle));
  KeAcquireInStackQueuedSpinLock(&WorkerRoutine, &LockHandle);
  v4 = (_QWORD *)qword_140C4DB70;
  v5 = (_QWORD *)((char *)NewProcess + 1984);
  if( *(__int64 **)qword_140C4DB70 != &qword_140C4DB68 )
    goto LABEL_6;
  *v5 = &qword_140C4DB68;
  *((_QWORD *)NewProcess + 249) = v4;
  *v4 = v5;
  qword_140C4DB70 = (__int64)NewProcess + 1984;
  if( SessionGlobal )
  {
    v6 = (_MM_SESSION_SPACE **)*((_QWORD *)SessionGlobal + 3);
    v7 = (_MM_SESSION_SPACE *)((char *)NewProcess + 1184);
    if( *v6 == (_MM_SESSION_SPACE *)((char *)SessionGlobal + 16) )
    {
      *(_QWORD *)v7 = (char *)SessionGlobal + 16;
      *((_QWORD *)NewProcess + 149) = v6;
      *v6 = v7;
      *((_QWORD *)SessionGlobal + 3) = v7;
      goto LABEL_5;
    }
LABEL_6:
    __fastfail(3u);
  }
LABEL_5:
  KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockHandle);
  __writecr8(LockHandle.OldIrql);
}

Referenced by:

MmCreateProcessAddressSpace
MmInitializeHandBuiltProcess