Initial OpenGL support in the Wayland driver.
Support for elevating process privileges.
More HID pointer improvements.
Various bug fixes.

The source is available at https://dl.winehq.org/wine/source/9.x/wine-9.4.tar.xz
Binary packages for various distributions will be available
from https://www.winehq.org/download
You will find documentation on https://www.winehq.org/documentation
Wine is available thanks to the work of many people.
See the file AUTHORS for the complete list.

Bugs fixed in 9.4 (total 25):

#11629 Add optional start menu and taskbar to explorer

#24812 Explorer++ 1.2: right-click menu (in the main listview) degrades to nothing when opened multiple times

#34319 Total Commander 8.x: Context menu does not contain ‘paste’ entry

#34321 Total Commander 8.x: cut/copy/paste keyboard shortcuts don’t work

#34322 Total Commander 8.x: ‘cut’ works like ‘copy’

#44797 Visio 2003 does not read the complete list of fonts present in the system.

#46773 Skype 4 MSI installer fails to create trigger for task using Task Scheduler (unimplemented type 7, TASK_TRIGGER_REGISTRATION)

#48110 Multiple .NET 4.x applications need TaskService::ConnectedUser property (Toad for MySQL Freeware 7.x, Microsoft Toolkit from MS Office 2013)

#48344 Luminance HDR / qtpfsgui 2.6.0: Empty file select dialog

#49877 Minecraft Education Edition shows error during install: Fails to create scheduled task

#52213 Thread crashes when pthread_exit is called in a SIGQUIT handler

#55487 winpcap: pcap_dispatch doesn’t capture anything with count argument -1

#55619 VOCALOID AI Shared Editor v.6.1.0 crashes with System.Management.ManagementObject object construction

#55724 mfmediaengine:mfmediaengine sometimes gets a threadpool assertion in Wine

#55821 Desktop Window Manager crashes when launching a WPF app

#56147 Real time Receiving data freezes for 1-5 seconds

#56271 Free Download Manager no longer works after it updated (stuck at 100% CPU, no visible window)

#56299 imm32.dll: CtfImmIsGuidMapEnable could not be located in the dynamic link library

#56334 Page fault when querying dinput8_a_EnumDevices

#56337 battle.net: tray icon is not displayed with wine-9.2

#56345 EA app installer has no text

#56357 Zero sized writes using WriteProcessMemory succeed on Windows, but fail on Wine.

#56360 FoxVox window is rendered as a blank surface instead of expected user interface

#56388 Regression: Fullscreen apps show on wrong monitor and don’t respond to mouse events properly

#56401 Some ARM unwinding testcases broken by “ntdll: Use the correct structure for non-volatile registers”

Changes since 9.3:

Aida Jonikienė (3):
qwave: Add QOSCloseHandle() stub.
qwave: Add tests for QOSCloseHandle().
msvcrt: Handle wide specifiers option in __stdio_common_vfscanf().

Alexandre Julliard (59):
ntdll: Add a wrapper macro for ARM64EC syscalls.
win32u: Add a wrapper macro for ARM64EC syscalls.
include: Add SEH information to ARM64EC syscalls.
ntdll: Add SEH information to ARM64EC breakpoints.
winebuild: Remove some no longer used support for ELF ARM platforms.
wow64: Update Wow64RaiseException behavior to match i386 hardware exceptions.
wow64: Use a .seh handler for the simulation loop.
ntdll: Always use .seh handlers on ARM.
ntdll: Use a .seh handler in DbgUiRemoteBreakin on ARM64EC.
ntdll: Use a .seh handler in RtlUserThreadStart on ARM64EC.
ntdll: Implement RtlCaptureContext on ARM64EC.
ntdll: Use the exported structures for dll redirection data.
ntdll: Move RtlHashUnicodeString constants to a public header.
ntdll: Remove no longer needed definitions from the private header.
winedump: Print the correct register names for exception info on ARM64.
ntdll: Use the official definitions for exception flags.
kernelbase: Use the official definitions for exception flags.
krnl386.exe: Use the official definitions for exception flags.
msvcp90: Use the official definitions for exception flags.
msvcrt: Use the official definitions for exception flags.
win32u: Use the official definitions for exception flags.
winecrt0: Use the official definitions for exception flags.
wow64: Use the official definitions for exception flags.
winedbg: Use the official definitions for exception flags.
widl: Use the official definitions for exception flags.
include: Remove the private definitions of the exception flags.
include: Move unwinding functions definitions to rtlsupportapi.h.
ntdll: Implement RtlVirtualUnwind2.
ntdll/tests: Use a proper handler in the RtlRaiseException test on x86-64.
ntdll: Implement RtlRaiseException on ARM64EC.
kernelbase: Implement RaiseException on ARM64EC.
qwave/tests: Remove todo from a succeeding test.
ntdll: Port the RtlRaiseException test to ARM64.
ntdll: Port the RtlRaiseException test to ARM.
ntdll: Always use SEH support on ARM.
ntdll: Use the correct structure for non-volatile registers on ARM64.
ntdll: Use the correct structure for non-volatile registers on ARM.
ntdll: Also copy non-volatile regs on collided unwind.
ntdll: Use a common wrapper to call exception handlers on ARM64.
ntdll: Use a common wrapper to call exception handlers on ARM.
ntdll: Use a common wrapper to call unwind handlers on ARM64.
ntdll: Use a common wrapper to call unwind handlers on ARM.
ntdll: Allocate the data structure and stack for the ARM64EC emulator.
ntdll: Implement exception dispatching on ARM64EC.
ntdll: Implement KiUserExceptionDispatcher on ARM64EC.
vkd3d: Import upstream release 1.11.
ntdll: Use jump buffer definitions from setjmp.h.
ntdll: Export _setjmpex.
ntdll: Export longjmp.
ntdll: Implement _setjmpex on ARM64EC.
d3d10_1/tests: Mark a failing test as todo.
d3dx9/tests: Mark failing tests as todo.
ntdll: Don’t copy a missing context in get_thread_context().
ntdll: Remove a misleading WARN.
ntdll: Support the __os_arm64x_helper functions in the loader.
winedump: Dump the __os_arm64x_helper functions.
include: Always use _setjmpex on non-i386 platforms.
msvcrt: Import setjmp/setjmpex from ntdll.
msvcrt: Import longjmp from ntdll for PE builds.

Alexandros Frantzis (11):
winex11.drv: Remove unused refresh_drawables field.
winewayland.drv: Add skeleton OpenGL driver.
winewayland.drv: Initialize core GL functions.
winewayland.drv: Implement wglGetExtensionsString{ARB,EXT}.
winewayland.drv: Implement wglGetProcAddress.
winewayland.drv: Implement wglDescribePixelFormat.
winewayland.drv: Implement wglSetPixelFormat(WINE).
winewayland.drv: Implement OpenGL context creation.
winewayland.drv: Implement wglMakeCurrent and wglMakeContextCurrentARB.
winewayland.drv: Implement wglSwapBuffers.
winewayland.drv: Handle resizing of OpenGL content.

Aurimas Fišeras (1):
po: Update Lithuanian translation.

Brendan McGrath (5):
mshtml: Pass DOMEvent instead of nsIDOMEvent during handle_event.
mshtml: Use generic event dispatcher for DOMContentLoaded.
mshtml/tests: Add test for document mode after InitNew and Load.
mshtml: Always use the event target dispex.
mshtml: Don’t handle special case when doc != node->doc.

Brendan Shanks (2):
ntdll: Add native thread renaming for FreeBSD.
quartz: Set the name of internal threads.

Connor McAdams (6):
webservices/tests: Fix -Warray-bounds warning on gcc 13.2.0.
d3dx9/tests: Add more tests for misaligned compressed surface loading.
d3dx9: Use base image pointer when decompressing source image.
d3dx9: Split D3DXLoadSurfaceFromMemory functionality into a separate function.
d3dx9: Split off image decompression into a helper function.
d3dx9: Preserve the contents of unaligned compressed destination surfaces.

Daniel Lehman (5):
oleaut32/tests: Add tests for IPersistStream::GetSizeMax.
oleaut32: Implement GetSizeMax for empty picture.
oleaut32: Implement GetSizeMax for BMPs.
ole32: Do not lock storage in read-only deny-write mode.
ole32/tests: Remove todo from lock tests.

David McFarland (5):
mmdevapi/tests: Add test for AudioClient3_InitializeSharedAudioStream.
mmdevapi: Implement IAudioClient3_InitializeSharedAudioStream.
mmdevapi: Implement IAudioClient3_GetSharedModeEnginePeriod.
mmdevapi/tests: Add test for IDeviceTopology.
mmdevapi: Add stub for IDeviceTopology.

Eric Pouech (20):
server: Allow 0-write length in WriteProcessMemory().
dbghelp/tests: Add tests for image files lookup.
dbghelp/tests: Add tests for SymFindFileInPath for pdb files.
dbghelp/tests: Add tests about SymLoadModule and finding pdb files.
dbghelp: Don’t fail on loading 64bit modules on 32bit applications.
dbghelp: Don’t search the passed path in SymFindFileInPath.
dbghelp/tests: Add more tests for SymLoadModule*.
dbghelp: Always use SymGetSrvIndexFileInfo() for files lookup.
dbghelp: Rework loading of PDB string table.
dbghelp: Get rid of struct pdb_lookup.
dbghelp: Return matched information for path_find_symbol_file.
dbghelp: Search subdirectories in element path.
dbghelp: Relax failure conditions.
dbghelp: Change order when trying to load modules.
dbghelp: Mimic native behavior for module name.
dbghelp: Fix some corner case of virtual module loading.
dbghelp/tests: Extend the tests for SymLoadModule().
dbghelp: Support SLMFLAG_NO_SYMBOLS in SymLoadModuleEx*().
dbghelp: Don’t fail in SymAddSymbol for modules without debug information.
dbghelp: Fixed module information when unmatched pdb file is loaded.

Esme Povirk (7):
gdiplus: Switch to a struct for gdip_format_string callback args.
gdiplus: Pass gdip_format_string_info to font link functions.
gdiplus: Restore hdc argument to gdip_format_string.
gdiplus: Fix crash in GdipAddPathString.
gdiplus: Fix use after free in GdipAddPathString.
gdiplus: Implement font linking in GdipAddPathString.
mscoree: Implement CLRRuntimeHost_Start.

Fabian Maurer (7):
win32u: Move get_awareness_from_dpi_awareness_context.
win32u: Refactor get_thread_dpi_awareness to use get_awareness_from_dpi_awareness_context.
user32/tests: Add exhaustive tests for Get/SetThreadDpiAwarenessContext.
user32: Fix Set/GetThreadDpiAwarenessContext for DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE_V2.
user32/tests: Add tests for AreDpiAwarenessContextsEqual.
user32: Fix AreDpiAwarenessContextsEqual behavior for DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE_V2.
win32u: Sync dpi awareness changes from user32.

Florian Will (3):
include: Add TCP_KEEPCNT and TCP_KEEPINTVL definitions.
ws2_32/tests: Test TCP_KEEP{ALIVE,CNT,INTVL} options.
ws2_32: Implement TCP_KEEP{ALIVE,CNT,INTVL} options.

Gabriel Ivăncescu (1):
winex11: Set the correct visual even if alpha matches.

Hans Leidekker (5):
netprofm: Support NLM_ENUM_NETWORK flags.
netprofm: Set return pointer to NULL in networks_enum_Next().
wbemprox: Handle implicit property in object path.
netprofm/tests: Mark a test result as broken on Windows 11.
wbemprox: Use separate critical sections for tables and table list.

Henri Verbeet (2):
wined3d: Pass “shader->function” as source to vkd3d_shader_scan() in shader_spirv_scan_shader().
wined3d: Slightly adjust an ERR in shader_spirv_compile_shader().

Jacek Caban (9):
configure: Disable -Wmisleading-indentation warnings on GCC.
vcomp/tests: Use limits.h macros in for_static_i8_cb.
winebuild: Output load config on PE targets.
winevulkan: Update to VK spec version 1.3.278.
winevulkan: Remove no longer needed spec workarounds.
winevulkan: Rename wine_device_memory mapping to vm_map.
winevulkan: Use handle map for memory objects.
winevulkan: Refactor extra extensions handling in wine_vk_device_convert_create_info.
winevulkan: Use VK_EXT_map_memory_placed for memory mapping on wow64.

Martin Storsjö (1):
arm64: Expose information about more modern CPU extensions.

Michael Müller (1):
wine.inf: Register the New menu as a directory background context menu handler.

Nikolay Sivov (3):
d3dcompiler: Enable semantic names mapping in compatibility mode.
d3d10_1/tests: Add a basic test for returned preferred profiles.
d3d10_1/tests: Add an effect compilation test using 10.1 features.

Noah Berner (1):
comctl32/tests: Fix test that fails on Feb 29th.

Paul Gofman (34):
nsiproxy.sys: Fix ipv6 route table parsing on Linux.
iphlpapi: Partially fill Ipv4 / Ipv6 metric in GetAdaptersAddresses().
wbemprox: Force debug info in critical sections.
wmwcore: Force debug info in critical sections.
browseui: Force debug info in critical sections.
itss: Force debug info in critical sections.
mmdevapi: Force debug info in critical sections.
ntdll: Mind context compaction mask in context_from_server().
ntdll: Don’t copy xstate from / to syscall frame in usr1_handler().
ntdll: Support generic xstate config in context manipulation functions.
msvcp: Force debug info in critical sections.
msvcrt: Force debug info in critical sections.
netapi32: Force debug info in critical sections.
rsaenh: Force debug info in critical sections.
wined3d: Force debug info in critical sections.
kernelbase: Use KEY_WOW64_64KEY flag when 64 bit registry access is assumed.
mciavi32: Force debug info in critical sections.
winmm: Force debug info in critical sections.
winebus.sys: Force debug info in critical sections.
windows.security.credentials.ui.userconsentverifier: Force debug info in critical sections.
amstream: Avoid leaking critical section debug info in filter_Release().
amstream: Force debug info in critical sections.
winexinput.sys: Force debug info in critical sections.
comctl32: Force debug info in critical sections.
mcicda: Force debug info in critical sections.
ole32: Force debug info in critical sections.
qcap: Force debug info in critical sections.
ntdll: Respect red zone in usr1_handler() on x64.
quartz: Force debug info in critical sections.
urlmon: Force debug info in critical sections.
winegstreamer: Force debug info in critical sections.
wmiutil: Force debug info in critical sections.
windows.gaming.input: Force debug info in critical sections.
windows.media.speech: Force debug info in critical sections.

Philip Rebohle (1):
winevulkan: Update to VK spec version 1.3.279.

Piotr Caban (1):
wininet: Fix memory leak when loading proxy information.

Rémi Bernon (49):
win32u: Introduce new NtUserSwitchDesktop syscall stub.
server: Keep track of the winstation input desktop.
server: Send hardware input to the visible input desktop.
server: Keep a list of threads connected to each desktop.
server: Keep a list of processes that can receive rawinput messages.
server: Dispatch rawinput messages using the rawinput process list.
winevulkan: Remove unnecessary WINEVULKAN_QUIRK_ADJUST_MAX_IMAGE_COUNT quirk.
winevulkan: Succeed VK_KHR_win32_surface procs queries when enabled.
winex11: Remove now unnecessary vulkan function name mapping.
winemac: Remove now unnecessary vulkan function name mapping.
winewayland: Remove now unnecessary vulkan function name mapping.
winex11: Remove unnecessary X11DRV_get_vk_* helpers.
winemac: Remove unnecessary macdrv_get_vk_* helper.
winex11: Remove unnecessary vkDestroySurfaceKHR NULL checks.
winemac: Remove unnecessary vkDestroySurfaceKHR NULL checks.
winewayland: Remove unnecessary vkDestroySurfaceKHR NULL checks.
mfreadwrite/reader: Split source_reader_create_decoder_for_stream helper.
mf/topology_loader: Only propagate some media type attributes.
mfreadwrite/reader: Call SetOutputType directly on the decoder transform.
mfreadwrite/reader: Keep the stream transforms in a list.
mfreadwrite/reader: Create and append a converter transform.
mfreadwrite/reader: Implement IMFSourceReaderEx_GetTransformForStream.
mfreadwrite/reader: Adjust min_buffer_size to be 1s of audio data.
win32u: Use NtUserCallHwndParam interface for _wine_send_input.
win32u: Use a custom struct hid_input for NtUserSendHardwareInput.
dinput/tests: Test the WM_POINTER* message parameter values.
mouhid.sys: Send WM_POINTER* messages on contact updates.
server: Add support for sending and receiving WM_POINTER* messages.
win32u: Add support for sending and receiving WM_POINTER* messages.
win32u: Use char array for the device manager context gpuid.
win32u: Simplify adapter key path creation from gpu_guid.
win32u: Remove unused wine_devpropkey_monitor_adapternameW property.
win32u: Use REG_SZ instead of REG_BINARY for some adapter keys.
win32u: Remove unnecessary class_guidW double check.
win32u: Use set_reg_ascii_value whenever possible.
win32u: Introduce and use new reg
(open|create)_ascii_key helpers.
winex11: Support XInput2 events on individual windows.
winex11: Select XI_Touch* input and translate it to WM_POINTER*.
server: Stop waiting on LL-hooks for non-injected input.
server: Generate WM_POINTERENTER / WM_POINTERLEAVE messages.
server: Continuously send pointer update messages while it’s down.
server: Send emulated mouse messages on primary pointer updates.
win32u: Keep a reference on the adapters gpu.
win32u: Load gpus from registry before adapters.
win32u: Lookup adapter gpus from their device paths.
win32u: Enumerate devices with a dedicated helper.
win32u: Split read / write of gpu to registry to separate helpers.
win32u: Keep the vulkan GUID on the gpu structure.
server: Remove desktop from their winstation list before looking for another input desktop.

Shaun Ren (2):
sapi: Implement ISpeechVoice::{get/put}_Volume.
sapi: Implement ISpeechVoice::{get/putref}_Voice.

Sven Baars (1):
oleaut32: Use scientific notation if it prevents a loss of accuracy.

Tim Clem (3):
winemac.drv: Exclude the emoji Touch Bar when looking for input methods.
win32u: Don’t mask keyboard scan codes when processing them for IME.
winebus.sys: Only attempt to open joysticks and gamepads in the IOHID backend.

Vijay Kiran Kamuju (7):
taskschd: Implement ITaskService_get_ConnectedUser.
taskschd: Return success from Principal_put_RunLevel.
include: Add IRegistrationTrigger definition.
taskschd: Add IRegistrationTrigger stub implementation.
taskschd: Implement IRegistrationTrigger_putEnabled.
taskschd: Implement IRegistrationTrigger_getEnabled.
taskschd: Implement TaskService_get_ConnectedDomain.

Yuxuan Shui (10):
dmband: Move band.c to dmusic.
dmime: Better MIDI parsing interface.
dmime: Parse MIDI program change events and generate a bandtrack.
dmime: Add a stub chordtrack for MIDI segments.
dmime: Use linked list for tempotrack.
dmime: Implement setting TempoParam for tempotracks.
dmime: Parse MIDI Set Tempo meta events and generate a tempotrack.
dmime/tests: Call the correct QueryInterface function for DirectMusic track.
dmime: Parse note on/off events and generate a seqtrack.
dmime: Handle MIDI control events in MIDI files.

Zebediah Figura (47):
shell32: Also zero-initialize the background menu.
wined3d/atifs: Move TEXTUREFACTOR constant loading to arbfp_apply_draw_state().
wined3d/atifs: Move texture constant loading to arbfp_apply_draw_state().
wined3d/atifs: Move FFP bumpenv constant loading to atifs_apply_draw_state().
wined3d/atifs: Move fragment program compilation from set_tex_op_atifs() to atifs_apply_draw_state().
shell32: Stub CLSID_NewMenu.
shell32: Stub IContextMenu3 on the New menu.
shell32: Stub IObjectWithSite on the New menu.
shell32: Return an initial “New” menu.
wine.inf: Add ShellNew registry entries for Folder.
shell32: Enumerate the ShellNew key for Folder.
shell32: Implement InvokeCommand() for the new menu.
shell32/tests: Add a few more tests for the New menu.
msi/tests: Expand costing tests.
msi: Round costs up to 4096 bytes instead of clamping.
msi: Store component cost in 512-byte units.
msi: Multiply by 512 in dialog_vcl_add_drives().
shell32: Elevate the child process for the “runas” verb.
wine.inf: Set the EnableLUA value to 1.
msi: Create the custom action server as an elevated process.
shell32/tests: Add tests for context menu copy/paste.
shell32: Remove useless and commented out code.
shell32: Move DoPaste() up.
shell32: Add a get_data_format() helper.
shell32: Reimplement pasting from CF_DROP directly.
shell32: Respect the parent PIDL when pasting from CFSTR_SHELLIDLIST.
shell32: Implement Paste in the item menu.
wined3d/nvrc: Move TEXTUREFACTOR constant loading to nvrc_apply_draw_state().
wined3d/nvrc: Move FFP bumpenv constant loading to nvrc_apply_draw_state().
wined3d/nvrc: Move color ops from nvrc_colorop() to nvrc_apply_draw_state().
wined3d/nvrc: Remove now redundant STATE_SAMPLER handlers.
wined3d/nvrc: Move alpha op application to nvrc_apply_draw_state().
wined3d/nvrc: Remove now redundant WINED3D_TSS_RESULT_ARG handlers.
mciwave: Abort the playback thread regardless of state when stopping.
shell32/tests: Add more tests for IDataObject.
shell32: Do not interpret the direction in IDataObject::EnumFormatEtc().
shell32: Reimplement the data object to store a generic array of HGLOBALs.
shell32: Implement IDataObject::SetData().
shell32: Reimplement pasting from a CIDA without ISFHelper.
shell32: Remove the no longer used ISFHelper::CopyItems() helper.
shell32: Set the drop effect from the context menu.
shell32: Respect the drop effect in do_paste().
shell32: Fix a test failure in test_DataObject().
winetest: Elevate test processes on Wine.
ntdll: Implement NtSetInformationProcess(ProcessAccessToken).
ntdll: Elevate processes if requested in the manifest.
server: Create processes using a limited administrator token by default.

Zhiyi Zhang (7):
Revert “winex11.drv: Handle X error from vkGetRandROutputDisplayEXT().”
rtworkq: Avoid closing a thread pool object while its callbacks are running.
rtworkq: Avoid possible scenarios that an async callback could be called twice.
advapi32: Check NULL return key pointers when creating registry keys.
advapi32/tests: Test creating registry keys with a NULL return key pointer.
user32/tests: Add some ReleaseCapture() tests.
win32u: Only send mouse input in ReleaseCapture() when a window is captured.

Ziqing Hui (2):
mf/tests: Test AvgTimePerFrame for WMV decoder DMO.
winegstreamer: Set AvgTimePerFrame in GetOutputType() for WMV decoder.