IopLiveDumpMirrorPhysicalMemoryCallback
NTSTATUS __stdcall IopLiveDumpMirrorPhysicalMemoryCallback(_LARGE_INTEGER PhysicalAddress, _LARGE_INTEGER a2){
LARGE_INTEGER PerformanceCounter;
GUID *v3;
unsigned __int64 v6;
unsigned __int64 v7;
unsigned __int64 v8;
unsigned __int64 v9;
UINT64 NextForwardRunClear;
UINT64 v11;
UINT64 v12;
INT64 Data4;
int v14;
LONGLONG v15;
INT64 v17[2];
_MMPFN_IDENTITY Identity;
UINT64 v19;
UINT64 v20;
v19 = 0i64;
PerformanceCounter.QuadPart = 0i64;
v3 = IopLiveDumpContext;
if( (IopLiveDumpContext[5].Data1 & 0x80u) != 0 )
PerformanceCounter = KeQueryPerformanceCounter(0i64);
v6 = *(_QWORD *)&v3[36].Data1;
v7 = (unsigned __int64)PhysicalAddress.QuadPart >> 12;
v8 = (a2.QuadPart >> 12) + ((a2.LowPart & 0xFFF) != 0i64);
v9 = v8 + v7 - 1;
if( v7 < v6 )
{
if( v9 >= v6 )
{
v9 = v6 - 1;
v8 = v6 - v7;
}
if( v8 )
{
v17[0] = v9 + 1;
v17[1] = *(_QWORD *)v3[36].Data4;
while( 1 )
{
NextForwardRunClear = RtlFindNextForwardRunClearEx((INT64)v17, v7, &v19);
v11 = NextForwardRunClear ? v19 - v7 : v8;
if( v11 )
break;
LABEL_22:
if( v8 <= v11 + NextForwardRunClear )
{
v8 = 0i64;
}
else
{
v7 = NextForwardRunClear + v19;
v8 -= v11 + NextForwardRunClear;
}
if( !v8 )
goto LABEL_26;
}
v12 = v7;
v20 = v11;
while( 1 )
{
if( (*(_DWORD *)v3[2].Data4 & 4) == 0 )
goto LABEL_14;
memset(&Identity, 0, sizeof(Identity));
MmTryIdentifyPage(v12, &Identity);
if( v14 )
break;
LABEL_21:
++v12;
if( !--v20 )
goto LABEL_22;
}
if( Identity.u2.FileObject >= (PVOID)0xFFFF800000000000i64 )
{
LABEL_14:
Data4 = (INT64)v3[37].Data4;
}
else
{
if( (*(_DWORD *)v3[2].Data4 & 4) == 0 || (unsigned __int64)Identity.u2.FileObject - 1 > 0x7FFFFFFEFFFEi64 )
goto LABEL_21;
Data4 = (INT64)&v3[41];
}
RtlSetBitsEx(Data4, v12, 1ui64);
goto LABEL_21;
}
}
LABEL_26:
if( (v3[5].Data1 & 0x80u) != 0 )
{
v15 = *(_QWORD *)&KeQueryPerformanceCounter(0i64) - PerformanceCounter.QuadPart;
if( (v3[5].Data1 & 1) != 0 )
{
*(_QWORD *)v3[29].Data4 += a2.QuadPart;
*(_QWORD *)v3[28].Data4 += v15;
}
else
{
*(_QWORD *)v3[32].Data4 += a2.QuadPart;
*(_QWORD *)v3[31].Data4 += v15;
}
}
return 0;
}Referenced by:
No references.