MmIsFileMapped

__int64 __fastcall MmIsFileMapped(ULONG_PTR a1, __int64 a2){
  _SECTION_OBJECT_POINTERS *v2; 
  unsigned int v3; 
  __int64 v4; 
  _ETHREAD *CurrentThread; 
  int v6; 
  _QWORD *v7; 
  _QWORD *i; 
  _QWORD **v9; 
  INT64 v10; 
  _QWORD *v11; 
  _QWORD *v12; 
  _CONTROL_AREA **v13; 
  _CONTROL_AREA *v14; 
  _FILE_OBJECT *v15; 
  _KAPC_STATE ApcState; 
  v2 = *(_SECTION_OBJECT_POINTERS **)(a2 + 40);
  memset(&ApcState, 0, sizeof(ApcState));
  v3 = 0;
  v4 = a1;
  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  if( *((_QWORD *)CurrentThread + 23) == a1 )
  {
    v6 = 0;
  }
  else
  {
    KiStackAttachProcess((_KPROCESS *)a1, 0i64, &ApcState);
    v6 = 1;
  }
  LOCK_ADDRESS_SPACE_SHARED(CurrentThread, (_EPROCESS *)v4);
  v7 = *(_QWORD **)(v4 + 2008);
  i = 0i64;
  while( v7 )
  {
    i = v7;
    v7 = (_QWORD *)*v7;
  }
  if( i )
  {
    do
    {
      v9 = (_QWORD **)i[1];
      v10 = (INT64)i;
      v11 = i;
      if( v9 )
      {
        v12 = *v9;
        for( i = (_QWORD *)i[1]; v12; v12 = (_QWORD *)*v12 )
          i = v12;
      }
      else
      {
        while( 1 )
        {
          i = (_QWORD *)(i[2] & 0xFFFFFFFFFFFFFFFCui64);
          if( !i || (_QWORD *)*i == v11 )
            break;
          v11 = i;
        }
      }
      if( (*(_DWORD *)(v10 + 48) & 0x100000) == 0 )
      {
        MiLockVadShared((INT64)CurrentThread, v10);
        if( !(unsigned int)MiVadDeleted(v10) )
        {
          v13 = *(_CONTROL_AREA ***)(v10 + 72);
          v14 = *v13;
          if( *((_QWORD *)*v13 + 8) )
          {
            v15 = MiReferenceControlAreaFile(*v13);
            if( v15->SectionObjectPointer == v2 )
              v3 = 1;
            MiDereferenceControlAreaFile((__int64)v14, (unsigned __int64)v15);
          }
        }
        MiUnlockVadShared((INT64)CurrentThread, v10);
        if( v3 == 1 )
          break;
      }
    }
    while( i );
    v4 = a1;
  }
  UNLOCK_ADDRESS_SPACE_SHARED((__int64)CurrentThread, v4);
  if( v6 == 1 )
    KiUnstackDetachProcess(&ApcState, 0i64);
  return v3;
}

Referenced by:

IopQueryProcessIdsUsingFile