VmpFreeMemoryRanges

NTSTATUS __stdcall VmpFreeMemoryRanges(PVOID P){
  _QWORD **v2; 
  _QWORD *v3; 
  _QWORD *v4; 

  v2 = (_QWORD **)((char *)P + 40);
  while( 1 )
  {
    v3 = *v2;
    if( *v2 == v2 )
      break;
    if( (_QWORD **)v3[1] != v2 || (v4 = (_QWORD *)*v3, *(_QWORD **)(*v3 + 8i64) != v3) )
      __fastfail(3u);
    *v2 = v4;
    v4[1] = v2;
    ExFreePoolWithTag(v3, 0);
  }
  return(unsigned int)ExFreePoolWithTag(P, 0);
}

Referenced by:

VmCreateMemoryRange
VmFreePreallocationForRangeCreate
VmpAllocateMemoryRanges
VmpInsertMemoryRange
VmpMergeMemoryRanges
VmpRemoveMemoryRange
VmpSplitMemoryRange