WheapReportLiveDump
NTSTATUS __stdcall WheapReportLiveDump(INT64 a1){
__int64 v1;
void *BugCheckParam3;
void *v3;
unsigned __int64 BugCheckParam4;
int v5;
unsigned int *v6;
unsigned __int64 v7;
INT64 v8;
INT64 v9;
int inserted;
v1 = *(_QWORD *)(a1 + 24);
BugCheckParam3 = 0i64;
v3 = (void *)*(int *)(a1 + 16);
BugCheckParam4 = 0i64;
v5 = 0;
v6 = (unsigned int *)(v1 + 128);
if( *(_WORD *)(v1 + 10) )
{
while( 1 )
{
a1 = *((_QWORD *)v6 + 2) - *(_QWORD *)&XPF_MCA_SECTION_GUID.Data1;
if( !a1 )
a1 = *((_QWORD *)v6 + 3) - *(_QWORD *)XPF_MCA_SECTION_GUID.Data4;
if( !a1 )
break;
v6 += 18;
if( ++v5 >= (unsigned int)*(unsigned __int16 *)(v1 + 10) )
goto LABEL_8;
}
v7 = *(_QWORD *)(*v6 + v1 + 40);
BugCheckParam4 = (unsigned int)v7;
BugCheckParam3 = (void *)HIDWORD(v7);
}
LABEL_8:
LODWORD(v8) = LkmdTelCreateReport(
(PWCHAR)a1,
(UINT32)BugCheckParam3,
v3,
(PVOID)v1,
BugCheckParam3,
(PVOID)BugCheckParam4);
v9 = v8;
if( !v8 )
return -1073741670;
inserted = LkmdTelInsertTriageDataBlock(v8, (PVOID)v1, *(_DWORD *)(v1 + 20));
if( inserted >= 0 )
inserted = LkmdTelSubmitReport(v9);
if( *(_DWORD *)(v9 + 8) )
{
if( *(_QWORD *)v9 )
ExFreePoolWithTag(*(PVOID *)v9, 0x74614454u);
*(_DWORD *)(v9 + 8) = 0;
}
ExFreePoolWithTag((PVOID)v9, 0x74614454u);
return inserted;
}Referenced by:
WheapCreateLiveDumpFromPreviousSession
WheapReportDeferredLiveDumps