NtAreMappedFilesTheSame

NTSTATUS __stdcall NtAreMappedFilesTheSame(VOID *File1MappedAsAnImage, VOID *File2MappedAsFile){
  _ETHREAD *CurrentThread; 
  _EX_PUSH_LOCK *v5; 
  _MMVAD *v6; 
  _MMVAD *v7; 
  _MMVAD *v8; 
  _EX_PUSH_LOCK *v9; 
  _SUBSECTION *Subsection; 
  _CONTROL_AREA **p_ControlArea; 
  _CONTROL_AREA *ControlArea; 
  _CONTROL_AREA *v13; 
  int v14; 
  _FILE_OBJECT *v15; 
  INT64 v17; 

  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  LODWORD(v5) = MiObtainReferencedVadEx((UINT64)File1MappedAsAnImage, 2, &v17);
  v6 = (_MMVAD *)v5;
  if( !v5 )
    return -1073741503;
  MiUnlockVadShared(&CurrentThread->Tcb, v5);
  LODWORD(v7) = MiObtainReferencedVadEx((UINT64)File2MappedAsFile, 2, &v17);
  v8 = v7;
  if( !v7 )
  {
    MiLockVadShared((INT64)CurrentThread, (INT64)v6);
    MiUnlockAndDereferenceVadShared(v6);
    return -1073741503;
  }
  if( v6 == v7 )
  {
    MiDereferenceVad(&v6->Core);
    MiUnlockAndDereferenceVadShared(v8);
    return 0;
  }
  else if( MiVadIsCfgBitmap(v6) == 1 || MiVadIsCfgBitmap(v8) == 1 )
  {
    MiUnlockAndDereferenceVadShared(v8);
    MiLockVadShared((INT64)CurrentThread, (INT64)v6);
    MiUnlockAndDereferenceVadShared(v6);
    return -1073741800;
  }
  else
  {
    if( File1MappedAsAnImage <= File2MappedAsFile )
    {
      MiUnlockVadShared(&CurrentThread->Tcb, (_EX_PUSH_LOCK *)v8);
      MiLockVadShared((INT64)CurrentThread, (INT64)v6);
      v9 = (_EX_PUSH_LOCK *)v8;
    }
    else
    {
      v9 = (_EX_PUSH_LOCK *)v6;
    }
    ExAcquirePushLockSharedEx(v9 + 5, 0i64);
    if( MiVadDeleted(&v6->Core) || MiVadDeleted(&v8->Core) )
    {
      LODWORD(v17) = -1073741503;
    }
    else if( (v6->Core.u.LongFlags & 0x100000) == 0
           && (v8->Core.u.LongFlags & 0x100000) == 0
           && (Subsection = v6->Subsection) != 0i64
           && (p_ControlArea = &v8->Subsection->ControlArea) != 0i64
           && (ControlArea = Subsection->ControlArea) != 0i64
           && (v13 = *p_ControlArea) != 0i64
           && ControlArea->FilePointer.Value
           && v13->FilePointer.Value )
    {
      v14 = -1073741612;
      v15 = MiReferenceControlAreaFile(v13);
      if( ControlArea == v15->SectionObjectPointer->ImageSectionObject )
        v14 = 0;
      LODWORD(v17) = v14;
      MiDereferenceControlAreaFile(v13, v15);
    }
    else
    {
      LODWORD(v17) = -1073741800;
    }
    if( _InterlockedCompareExchange64(&v8->Core.PushLock._bf_0, 0i64, 17i64) != 17 )
      ExfReleasePushLockShared(&v8->Core.PushLock);
    KeAbPostRelease(&v8->Core.PushLock);
    MiUnlockAndDereferenceVadShared(v6);
    MiLockVadShared((INT64)CurrentThread, (INT64)v8);
    MiUnlockAndDereferenceVadShared(v8);
    return v17;
  }
}

Referenced by:

No references.