MmLinkJobProcess

VOID __stdcall MmLinkJobProcess(_EJOB *NewJob, _EPROCESS *Process){
  NTSTATUS inserted; 
  _EJOB *v4; 
  _EX_PUSH_LOCK *p_SharedCommitLock; 
  _LIST_ENTRY *p_SharedCommitLinks; 
  _LIST_ENTRY *Flink; 
  _LIST_ENTRY *v8; 
  _QWORD *Pool; 
  __int64 **v10; 
  __int64 **v11; 
  _LIST_ENTRY *v12; 
  _LIST_ENTRY *p_JobLinks; 
  __int64 *v14; 
  __int64 v15; 
  __int64 *v16; 
  _RTL_BALANCED_NODE *v17; 
  __int64 *v19; 
  __int64 v20; 
  _LIST_ENTRY *i; 
  __int64 *v22; 
  __int64 **v23; 
  _ETHREAD *CurrentThread; 

  inserted = 0;
  v23 = &v22;
  v22 = (__int64 *)&v22;
  v4 = NewJob;
  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  --CurrentThread->Tcb.SpecialApcDisable;
  p_SharedCommitLock = &Process->SharedCommitLock;
  ExAcquirePushLockExclusiveEx(&Process->SharedCommitLock, 0i64);
  if( (Process->Flags3 & 0x10) == 0 )
  {
    p_SharedCommitLinks = &Process->SharedCommitLinks;
    Flink = Process->SharedCommitLinks.Flink;
    if( Flink != &Process->SharedCommitLinks )
    {
      while( 1 )
      {
        v8 = Flink[1].Flink;
        Pool = MiAllocatePool(256i64, 0x40ui64, 0x6E53694Dui64);
        if( !Pool )
          break;
        Pool[7] = v8;
        Pool[4] = Flink[-1].Blink;
        v10 = (__int64 **)(Pool + 5);
        v11 = v23;
        if( *v23 != (__int64 *)&v22 )
          goto LABEL_35;
        v10[1] = (__int64 *)v23;
        *v10 = (__int64 *)&v22;
        *v11 = (__int64 *)v10;
        v23 = v10;
        Flink = Flink->Flink;
        if( Flink == p_SharedCommitLinks )
          goto LABEL_6;
      }
      inserted = -1073741670;
LABEL_6:
      v4 = NewJob;
    }
    while( p_SharedCommitLinks->Flink != p_SharedCommitLinks )
      MiRemoveSharedCommitNode((_CONTROL_AREA *)p_SharedCommitLinks->Flink[1].Flink, Process, 1ui64);
    if( inserted < 0 )
    {
      while( 1 )
      {
        v19 = v22;
        if( v22 == (__int64 *)&v22 )
          break;
        if( (__int64 **)v22[1] != &v22 )
          goto LABEL_35;
        v20 = *v22;
        if( *(__int64 **)(*v22 + 8) != v22 )
          goto LABEL_35;
        v22 = (__int64 *)*v22;
        *(_QWORD *)(v20 + 8) = &v22;
        ExFreePoolWithTag(v19 - 5, 0);
      }
    }
    else if( (Process->Flags3 & 8) == 0 )
    {
      _InterlockedOr((volatile signed __int32 *)&Process->2172, 8u);
    }
  }
  v12 = (_LIST_ENTRY *)*((_QWORD *)v4 + 6);
  p_JobLinks = &Process->JobLinks;
  if( v12->Flink != (_LIST_ENTRY *)((char *)v4 + 40) )
LABEL_35:
    __fastfail(3u);
  p_JobLinks->Flink = (_LIST_ENTRY *)((char *)v4 + 40);
  Process->JobLinks.Blink = v12;
  v12->Flink = p_JobLinks;
  *((_QWORD *)v4 + 6) = p_JobLinks;
  Process->Job = v4;
  while( 1 )
  {
    v14 = v22;
    if( v22 == (__int64 *)&v22 )
      break;
    if( (__int64 **)v22[1] != &v22 )
      goto LABEL_35;
    v15 = *v22;
    if( *(__int64 **)(*v22 + 8) != v22 )
      goto LABEL_35;
    v22 = (__int64 *)*v22;
    *(_QWORD *)(v15 + 8) = &v22;
    v16 = v14 - 5;
    if( inserted >= 0 )
    {
      v17 = (_RTL_BALANCED_NODE *)v16[7];
      if( v16[4] )
      {
        do
        {
          inserted = MiInsertSharedCommitNode(v17, Process, 1ui64);
          if( inserted < 0 )
            break;
        }
        while( v16[4]-- != 1 );
      }
    }
    ExFreePoolWithTag(v16, 0);
  }
  if( inserted < 0 )
  {
    for( i = &Process->SharedCommitLinks;
          i->Flink != i;
          MiRemoveSharedCommitNode((_CONTROL_AREA *)i->Flink[1].Flink, Process, 1ui64) )
    {
      ;
    }
    _InterlockedAnd((volatile signed __int32 *)&Process->2172, 0xFFFFFFF7);
    _InterlockedOr((volatile signed __int32 *)&Process->2172, 0x10u);
  }
  if( (_InterlockedExchangeAdd64(&p_SharedCommitLock->_bf_0, 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
    ExfTryToWakePushLock(p_SharedCommitLock);
  KeAbPostRelease(p_SharedCommitLock);
  KiLeaveGuardedRegionUnsafe((__int64)CurrentThread);
}

Referenced by:

PspEstablishJobHierarchy