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.