IopLiveDumpEstimateMemoryPages
NTSTATUS __stdcall IopLiveDumpEstimateMemoryPages(_LIVEDUMP_CONTEXT *Context){
_LIVEDUMP_CONTEXT *v1;
__int64 v3;
_LIVEDUMP_CONTEXT v4;
int v5;
int v6;
UINT64 v7;
UINT64 v8;
__int64 v9;
__int64 v10;
__int64 v11;
unsigned __int64 v12;
bool v13;
unsigned __int64 v14;
unsigned __int64 v15;
bool v16;
bool v18;
int v19;
unsigned __int64 v20;
unsigned __int64 v21;
unsigned __int64 v22;
__int64 v23;
__int64 v24;
__int64 v25;
__int64 v26;
__int64 v27;
__int64 v28;
_MM_MIRROR_DISPATCH MirrorDispatch[2];
NTSTATUS(__stdcall *v30)(UINT64);
NTSTATUS(__stdcall *v31)(_LARGE_INTEGER, _LARGE_INTEGER);
__int128 v32;
_EVENT_DATA_DESCRIPTOR v33;
__int64 *v34;
__int64 v35;
__int64 *v36;
__int64 v37;
__int64 *v38;
__int64 v39;
__int64 *v40;
__int64 v41;
__int64 *v42;
__int64 v43;
__int64 *v44;
__int64 v45;
_EVENT_DATA_DESCRIPTOR v46;
char *v47;
__int64 v48;
int *v49;
__int64 v50;
v1 = Context + 76;
v32 = 0i64;
v3 = *(_QWORD *)&KUSER_SHARED_DATA.InterruptTime.LowPart;
Context[20] |= 1u;
v20 = 0i64;
v21 = 0i64;
v22 = 0i64;
IopLiveDumpCallRemovePagesCallbacks(Context);
*(_QWORD *)MirrorDispatch = IopLiveDumpStartMirroringCallback;
v30 = IopLiveDumpEndMirroringCallback;
v31 = IopLiveDumpMirrorPhysicalMemoryCallback;
v4 = Context[20];
v5 = (Context[10] & 4) != 0 ? 657 : 593;
DWORD2(v32) = v5;
if( (v4 & 0x20) != 0 )
DWORD2(v32) = v5 | 0x100;
v6 = MmDuplicateMemory(MirrorDispatch);
if( (Context[20] & 0x80u) != 0 )
*((_QWORD *)Context + 58) = (unsigned __int64)(1000i64 * *((_QWORD *)Context + 57)) / *(&stru_140C452E0 + 85);
if( v6 < 0 || v6 == 258 )
{
if( (v1[2] & 1) != 0 )
IopLiveDumpUncorralProcessors(v1, 1u);
*((_QWORD *)Context + 12) = 0i64;
*((_QWORD *)Context + 15) = 0i64;
*((_QWORD *)Context + 16) = 0i64;
*((_QWORD *)Context + 17) = 0i64;
IopLiveDumpTraceMmDuplicateMemoryFailure((__int64)Context, v6);
if( v6 == 258 )
{
Context[20] |= 0x40u;
v6 = -1073740682;
}
}
else
{
v7 = RtlNumberOfSetBitsEx((_RTL_BITMAP_EX *)Context + 34);
*((_QWORD *)Context + 15) = 0i64;
v8 = v7 + (v7 >> 4);
*((_QWORD *)Context + 16) = 0i64;
LODWORD(v7) = Context[11];
*((_QWORD *)Context + 12) = v8;
*((_QWORD *)Context + 17) = 0i64;
if( (v7 & 1) != 0 )
{
v9 = 0i64;
if( (Context[20] & 0x80u) != 0 )
{
LODWORD(v10) = IopLiveDumpGetMillisecondCounter(0);
v9 = v10;
}
v6 = HvlCalculateLivedumpSize(&v20, &v21, &v22);
if( (Context[20] & 0x80u) != 0 )
{
LODWORD(v11) = IopLiveDumpGetMillisecondCounter(0);
*((_QWORD *)Context + 36) = v11 - v9;
}
if( v6 < 0 )
{
Context[20] |= 0x10u;
IopLiveDumpTraceQueryHvlDumpSizeFailure(v6);
if( (unsigned int)dword_140C04498 > 5 && tlgKeywordOn((__int64)&dword_140C04498, 0x200000000000i64) )
{
v16 = (Context[20] & 0x10) != 0;
v48 = 1i64;
v18 = v16;
v19 = v6;
v50 = 4i64;
v47 = (char *)&v18;
v49 = &v19;
tlgWriteTransfer_EtwWriteTransfer(
(__int64)&dword_140C04498,
(unsigned __int8 *)byte_140023EAD,
(const _GUID *)Context + 54,
(const _GUID *)Context + 53,
4u,
&v46);
}
v6 = 0;
}
else
{
v12 = v21;
v13 = (v21 & 0xFFF) == 0;
*((_QWORD *)Context + 15) = (v20 >> 12) + ((v20 & 0xFFF) != 0);
v14 = (v12 >> 12) + !v13;
v15 = v22;
v13 = (v22 & 0xFFF) == 0;
*((_QWORD *)Context + 16) = v14;
*((_QWORD *)Context + 17) = (v15 >> 12) + !v13;
}
}
}
*((_QWORD *)Context + 54) = (*(_QWORD *)&KUSER_SHARED_DATA.InterruptTime.LowPart - v3) / 0x2710ui64;
IopLiveDumpTraceBufferEstimation(Context);
RtlClearAllBitsEx((_RTL_BITMAP_EX *)Context + 34);
RtlClearAllBitsEx((_RTL_BITMAP_EX *)(Context + 150));
RtlClearAllBitsEx((_RTL_BITMAP_EX *)Context + 41);
Context[20] &= ~1u;
if( (unsigned int)dword_140C04498 > 5 && tlgKeywordOn((__int64)&dword_140C04498, 0x200000000000i64) )
{
v23 = *((_QWORD *)Context + 54);
v34 = &v23;
v24 = *((_QWORD *)Context + 55);
v36 = &v24;
v25 = *((_QWORD *)Context + 56);
v38 = &v25;
v26 = *((_QWORD *)Context + 58);
v40 = &v26;
v27 = *((_QWORD *)Context + 59);
v42 = &v27;
v28 = *((_QWORD *)Context + 36);
v44 = &v28;
v35 = 8i64;
v37 = 8i64;
v39 = 8i64;
v41 = 8i64;
v43 = 8i64;
v45 = 8i64;
tlgWriteTransfer_EtwWriteTransfer(
(__int64)&dword_140C04498,
(unsigned __int8 *)byte_140023DA1,
(const _GUID *)Context + 54,
(const _GUID *)Context + 53,
8u,
&v33);
}
return v6;
}Referenced by:
IopLiveDumpAllocAndInitResources