ExpWorkerFactoryManagerThread

VOID __stdcall __noreturn ExpWorkerFactoryManagerThread(VOID *Context){
  _LIST_ENTRY *v1; 
  _LIST_ENTRY *v2; 
  _LIST_ENTRY *Flink; 
  unsigned int v4; 
  unsigned int Blink; 
  char v6; 
  _KLOCK_QUEUE_HANDLE LockHandle; 

  memset(&LockHandle, 0, sizeof(LockHandle));
  while( 1 )
  {
    while( 1 )
    {
      v1 = KeRemoveQueue((_KQUEUE *)((char *)&WheapDeferredInternalLogsEventLock + 2048), 0, 0i64);
      if( v1 != (_LIST_ENTRY *)((char *)&WheapDeferredInternalLogsEventLock + 2208) )
        break;
      ExpWorkerFactoryDeferredThreadCreation();
      KeRegisterObjectNotification(
        (char *)&WheapDeferredInternalLogsEventLock + 2144,
        (_KQUEUE *)((char *)&WheapDeferredInternalLogsEventLock + 2048),
        (_KWAIT_BLOCK *)&WheapDeferredInternalLogsEventLock + 46);
    }
    if( !LODWORD(v1[3].Flink) )
      break;
    v2 = v1 - 29;
    Flink = v1[-28].Flink;
    KeAcquireInStackQueuedSpinLock((PKSPIN_LOCK)Flink, &LockHandle);
    if( !LODWORD(v2[19].Flink) )
    {
      v4 = (unsigned int)v2[18].Flink;
      Blink = (unsigned int)v2[17].Blink;
      if( v4 > Blink )
        KeTimeOutQueueWaiters((_DISPATCHER_HEADER *)Flink->Blink, -(__int64)v2[7].Flink, v4 - Blink);
    }
    if( BYTE1(Flink[2].Flink) )
    {
      v6 = 1;
    }
    else
    {
      v6 = 0;
      KeRegisterObjectNotification(
        &v2[20].Blink,
        (_KQUEUE *)((char *)&WheapDeferredInternalLogsEventLock + 2048),
        (_KWAIT_BLOCK *)&v2[29]);
    }
    KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockHandle);
    __writecr8(LockHandle.OldIrql);
    if( v6 )
LABEL_14:
      ObfDereferenceObjectWithTag(v2, 0x746C6644ui64);
  }
  v2 = (_LIST_ENTRY *)((char *)v1 - 520);
  KeAcquireInStackQueuedSpinLock((PKSPIN_LOCK)v1[-32].Blink, &LockHandle);
  LODWORD(v2[19].Blink) &= ~0x400u;
  if( ((__int64)v2[19].Blink & 0x200) != 0 && ExpTryEnterWorkerFactoryAwayMode((_EX_WORKER_FACTORY *)v2) )
  {
    ExpWorkerFactoryCheckCreate(v2, &LockHandle, 0);
  }
  else
  {
    KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockHandle);
    __writecr8(LockHandle.OldIrql);
  }
  goto LABEL_14;
}

Referenced by:

No references.