IoFreeDumpRange

__int64 __fastcall IoFreeDumpRange(__int64 a1, char *a2, unsigned __int64 a3, int a4){
  unsigned __int64 v4; 
  char *v5; 
  PHYSICAL_ADDRESS PhysicalAddress; 
  NTSTATUS v8; 
  unsigned int v9; 
  PHYSICAL_ADDRESS v10; 
  NTSTATUS v11; 
  v4 = a3;
  v5 = a2;
  if( a4 == 1 )
  {
    PhysicalAddress = MmGetPhysicalAddress(a2);
    v8 = IopRemovePageFromPageMap(
           *(_RTL_BITMAP_EX **)(a1 + 16),
           *(UINT64 **)(a1 + 32),
           (unsigned __int64)PhysicalAddress.QuadPart >> 12,
           v4,
           *(_BYTE *)(a1 + 40) & 1);
LABEL_5:
    v9 = v8;
    goto LABEL_11;
  }
  if( a4 == 2 )
  {
    v8 = IopRemovePageFromPageMap(
           *(_RTL_BITMAP_EX **)(a1 + 16),
           *(UINT64 **)(a1 + 32),
           (UINT64)a2,
           a3,
           *(_BYTE *)(a1 + 40) & 1);
    goto LABEL_5;
  }
  v9 = 0;
  if( !a3 )
    return v9;
  do
  {
    if( MmIsAddressValidEx((INT64)v5) )
    {
      v10 = MmGetPhysicalAddress(v5);
      v11 = IopRemovePageFromPageMap(
              *(_RTL_BITMAP_EX **)(a1 + 16),
              *(UINT64 **)(a1 + 32),
              (unsigned __int64)v10.QuadPart >> 12,
              1ui64,
              *(_BYTE *)(a1 + 40) & 1);
      if( v11 < 0 )
        v9 = v11;
    }
    v5 += 4096;
    --v4;
  }
  while( v4 );
LABEL_11:
  if( v9 == -1073741503 && (*(_BYTE *)(a1 + 40) & 1) != 0 )
    return 0;
  return v9;
}

Referenced by:

IopLiveDumpCallRemovePagesCallbacks
IopRemovePageDumpRange