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