IopLiveDumpCaptureMemoryPages
__int64 __fastcall IopLiveDumpCaptureMemoryPages(__int64 a1){
INT64 v2;
__int64 v3;
char v4;
bool v5;
int v6;
NTSTATUS v7;
__int64 v8;
__int64 v10;
__int64 v11;
__int64 v12;
__int64 v13;
__int64 v14;
__int64 v15;
__int64 v16;
__int64 v17[3];
__int128 v18;
struct _EVENT_DATA_DESCRIPTOR v19;
__int64 *v20;
int v21;
int v22;
__int64 *v23;
int v24;
int v25;
__int64 *v26;
int v27;
int v28;
__int64 *v29;
int v30;
int v31;
__int64 *v32;
int v33;
int v34;
__int64 *v35;
int v36;
int v37;
__int64 *v38;
int v39;
int v40;
v2 = a1 + 304;
v18 = 0i64;
v3 = *(_QWORD *)&KUSER_SHARED_DATA.InterruptTime.LowPart;
v17[0] = (__int64)IopLiveDumpStartMirroringCallback;
v17[1] = (__int64)IopLiveDumpEndMirroringCallback;
v17[2] = (__int64)IopLiveDumpMirrorPhysicalMemoryCallback;
v4 = *(_BYTE *)(a1 + 40) & 4;
SaveSupervisorState = 1;
v5 = v4 != 0;
v6 = *(_DWORD *)(a1 + 80);
DWORD2(v18) = v5 ? 657 : 593;
if( (v6 & 0x20) != 0 )
DWORD2(v18) = (v5 ? 657 : 593) | 0x100;
v7 = MmDuplicateMemory((__int64)v17);
if( (*(_DWORD *)(a1 + 80) & 0x80u) != 0 )
*(_QWORD *)(a1 + 512) = (unsigned __int64)(1000i64 * *(_QWORD *)(a1 + 504)) / PerformanceFrequency.QuadPart;
if( v7 < 0 || v7 == 258 )
{
if( (*(_DWORD *)(v2 + 8) & 1) != 0 )
IopLiveDumpUncorralProcessors(v2, 1);
IopLiveDumpTraceMmDuplicateMemoryFailure(a1, (unsigned int)v7);
if( v7 == 258 )
{
*(_DWORD *)(a1 + 80) |= 0x40u;
v7 = -1073740682;
}
}
else
{
if( VslIsSecureKernelRunning() && (*(_QWORD *)(a1 + 696) || *(_QWORD *)(a1 + 704)) )
VslFinalizeLiveDumpInSk((_QWORD *)(a1 + 192), (_QWORD *)(a1 + 200), a1 + 144);
*(_QWORD *)(a1 + 480) = (*(_QWORD *)&KUSER_SHARED_DATA.InterruptTime.LowPart - v3) / 0x2710ui64;
IopLiveDumpTraceCaptureMemoryPages();
}
SaveSupervisorState = 0;
if( (unsigned int)dword_140C04498 > 5 && tlgKeywordOn((__int64)&dword_140C04498, 0x200000000000i64) )
{
v8 = *(_QWORD *)(a1 + 480);
v22 = 0;
v25 = 0;
v28 = 0;
v31 = 0;
v34 = 0;
v37 = 0;
v40 = 0;
v10 = v8;
v20 = &v10;
v11 = *(_QWORD *)(a1 + 488);
v23 = &v11;
v12 = *(_QWORD *)(a1 + 496);
v26 = &v12;
v13 = *(_QWORD *)(a1 + 512);
v29 = &v13;
v14 = *(_QWORD *)(a1 + 520);
v32 = &v14;
v15 = *(_QWORD *)(a1 + 528);
v35 = &v15;
v16 = *(_QWORD *)(a1 + 536);
v38 = &v16;
v21 = 8;
v24 = 8;
v27 = 8;
v30 = 8;
v33 = 8;
v36 = 8;
v39 = 8;
tlgWriteTransfer_EtwWriteTransfer(
(__int64)&dword_140C04498,
(unsigned __int8 *)&byte_140023C7F,
(const GUID *)(a1 + 864),
(const GUID *)(a1 + 848),
9u,
&v19);
}
return(unsigned int)v7;
}Referenced by:
IoCaptureLiveDump