ExpCreateWorkerThread

NTSTATUS __stdcall ExpCreateWorkerThread(_ENODE *Node, _EX_WORK_QUEUE *Queue){
  INT64 v2; 
  signed __int32 PreferredMask; 
  INT64 v5; 
  signed __int32 v6; 
  int SystemThread; 
  signed __int32 v9; 
  signed __int32 v10; 
  PVOID *Object; 
  PVOID v12; 
  INT64 v13; 

  v13 = 0i64;
  _m_prefetchw(&Node[1].Ncb.HeteroSets[3].PreferredMask);
  PreferredMask = Node[1].Ncb.HeteroSets[3].PreferredMask;
  do
  {
    v5 = (unsigned int)(PreferredMask + 1);
    LODWORD(v5) = v5 | 0x4000;
    v6 = PreferredMask;
    PreferredMask = _InterlockedCompareExchange(
                      (volatile signed __int32 *)&Node[1].Ncb.HeteroSets[3].PreferredMask,
                      v5,
                      PreferredMask);
  }
  while( v6 != PreferredMask );
  SystemThread = ExpPartitionCreateSystemThread(
                   Node[1].Ncb.HeteroSets[2].PreferredMask,
                   (_KNODE *)Node[1].Ncb.HeteroSets[2].AvailableMask,
                   v5,
                   v2,
                   (INT64)Object,
                   (INT64)ExpWorkerThread,
                   (INT64)Node,
                   (INT64)Queue,
                   (INT64)&v13);
  if( SystemThread < 0 )
  {
    _m_prefetchw(&Node[1].Ncb.HeteroSets[3].PreferredMask);
    v9 = Node[1].Ncb.HeteroSets[3].PreferredMask;
    do
    {
      v10 = v9;
      v9 = _InterlockedCompareExchange(
             (volatile signed __int32 *)&Node[1].Ncb.HeteroSets[3].PreferredMask,
             (v9 & 0x3FFF) - 1,
             v9);
    }
    while( v10 != v9 );
  }
  else
  {
    v12 = 0i64;
    if( ObReferenceObjectByHandle((VOID *)v13, 0x20ui64, (_OBJECT_TYPE *)PsThreadType, 0, &v12, 0i64) >= 0 )
    {
      KeBoostPriorityThread((_KTHREAD *)v12, 8i64);
      HalPutDmaAdapter((PADAPTER_OBJECT)v12);
    }
    ZwClose(v13);
  }
  return SystemThread;
}

Referenced by:

ExpWorkQueueInitializeWithMinimumThreads
ExpWorkQueueManagerThread