WheapEtwEnableCallback
void __fastcall WheapEtwEnableCallback(const _GUID *a1, int a2){
__int64 v2;
__int64 v3;
__int64 *v4;
__int64 v5;
*(&WheapDeferredInternalLogsEventLock + 6) = a2;
if( a2 == 1 )
{
while( 1 )
{
KeWaitForSingleObject((UINT64)&WheapDeferredInternalLogsEventLock + 64, 0, 0, 0, 0i64);
v2 = *(&WheapDeferredInternalLogsEventLock + 4);
if( *(_UNKNOWN **)(*(&WheapDeferredInternalLogsEventLock + 4) + 8i64) != (_UNKNOWN *)((char *)&WheapDeferredInternalLogsEventLock
+ 32) )
goto LABEL_9;
v3 = **(&WheapDeferredInternalLogsEventLock + 4);
if( *(_QWORD *)(**(&WheapDeferredInternalLogsEventLock + 4) + 8i64) != *(&WheapDeferredInternalLogsEventLock + 4) )
goto LABEL_9;
*(&WheapDeferredInternalLogsEventLock + 4) = **(&WheapDeferredInternalLogsEventLock + 4);
*(_QWORD *)(v3 + 8) = (char *)&WheapDeferredInternalLogsEventLock + 32;
KeSetEvent((PRKEVENT)((char *)&WheapDeferredInternalLogsEventLock + 64), 0, 0);
if( (_UNKNOWN *)v2 == (_UNKNOWN *)((char *)&WheapDeferredInternalLogsEventLock + 32) )
break;
WheapGenerateETWEvents((_WHEA_ERROR_RECORD *)(v2 + 40));
WheapFreeErrorRecord((_WHEAP_ERROR_RECORD_WRAPPER *)v2);
}
while( 1 )
{
KeWaitForSingleObject((UINT64)&WheapDeferredInternalLogsEventLock, 0, 0, 0, 0i64);
v4 = (__int64 *)WheapDeferredInternalLogs;
if( *(__int64 **)(WheapDeferredInternalLogs + 8) != &WheapDeferredInternalLogs )
break;
v5 = *(_QWORD *)WheapDeferredInternalLogs;
if( *(_QWORD *)(*(_QWORD *)WheapDeferredInternalLogs + 8i64) != WheapDeferredInternalLogs )
break;
WheapDeferredInternalLogs = *(_QWORD *)WheapDeferredInternalLogs;
*(_QWORD *)(v5 + 8) = &WheapDeferredInternalLogs;
KeSetEvent((PRKEVENT)&WheapDeferredInternalLogsEventLock, 0, 0);
if( v4 == &WheapDeferredInternalLogs )
return;
WheaLogInternalEvent(v4 + 2);
}
LABEL_9:
__fastfail(3u);
}
}Referenced by:
No references.