WheapReportDeferredLiveDumps
INT64 __stdcall WheapReportDeferredLiveDumps(){
void *v0;
__int64 v1;
bool v2;
unsigned int v3;
__int64 v4;
v0 = 0i64;
ExAcquireFastMutex(&WheapLiveDumpLock);
if( (__int64 *)WheapLiveDumpRecordList != &WheapLiveDumpRecordList )
{
v0 = (void *)WheapLiveDumpRecordList;
v1 = *(_QWORD *)WheapLiveDumpRecordList;
if( *(__int64 **)(WheapLiveDumpRecordList + 8) != &WheapLiveDumpRecordList
|| *(_QWORD *)(v1 + 8) != WheapLiveDumpRecordList )
{
LABEL_18:
__fastfail(3u);
}
WheapLiveDumpRecordList = *(_QWORD *)WheapLiveDumpRecordList;
*(_QWORD *)(v1 + 8) = &WheapLiveDumpRecordList;
}
KeReleaseGuardedMutex(&WheapLiveDumpLock);
v2 = 0;
v3 = 0;
while( v0 )
{
if( !v2 )
v3 = WheapReportLiveDump((INT64)v0);
ExFreePoolWithTag(v0, 0x61656857u);
if( !v2 )
v2 = v3 != 0;
ExAcquireFastMutex(&WheapLiveDumpLock);
v0 = (void *)WheapLiveDumpRecordList;
if( (__int64 *)WheapLiveDumpRecordList == &WheapLiveDumpRecordList )
{
v0 = 0i64;
}
else
{
if( *(__int64 **)(WheapLiveDumpRecordList + 8) != &WheapLiveDumpRecordList )
goto LABEL_18;
v4 = *(_QWORD *)WheapLiveDumpRecordList;
if( *(_QWORD *)(*(_QWORD *)WheapLiveDumpRecordList + 8i64) != WheapLiveDumpRecordList )
goto LABEL_18;
WheapLiveDumpRecordList = *(_QWORD *)WheapLiveDumpRecordList;
*(_QWORD *)(v4 + 8) = &WheapLiveDumpRecordList;
}
KeReleaseGuardedMutex(&WheapLiveDumpLock);
}
return v3;
}Referenced by:
WheaCrashDumpInitializationComplete