The Wine development release 1.7.41 is now available.

What's new in this release (see below for details):
  - More Known Folders supported in the shell.
  - Some more support for kernel job objects.
  - More MSI patches improvements.
  - Some theming fixes.
  - Various bug fixes.

The source is available from the following locations:

  http://prdownloads.sourceforge.net/wine/wine-1.7.41.tar.bz2
  http://mirrors.ibiblio.org/wine/source/1.7/wine-1.7.41.tar.bz2

Binary packages for various distributions will be available from:

  http://www.winehq.org/download

You will find documentation on http://www.winehq.org/documentation

You can also get the current source directly from the git
repository. Check http://www.winehq.org/git for details.

Wine is available thanks to the work of many people. See the file
AUTHORS in the distribution for the complete list.

----------------------------------------------------------------

Bugs fixed in 1.7.41 (total 41):

  11364  WinRar doesn't fully utilize CPU cores in the multithreaded (SMP) mode
  20041  DirectPlay8 requires some IP_ADAPTER_UNICAST_ADDRESS parameters to be correct in GetAdaptersAddresses (Rise of Nations, Two Worlds, Cultures Northland)
  23481  Network game in Heroes 3 doesn't work
  26333  Star Wars: Galactic Battlegrounds: Clone Campaigns 1.0x crashes on pressing 'Multiplayer' -> 'Show Games'
  28754  valgrind shows an uninitialized value in comdlg32/tests/itemdlg.ok, update_layout()
  28769  shell32/shellpath tests: test_knownFolders() triggers use-after-free and invalid free in foldermanager
  31264  iTunes will not connect to the iTunes music store
  32719  WinISIS 1.5.3 crashes when opening a database
  33723  EA Origin needs job objects
  33914  Pokemon uranium Crashes
  34820  Path of Exile fails to start in windowed mode (crashes on resize)
  35337  GOG.com installer--a small line appears on the progress bar after some time
  36331  Rhapsody 2 installer renders app folder inaccessible (SetNamedSecurityInfo with 'everyone' access)
  36809  valgrind shows an unitialized variable in dlls/dmscript/tests/dmscript.c
  36821  Multi Theft Auto: San Andreas 1.3.5 'FairplayKD.sys' driver continuously spams terminal due to 'PsLookupProcessByProcessId' stub
  36897  No sound recording
  37103  Wine incorrectly handles UNIX group permissions
  37150  python 3.1.1: test_math failed
  37527  Multiple games and applications fail to connect/login via SSL, reporting 'schannel failed to setup sequence detection' (Desura client, Darkfall, ARMA II multiplayer)
  37689  Sumatra PDF 3.0 crashes when opening .epub and .mobi files
  37750  Assassin's Creed: graphical issues in the menus and in-game
  37851  Call of Duty 4: colors and textures are not rendered correctly
  37956  Photoshop (CS6/CC) 64bit crash when you press "cancel" button
  38041  GTAVC abruptly switches sound from left speaker to right when steering a car
  38058  Resident Evil Revelations missing scene objects
  38132  Multiple .NET 4.x WPF applications need 'IDWriteTextAnalyzer::AnalyzeNumberSubstitution' method implementation in Win7 mode (sb0t v.5, Samsung Smart View 2.0)
  38134  Uplay v5.x: can't log in (Uplay hangs with the login screen)
  38206  Sound clicks in Blizzard's "Heroes of the Storm" and "Diablo 3", and also some slightly annoying clicking in "World of Tanks".
  38297  Prince of Persia: Warrior Within: rendering issues
  38330  DraftSight registration submission causes page fault (fixme:wbemprox:client_security_SetBlanket)
  38340  iexplore crashes after follow links.
  38341  Photoshop CS6 crash at startup
  38344  Invalid memory access in get_registry_locale_info()
  38348  _wsopen_s does not respect the pmode parameter when O_CREAT is set
  38351  Ninite downloader fails to install application
  38353  DIRT3 crashes after showing racing results screen (ToUnicodeEx should accept NULL pointer as keystate)
  38361  Dead Space 2 (Steam) crashes at the <Please wait...Connecting> screen
  38366  Outlast crashes with ARB shaders enabled
  38372  Midnight Mysteries: The Salem Witch Trials crashes on start (SO_ERROR returns zero instead of ECONNREFUSED after connect attempt fails)
  38387  Multiple .NET 4.x WPF applications abort with 'Unrecoverable system error' in Win7 mode (dwrite font family resolution must be case-insentive)
  38410  ws2_32 fails compile without IPX

----------------------------------------------------------------

Changes since 1.7.40:

Aaryaman Vasishta (4):
      d3drm: Fix IDirect3DRMFrame2::QueryInterface returning incorrect HRESULT.
      d3drm: Add more interfaces to be queried from IDirect3DRMFrame2::QueryInterface.
      d3drm/tests: Make get_refcount return ULONG instead of int.
      d3drm/tests: Add QueryInterface tests for IDirect3DRMFrame{1-3}.

Alexandre Julliard (2):
      ws2_32: Include wsnwlink.h even without IPX support.
      msvcp60: Merge more I/O stream code with msvcp90 to reduce the differences.

Alistair Leslie-Hughes (1):
      dpnet: Convert Address components to use an array.

Andrew Cook (2):
      ntdll: Return success for JobObjectBasicUIRestrictions.
      server: Implement TerminateJobObject.

Andrew Eikum (12):
      gdiplus: Avoid unnecessary pre-multiplied alpha conversions in GdipDrawImagePointsRect.
      wineoss.drv: Cap reported OSS fill level to expected level.
      shell32: Support setting and retrieving KnownFolder parsing names.
      shell32: Add more knownfolder definitions.
      shell32: Allocate returned array in IKnownFolderManager::GetFolderIds.
      shell32: Add more knownfolders.
      shell32: Add more knownfolders.
      shell32: Add more knownfolders.
      shell32: Add more knownfolders.
      dsound: Stricter validation for formats in secondary buffers.
      winecfg: Use a listview for speaker configuration.
      dsound/tests: Don't perform ALAW test on secondary buffers.

Aric Stewart (1):
      dinput: Add JoystickID to the Instance Name.

Bruno Jesus (19):
      ws2_32: Fix copy & paste error in fd_sets_to_poll (Coverity).
      ws2_32: Better trace shutdown().
      ws2_32: Shortcut socket() to WSASocketW instead of WSASocketA.
      netapi32: Better stub NetStatisticsGet().
      gdi32: Support negative count values in GetBitmapBits.
      ws2_32/tests: Add some more select() related tests.
      ws2_32: Add a more generic function to retrieve socket errors from server.
      ws2_32: Handle SO_ERROR manually in getsockopt().
      secur32: Don't try to set an empty target name in schan_InitializeSecurityContextW.
      ws2_32/tests: Add tests about retrieving the local address of an interface bound socket.
      ws2_32: Restore the local socket address that was bound with filter for getsockname().
      include: Update iptypes.h with the old XP IP_ADAPTER_ADDRESSES structure.
      ws2_32/tests: Add more select() tests.
      ws2_32/tests: Add one more SO_ERROR test.
      ws2_32: Convert EBADF errno to ENOTSOCK.
      include: Add a missing field to IP_ADAPTER_ADDRESSES_LH.
      iphlpapi/tests: Add more test_GetAdaptersAddresses tests.
      iphlpapi: Update the buffer size only if required in GetAdaptersAddresses.
      iphlpapi: Stub more IP_ADAPTER_UNICAST_ADDRESS fields in GetAdaptersAddresses.

Daniel Lehman (1):
      wininet: Trace loaded proxy settings.

François Gouget (2):
      shell32: Add support for the OS X 'My Stuff' folders.
      windowscodecs/tests: Fix compilation on systems that don't support nameless unions.

Gerald Pfeifer (1):
      wininet: Avoid four instances of "logical not is only applied to the to the left hand side".

Grazvydas Ignotas (2):
      dbghelp: Detect if return address information is missing.
      include: Add a few missing entries in wingdi.h.

Hans Leidekker (10):
      fusion: Support buffer size queries in IAssemblyName::GetName.
      fusion: Fix insufficient buffer size handling in IAssemblyName::GetDisplayName.
      msi: Don't read past the end of the patch list in MsiApplyMultiplePatchesW.
      msi: Take the component action into account for file patches.
      msi: Assume that file patches from registered MSI patches have already been applied.
      msi: Add support for patching global assembly files.
      msi: Improve the check for files obsoleted by patches.
      msi: Perform a suffix match on the volume name.
      advapi32: Support parsing mandatory label ACE strings.
      server: Accept mandatory label ACEs.

Henri Verbeet (14):
      d3d9/tests: Test D3DPRESENT_PARAMETERS after a successful reset.
      d3d8/tests: Test D3DPRESENT_PARAMETERS after a successful reset.
      d3d9: Merge most of d3d9_device_Reset() and d3d9_device_ResetEx().
      d3d9: Update the backbuffer D3DPRESENT_PARAMETERS after a successful reset.
      d3d8: Update the BackBufferCount after a successful reset.
      wined3d: Use the display format if WINED3DFMT_UNKNOWN is passed as backbuffer format for windowed mode resets.
      wined3d: Bind sampler objects to the correct texture stage.
      wined3d: Properly handle WINED3DSIH_DP2 in the GLSL shader backend.
      d2d1: Take the world transform into account when calculating the bitmap brush texcoord transform.
      d2d1: Add opacity support to bitmap brushes.
      wined3d: Bind the texture before calling wined3d_volume_upload_data() in wined3d_volume_load_location().
      wined3d: Use wined3d_texture_bind_and_dirtify() in device_update_volume().
      wined3d: Use wined3d_texture_bind_and_dirtify() in wined3d_texture_upload_data().
      wined3d: Get rid of context_invalidate_active_texture().

Hugh McMaster (1):
      wineconsole: Do not truncate argument strings larger than 256 bytes.

Igor Kotrasinski (1):
      dsound: Fix conning formula to correctly interpolate volume.

Jacek Caban (7):
      wmvcore: Added IWMReaderAdvanced* stub implementation.
      wmsdkidl.idl: Added WMCreateReader declaration.
      mshtml: Increment ref count in QI(IID_HTMLPluginContainer) call.
      mshtml: Use debugstr_mshtml_guid in object and embed element implementation.
      textstor.idl: Added missing GXFPF_* constants.
      msxml3: Create unknode object only for node types supported by msxml.
      mshtml: Use NS_Alloc and NS_Free directly instead of via nsIMemory.

Jason Overland (1):
      winecfg: Add owner to file picker dialogs, making them modal.

Jianqiu Zhang (1):
      include: Add declaration for FILE_FS_FULL_SIZE_INFORMATION.

Joachim Priesner (1):
      wined3d: Load ModelView matrix for glLightfv calls.

Julius Schwartzenberg (1):
      dwrite: Font search is case insensitive.

Marcus Meissner (3):
      comctl32: Avoid integer overflow (Coverity).
      d3drm: Avoid potential double free (Coverity).
      wininet: Avoid memory leak in error exit (Coverity).

Mark Harmstone (11):
      include: Add MUI constants to winnls.h.
      kernel32: Stub out GetFileMUIPath.
      uxtheme: Fix off-by-one error in array size.
      include: Update value of MAX_INTLIST_COUNT in uxtheme.h.
      include: Add SM_CXPADDEDBORDER to winuser.h.
      comctl32: Fix drawing of buddy background for updown controls.
      uxtheme: Fix colour errors in UXTHEME_StretchBlt.
      uxtheme: Fix a copy-paste error which mean that GetThemeString would always fail.
      uxtheme: Free properties when theme file closed.
      uxtheme: Fix typo making fonts italic.
      uxtheme: Resize source image if destination smaller than margins.

Maxime Lombard (1):
      wined3d: Add support for Nvidia GTX 970M.

Michael Müller (1):
      ws2_32: Don't return an error in WS_select when EINTR happens during timeout.

Nikolay Sivov (19):
      dwrite: Add cluster metrics entry for inline objects too.
      dmscript: Implement GetClassID() for IDirectMusicTrack.
      ole32: Remove a couple of interface casts.
      browseui: Return interface pointer instead of impl pointer.
      scrrun: Implement GetSpecialFolder().
      dwrite: Return S_OK from AnalyzeNumberSubstitution().
      shell32: Fix allocation size (Valgrind).
      shell32: Cleanup item array creation code.
      shell32: Remove a couple of redundant lines.
      shell32: Cleanup IShellItem creation calls.
      scrrun: Fix iterating through per-bucket pair list (Valgrind).
      winealsa: Fix a leak of a silence buffer (Valgrind).
      mmdevapi: Fix returned format leak (Valgrind).
      rpcrt4/tests: Fix a minor leak (Valgrind).
      shlwapi/tests: Fix uninitialized memory reads (Valgrind).
      oleaut32/tests: Skip cache tests if it's disabled.
      rpcss: Fix a protseq string leak (Valgrind).
      wshom.ocx/tests: Fix a BSTR leak (Valgrind).
      usp10/tests: Fix some leaks on error path (Valgrind).

Patrick Rudolph (1):
      gdi32: Add stub functions.

Piotr Caban (2):
      msvcr120: Added strtoll and strtoull exports.
      msvcrt: Don't ignore pmode attribute in _wsopen_s.

Sebastian Lackner (17):
      include: Automatically detect if tests are running under Wine when WINETEST_PLATFORM is not specified.
      kernel32: Fix calculation of returned buffer in get_registry_locale_info.
      user32: Check for NULL pointer in ToUnicodeEx.
      user32/tests: Add tests for ToUnicodeEx with a NULL pointer as keystate.
      user32/tests: Add tests for ToAscii.
      secur32: Return more context attributes in schan_InitializeSecurityContextW.
      ntoskrnl: Avoid repeated FIXME messages in PsLookupProcessByProcessId.
      user32: Move key state cache into a separate struct.
      user32: Invalidate key state cache globally after running LL hooks.
      kernel32: Add stub for PowerCreateRequest.
      kernel32: Add stub for PowerSetRequest.
      kernel32: Add stub for PowerClearRequest.
      kernel32/tests: Add tests for waiting on an job object.
      server: Implement waiting for job objects.
      wined3d: Fix typo in init_output_registers.
      wined3d: Fix a typo in vertexshader_init.
      ws2_32: Add a missing call to release_sock_fd.

Stas Cymbalov (1):
      dsound: Fix angle to sound source calculation.

Stefan Dösinger (16):
      wined3d: Use a shader for unconverted blits.
      wined3d: Add a function for wined3d_gl_resource_type to texture target conversion.
      wined3d: Move surface_convert_color_to_float to utils.c.
      wined3d: Add more formats to wined3d_format_convert_color_to_float.
      wined3d: Set color keys through the command stream.
      wined3d: Allow ARB blits from converted surfaces.
      wined3d: Implement color keying in arbfp_blit.
      wined3d: Implement color keying in the glsl fragment pipeline.
      wined3d: Match blitter and fragment processing color keying capabilities.
      wined3d: Move alpha test states to the fragment pipeline.
      wined3d: Simplify alpha test and color keying in GLSL.
      wined3d: Handle color key dirtification in wined3d_cs_exec_set_texture.
      wined3d: Use finer grained colorkey state invalidation.
      wined3d: Implement color keying in the ARB fixed function pipeline.
      wined3d: Move fixed function draw blits out of surface_blt_special.
      wined3d: Call arbfp_blit_surface and ffp_blit_blit_surface through the blit interfaces.

Thomas Faber (5):
      include: Use correct UUIDs for IAudioMute, IAudioAutoGainControl and DevTopologyLib (MIDL).
      include: Add missing retval attribute to propget output parameters (MIDL).
      include: Do not use out attribute for non-pointer parameters in shdeprecated.idl (MIDL).
      include: Fix MIDL build in mshtml.idl.
      mshtml: Remove nsIDOMWindowUtils::SetCriticalDisplayPortForElement.

Vincent Povirk (5):
      gdiplus: Fix leak in png metadata reader.
      windowscodecs: Add test for PNG gAMA metadata.
      windowscodecs: Implement PNG gAMA metadata reader.
      gdiplus: Add support for reading png gAMA chunks.
      windowscodecs: Fix crash when PNG decoder is freed without successful init.

--
Alexandre Julliard
julliard@winehq.org
