IoFreeDumpRange
VOID __fastcall IoFreeDumpRange(_MM_KERNEL_DUMP_CONTEXT *Context, VOID *StartVa, UINT64 Pages, UINT64 AddressFlags){
UINT64 v4;
char *v5;
unsigned __int64 v7;
unsigned __int64 v8;
v4 = Pages;
v5 = (char *)StartVa;
if( (_DWORD)AddressFlags == 1 )
{
LODWORD(v7) = MmGetPhysicalAddress((UINT64)StartVa);
IopRemovePageFromPageMap(
*((_RTL_BITMAP_EX **)Context + 2),
*((UINT64 **)Context + 4),
v7 >> 12,
v4,
Context[10] & 1);
}
else if( (_DWORD)AddressFlags == 2 )
{
IopRemovePageFromPageMap(
*((_RTL_BITMAP_EX **)Context + 2),
*((UINT64 **)Context + 4),
(UINT64)StartVa,
Pages,
Context[10] & 1);
}
else if( Pages )
{
do
{
if( MmIsAddressValidEx((INT64)v5) )
{
LODWORD(v8) = MmGetPhysicalAddress((UINT64)v5);
IopRemovePageFromPageMap(
*((_RTL_BITMAP_EX **)Context + 2),
*((UINT64 **)Context + 4),
v8 >> 12,
1ui64,
Context[10] & 1);
}
v5 += 4096;
--v4;
}
while( v4 );
}
}Referenced by:
IopLiveDumpCallRemovePagesCallbacks
IopRemovePageDumpRange