VmpFillSlat
VOID __stdcall VmpFillSlat(PNOTIFY_SYNC NotifySync, PLIST_ENTRY NotifyList, PVOID FsContext){
_QWORD *v3;
_QWORD *v4;
int v5;
unsigned int v6;
__int64 v9;
_QWORD *v10;
_QWORD *i;
INT64 v12;
INT64 v13;
UINT64 *a5;
v4 = v3;
v5 = *((_DWORD *)NotifySync + 22);
v6 = (unsigned int)NotifyList | 0x20000;
if( (v5 & 1) == 0 )
v6 = (unsigned int)NotifyList;
if( FsContext != (PVOID)512 )
goto LABEL_26;
if( (*v4 & 0x1FFi64) != 0 )
goto LABEL_26;
v9 = v4[1];
if( (v9 & 0x1FF) != 0 )
goto LABEL_26;
v10 = v4 + 1024;
if( v4[1022] != *v4 + 511i64 || v4[1023] != v9 + 511 )
goto LABEL_26;
for( i = v4 + 2; i < v10 && *i == *(i - 2) + 1i64 && i[1] == *(i - 1) + 1i64; i += 2 )
;
if( i == v10 )
{
*((_DWORD *)NotifySync + 22) = v5 | 1;
if( VmpTraceLoggingProvider && *(_DWORD *)VmpTraceLoggingProvider )
{
if( tlgKeywordOn(VmpTraceLoggingProvider, 1i64) )
VmpLogLargeSlatFill(v12, *v4);
}
HvlMapGpaPages(*((_QWORD *)NotifySync + 9), *v4, v6 | 0x2000, 1ui64, v4 + 1, a5);
*a5 <<= 9;
}
else
{
LABEL_26:
if( VmpTraceLoggingProvider && *(_DWORD *)VmpTraceLoggingProvider && tlgKeywordOn(VmpTraceLoggingProvider, 1i64) )
VmpLogSparseSlatFill(v13, (INT64)v4, (unsigned int)FsContext);
HvlMapSparseGpaPages(*((_QWORD *)NotifySync + 9), v6, (UINT64)FsContext, (INT64)v4, (INT64)a5);
}
}Referenced by:
VmpProcessUpdateSlat