MiReferenceInPageFile

_FILE_OBJECT *__fastcall MiReferenceInPageFile(__int64 a1, unsigned int a2){
  __int64 v2; 
  _FILE_OBJECT *v5; 
  __int64 v7; 
  __int64 v8; 
  char *v9; 
  int v10; 
  v2 = *(_QWORD *)(a1 + 208);
  if( !v2 )
    return 0i64;
  v5 = MiReferenceControlAreaFile(*(_CONTROL_AREA **)(a1 + 208));
  if( (*(_DWORD *)(v2 + 56) & 0x20) != 0 )
  {
    _InterlockedIncrement64((volatile signed __int64 *)(v2 + 112));
    v7 = *(_QWORD *)(a1 + 256);
    v8 = *(_QWORD *)(v2 + 96);
    if( !v7 )
      v7 = a1 + 272;
    v9 = (char *)MmGetPfnDb() + 48 * *(_QWORD *)(v7 + 48);
    *(_DWORD *)(a1 + 188) = MiComputeImagePteIndex((INT64)v9, a2);
    if( *(_QWORD *)(v8 + 32) )
    {
      v10 = *(_DWORD *)(a1 + 192);
      *(_DWORD *)(a1 + 192) = v10 | 0x10000;
      if( (MiFlags & 0x40000) != 0
        && (!MiCanPageMove((INT64)v9)
         || (*(_DWORD *)(v2 + 92) & 0xC0000) != 0
         && (((unsigned __int8)MI_READ_PTE_LOCK_FREE((INT64)(v9 + 16)) >> 5) & 2) != 0) )
      {
        *(_DWORD *)(a1 + 192) = v10 & 0xFFFEFFFF;
      }
    }
  }
  else
  {
    *(_QWORD *)(a1 + 208) = 0i64;
  }
  return v5;
}

Referenced by:

MiIssueHardFault
MiPfExecuteReadList