WheapProcessWorkQueueItem

VOID __stdcall WheapProcessWorkQueueItem(_WHEAP_WORK_QUEUE *Queue, _LIST_ENTRY *Item){
  _LIST_ENTRY *Flink; 
  unsigned int Blink; 
  int v5; 
  _LIST_ENTRY *v6; 

  if( WheapPreviousSessionFailure )
  {
    if( ((__int64)Item[9].Flink & 2) != 0 && HIDWORD(Item[3].Flink) <= 1 )
    {
      Flink = Item[2].Flink;
      if( Flink )
      {
        Blink = (unsigned int)Flink[2].Blink;
        if( Blink <= 9 )
        {
          v5 = 665;
          if( _bittest(&v5, Blink) )
            WheapCreateLiveDumpFromPreviousSession((INT64)Item);
        }
      }
    }
  }
  if( *(&WheapDeferredInternalLogsEventLock + 6) )
  {
    WheapPredictiveFailureAnalysis((_WHEAP_ERROR_RECORD_WRAPPER *)Item);
    WheapGenerateETWEvents((_WHEA_ERROR_RECORD *)&Item[2].Blink);
    WheapFreeErrorRecord((_WHEAP_ERROR_RECORD_WRAPPER *)Item);
  }
  else
  {
    KeWaitForSingleObject((UINT64)&WheapDeferredInternalLogsEventLock + 64, 0, 0, 0, 0i64);
    v6 = (_LIST_ENTRY *)*(&WheapDeferredInternalLogsEventLock + 5);
    if( (_UNKNOWN *)**(&WheapDeferredInternalLogsEventLock + 5) != (_UNKNOWN *)((char *)&WheapDeferredInternalLogsEventLock
                                                                               + 32) )
      __fastfail(3u);
    Item->Flink = (_LIST_ENTRY *)((char *)&WheapDeferredInternalLogsEventLock + 32);
    Item->Blink = v6;
    v6->Flink = Item;
    *(&WheapDeferredInternalLogsEventLock + 5) = Item;
    KeSetEvent((PRKEVENT)((char *)&WheapDeferredInternalLogsEventLock + 64), 0, 0);
  }
}

Referenced by:

No references.