MiFillPhysicalPages
NTSTATUS __stdcall MiFillPhysicalPages(PVOID BugCheckParameter2){
__int64 v1;
unsigned __int64 v2;
UINT64 *v3;
unsigned __int64 v4;
__int64 v6;
__int64 v7;
void *v8;
void *v9;
NTSTATUS result;
unsigned __int64 Phase0Mapping;
__int64 OldIrql;
OldIrql = v1;
LOBYTE(OldIrql) = 17;
v3 = 0i64;
v4 = v2;
v6 = 0i64;
v7 = *((_QWORD *)KeGetCurrentPrcb() + 4160);
do
{
if( v7 )
{
LODWORD(v8) = MiMapPageInHyperSpaceWorker((UINT64)BugCheckParameter2, (UINT8 *)&OldIrql, 0x80000000ui64);
v9 = v8;
}
else
{
Phase0Mapping = (unsigned __int64)MxGetPhase0Mapping();
v9 = (void *)Phase0Mapping;
if( !Phase0Mapping )
KeBugCheckEx(0x1Au, 0x3030305ui64, (ULONG_PTR)BugCheckParameter2, 0i64, 0i64);
v3 = (UINT64 *)((char *)MmGetPteBase() + ((Phase0Mapping >> 9) & 0x7FFFFFFFF8i64));
*v3 = MiMakeValidPte((UINT64)v3, (INT64)BugCheckParameter2, 2684354564i64);
}
if( v4 )
memset64(v9, v4, 0x200ui64);
else
KeZeroPages(v9, 0x1000ui64);
if( v7 )
{
MiUnmapPageInHyperSpaceWorker(v9, OldIrql, 0x80000000ui64);
}
else
{
*v3 = ZeroPte;
result = KeFlushSingleTb(v9, 0i64, 1i64);
}
++v6;
BugCheckParameter2 = (char *)BugCheckParameter2 + 1;
}
while( !v6 );
return result;
}Referenced by:
MiGetPoolPages
MiInitializeDummyPages
MiInitializeSystemPageTable
MiZeroPhysicalPage
MxMapVa