MiFaultGetFileExtents

INT64 __fastcall MiFaultGetFileExtents(INT64 a1, INT64 a2){
  _QWORD *v2; 
  ULONG_PTR v4; 
  _QWORD *v6; 
  unsigned int SessionId; 
  unsigned int FileExtents; 
  v2 = *(_QWORD **)(a2 + 208);
  v4 = *(_QWORD *)(a2 + 232);
  v6 = (_QWORD *)*v2;
  if( (*((_BYTE *)v2 + 34) & 2) != 0 )
  {
    SessionId = MmGetSessionIdEx(*((_QWORD *)KeGetCurrentThread() + 23));
    v4 = v2[1] + 8 * ((__int64)(v4 - MiGetSharedProtos((__int64)v6, SessionId, (__int64)v2)[9]) >> 3);
  }
  MiRetainSubsection((ULONG_PTR)v2);
  ExAcquireSpinLockExclusiveAtDpcLevel(v6 + 9);
  ++v6[5];
  ++v6[6];
  ExReleaseSpinLockExclusiveFromDpcLevel(v6 + 9);
  MiReleaseFaultSynchronization(a1);
  FileExtents = MiAllocateFileExtents((ULONG_PTR)v2, (__int64)(v4 - v2[1]) >> 3, v4, 1, 2);
  MiFreeInPageSupportBlock((PSLIST_ENTRY)a2);
  MiDereferenceControlArea((__int64)v6);
  MiReleaseFaultCharges(v2);
  return FileExtents;
}

Referenced by:

MmAccessFault