NtAreMappedFilesTheSame

NTSTATUS __stdcall NtAreMappedFilesTheSame(PVOID File1MappedAsAnImage, PVOID File2MappedAsFile){
  _ETHREAD *CurrentThread; 
  INT64 v5; 
  INT64 v6; 
  INT64 v7; 
  INT64 v8; 
  INT64 v9; 
  _QWORD *v10; 
  __int64 *v11; 
  _QWORD *v12; 
  __int64 v13; 
  int v14; 
  _FILE_OBJECT *v15; 
  INT64 v17; 
  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  v5 = MiObtainReferencedVadEx((UINT64)File1MappedAsAnImage, 2, &v17);
  v6 = v5;
  if( !v5 )
    return -1073741503;
  MiUnlockVadShared((INT64)CurrentThread, v5);
  v7 = MiObtainReferencedVadEx((UINT64)File2MappedAsFile, 2, &v17);
  v8 = v7;
  if( !v7 )
  {
    MiLockVadShared((INT64)CurrentThread, v6);
    MiUnlockAndDereferenceVadShared((PVOID)v6);
    return -1073741503;
  }
  if( v6 == v7 )
  {
    MiDereferenceVad(v6);
    MiUnlockAndDereferenceVadShared((PVOID)v8);
    return 0;
  }
  else if( (unsigned int)MiVadIsCfgBitmap((_MMVAD *)v6) == 1 || (unsigned int)MiVadIsCfgBitmap((_MMVAD *)v8) == 1 )
  {
    MiUnlockAndDereferenceVadShared((PVOID)v8);
    MiLockVadShared((INT64)CurrentThread, v6);
    MiUnlockAndDereferenceVadShared((PVOID)v6);
    return -1073741800;
  }
  else
  {
    if( File1MappedAsAnImage <= File2MappedAsFile )
    {
      MiUnlockVadShared((INT64)CurrentThread, v8);
      MiLockVadShared((INT64)CurrentThread, v6);
      v9 = v8;
    }
    else
    {
      v9 = v6;
    }
    ExAcquirePushLockSharedEx(v9 + 40, 0i64);
    if( (unsigned int)MiVadDeleted(v6) || (unsigned int)MiVadDeleted(v8) )
    {
      LODWORD(v17) = -1073741503;
    }
    else if( (*(_DWORD *)(v6 + 48) & 0x100000) == 0
           && (*(_DWORD *)(v8 + 48) & 0x100000) == 0
           && (v10 = *(_QWORD **)(v6 + 72)) != 0i64
           && (v11 = *(__int64 **)(v8 + 72)) != 0i64
           && (v12 = (_QWORD *)*v10) != 0i64
           && (v13 = *v11) != 0
           && v12[8]
           && *(_QWORD *)(v13 + 64) )
    {
      v14 = -1073741612;
      v15 = MiReferenceControlAreaFile((_CONTROL_AREA *)v13);
      if( v12 == v15->SectionObjectPointer->ImageSectionObject )
        v14 = 0;
      LODWORD(v17) = v14;
      MiDereferenceControlAreaFile(v13, (unsigned __int64)v15);
    }
    else
    {
      LODWORD(v17) = -1073741800;
    }
    if( _InterlockedCompareExchange64((volatile signed __int64 *)(v8 + 40), 0i64, 17i64) != 17 )
      ExfReleasePushLockShared((INT64 *)(v8 + 40));
    KeAbPostRelease((PVOID)(v8 + 40));
    MiUnlockAndDereferenceVadShared((PVOID)v6);
    MiLockVadShared((INT64)CurrentThread, v8);
    MiUnlockAndDereferenceVadShared((PVOID)v8);
    return v17;
  }
}

Referenced by:

No references.