IopLiveDumpGenerateIptSecondaryData
NTSTATUS __stdcall IopLiveDumpGenerateIptSecondaryData(){
_GUID *v0;
__int64 v1;
unsigned int Data1;
__int64 v3;
VOID **v4;
__int64 v5;
size_t v6;
VOID *v7;
__int64 v8;
unsigned int v9;
unsigned int *v10;
unsigned int v11;
NTSTATUS result;
__int64 v13;
__int128 v14;
__int128 v15;
_GUID v16;
__int64 v17;
v0 = IopLiveDumpContext;
v17 = 0i64;
v1 = 0i64;
v14 = 0i64;
Data1 = IopLiveDumpContext[5].Data1;
v15 = 0i64;
v16 = 0i64;
if( (Data1 & 0x80u) != 0 )
{
LODWORD(v3) = IopLiveDumpGetMillisecondCounter(0);
v1 = v3;
}
v4 = (VOID **)&v0[59];
v5 = *(_QWORD *)&v0[59].Data1;
if( v5 )
{
*(_DWORD *)v0[61].Data4 = 0;
*(_QWORD *)&v0[61].Data1 = v5;
(*(void(__fastcall **)(__int64, _QWORD, _GUID *, __int64))(IptInterface + 40))(2i64, 0i64, v0 + 59, 48i64);
v6 = *(_DWORD *)v0[61].Data4;
if( v6 && *(_DWORD *)v0[59].Data4 >= v6 )
{
v7 = *(VOID **)&v0[61].Data1;
if( *v4 != v7 )
{
memmove(*v4, v7, v6);
*(_QWORD *)&v0[61].Data1 = *v4;
v6 = *(_DWORD *)v0[61].Data4;
}
}
else
{
*(_QWORD *)&v0[61].Data1 = 0i64;
*(_DWORD *)v0[61].Data4 = 0;
v6 = 0;
}
if( v6 )
{
if( *(_QWORD *)&v0[56].Data1 )
{
LODWORD(v15) = v0->Data1;
*((_QWORD *)&v15 + 1) = *(_QWORD *)v0->Data4;
v16 = v0[1];
v17 = *(_QWORD *)&v0[2].Data1;
HIDWORD(v14) = 0x2000000;
(*(void(__fastcall **)(__int64, _QWORD, __int128 *, __int64))(IptInterface + 32))(7i64, 0i64, &v14, 56i64);
v8 = v14;
if( (_QWORD)v14 )
{
v9 = 16 * *(_DWORD *)(v14 + 16) + 12;
if( v9 <= *(_DWORD *)v0[56].Data4 )
{
v10 = *(unsigned int **)&v0[56].Data1;
*(_DWORD *)v0[58].Data4 = v9;
*(_QWORD *)&v0[58].Data1 = v10;
v0[57] = GUID_TRIAGEDUMP_DATA;
v11 = *(_DWORD *)(v8 + 16);
*v10 = v11;
v10[1] = 4;
memmove(v10 + 2, (const VOID *)(v14 + 48), 16 * v11);
v10[4 * *v10 + 2] = 5525577;
}
}
}
}
}
result = v0[5].Data1;
if( (result & 0x80u) != 0 )
{
LODWORD(v13) = IopLiveDumpGetMillisecondCounter(0);
LOBYTE(result) = IopLiveDumpTraceCaptureGenerateIptSecondaryDataDuration(v0, v13 - v1);
}
return result;
}Referenced by:
IopLiveDumpEndMirroringCallback