ExpCreateWorkerThread

INT64 __fastcall ExpCreateWorkerThread(_ENODE *Node, _EX_WORK_QUEUE *Queue){
  __int64 v2; 
  signed __int32 PreferredMask; 
  __int64 v5; 
  signed __int32 v6; 
  NTSTATUS SystemThread; 
  signed __int32 v9; 
  signed __int32 v10; 
  int Object; 
  PVOID v12; 
  HANDLE Handle; 
  Handle = 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,
                   Node[1].Ncb.HeteroSets[2].AvailableMask,
                   v5,
                   v2,
                   Object,
                   (__int64)ExpWorkerThread,
                   (__int64)Node,
                   (unsigned __int16 *)Queue,
                   (__int64)&Handle);
  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(Handle, 0x20u, (POBJECT_TYPE)PsThreadType, 0, &v12, 0i64) >= 0 )
    {
      KeBoostPriorityThread((__int64)v12, 8);
      HalPutDmaAdapter((PADAPTER_OBJECT)v12);
    }
    ZwClose(Handle);
  }
  return(unsigned int)SystemThread;
}

Referenced by:

ExpWorkQueueInitializeWithMinimumThreads
ExpWorkQueueManagerThread