Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
2440 commits
Select commit Hold shift + click to select a range
3ffeb52
setupapi: Don't open reg keys with zero access mask.
Dec 6, 2024
b6394e3
server: Check for zero access in alloc_handle().
Jul 10, 2024
4cb13d3
setupapi: Use wide character string literals.
alexhenrie Jan 28, 2025
a8d7fa1
setupapi/tests: Test disk space list APIs.
Feb 24, 2025
5508fa2
setupapi: Get rid of the DISKSPACELIST typedef.
Feb 24, 2025
dc772d0
setupapi: Implement SetupAddToDiskSpaceList().
Feb 24, 2025
6c5675d
setupapi: Correctly implement SetupQuerySpaceRequiredOnDrive().
Feb 24, 2025
ad37b14
setupapi: Initialize the files member in SetupDuplicateDiskSpaceListW…
bernhardu Mar 5, 2025
10cf170
setupapi/tests: Fix message of ok statement.
bernhardu Mar 5, 2025
e79ee91
setupapi: Don't add backslash on empty folder.
Mar 29, 2025
faecd4d
Revert "setupapi: Implement SetupDiOpenDeviceInterface(A|W)."
Conmanx360 Jul 17, 2025
4b8bf77
setupapi: Implement SetupDiOpenDeviceInterface(A|W).
rbernon Oct 21, 2024
0aea386
setupapi/tests: Add a test for SetupDiOpenDeviceInterface().
Apr 2, 2025
6a7b76c
setupapi/tests: Add broken to test_SetupDiOpenDeviceInterface.
bernhardu Apr 14, 2025
f01cb57
setupapi/tests: Add display enum tests.
besentv May 12, 2025
1aa8a3c
setupapi/tests: Add tests for SetupDi{Set,Get}DeviceInterfacePropertyW.
vibhavp Jun 18, 2025
b1b3b77
setupapi: Implement SetupDiSetDeviceInterfacePropertyW.
vibhavp Jun 19, 2025
6e5c005
setupapi: Implement SetupDiGetDeviceInterfacePropertyW.
vibhavp Jun 19, 2025
d56a9ef
setupapi/tests: Add tests for SetupDiGetDeviceInterfacePropertyKeys.
vibhavp Jun 20, 2025
dcbc513
setupapi: Implement SetupDiGetDeviceInterfacePropertyKeys.
vibhavp Jun 20, 2025
bd075ca
setupapi: Implement additional built-in properties in SetupDiGetDevic…
vibhavp Jun 22, 2025
628be35
setupapi/tests: Add additional tests for device instance properties D…
vibhavp Jun 23, 2025
b90bdda
setupapi: Return built-in property keys for device interfaces even wh…
vibhavp Jun 26, 2025
2dbeeb9
setupapi/tests: Don't test an uninitialized value.
julliard Jul 10, 2025
fc7d36c
setupapi/tests: Add tests for built-in device properties.
vibhavp Jul 7, 2025
0db9a24
ntoskrnl.exe/tests: Add tests for built-in properties for PnP device …
vibhavp Jul 7, 2025
0fd8df1
setupapi: Support built-in properties in SetupDiGetDevicePropertyW an…
vibhavp Jul 7, 2025
490e23f
ntoskrnl/tests: Add tests for getting IRP_MN_QUERY_DEVICE_TEXT based …
Conmanx360 Aug 15, 2025
265d4cc
ntoskrnl: Set DEVPKEY_Device_BusReportedDeviceDesc from driver.
Conmanx360 Aug 15, 2025
ccf59a5
winebus: Handle IRP_MN_QUERY_DEVICE_TEXT.
Conmanx360 Aug 13, 2025
bd66837
hidclass: Print a warning for unhandled IRP_MN_QUERY_DEVICE_TEXT text…
Conmanx360 Aug 21, 2025
f9ee915
wineusb.sys: Print a warning for unhandled IRP_MN_QUERY_DEVICE_TEXT t…
Conmanx360 Aug 21, 2025
bb99b51
winebus: Generate unique serial numbers when adding devices.
rbernon Jan 7, 2025
f5cf016
winebus: Generate unique container IDs when adding devices.
Conmanx360 Aug 13, 2025
88a1629
winebus: Override device instance enumerator string if bus type is kn…
Conmanx360 Aug 14, 2025
b8a4b3a
setupapi: Use HID device instance ID when checking winebus devices fo…
Conmanx360 Jul 18, 2025
3203103
setupapi: Remove devices without any present interfaces from the devi…
Conmanx360 Jul 18, 2025
e1e6435
winebus.sys: Create bus specific container IDs for udev based USB HID…
Conmanx360 Oct 9, 2025
750ba0a
mmdevapi/tests: Add property store tests for more variant types.
Conmanx360 Jul 31, 2025
f343972
mmdevapi: Add support for storing VT_BOOL properties.
Conmanx360 Aug 4, 2025
d9fe946
mmdevapi: Add support for storing VT_CLSID properties.
Conmanx360 Aug 4, 2025
8bbc0e0
winepulse.drv: Create container ID from udev if possible.
Conmanx360 Aug 4, 2025
930b0df
kernelbase: Add synchronization barrier stubs.
Oct 23, 2025
21a03e6
ntdll: Add synchronization barrier stubs.
Oct 22, 2025
7854050
ntdll: Implement synchronization barrier functions.
Oct 23, 2025
2d7760b
kernelbase: Implement synchronization barrier functions.
Oct 23, 2025
11c9e1c
xaudio2: Free effect chain on error return.
Oct 24, 2025
f305f4f
xaudio2_8: Add XAudio2CreateWithVersionInfo().
Oct 24, 2025
7af8656
xaudio2_8: Don't crash on invalid XAPO interface.
Oct 24, 2025
7a48c82
ntdll: HACK: Add PROTON_LIMIT_ADDRESS_SPACE environment variable.
Oct 25, 2025
e957ded
tdh: Add semi-stub for TdhEnumerateProviders().
Oct 27, 2025
b9c4cc7
winegstreamer: Return NS_E_NO_MORE_SAMPLES from WMSyncReader if sampl…
Oct 22, 2025
82705b4
HACK: winegstreamer: Add media formats hacks for Okayunyumu.
ziqingh Oct 17, 2025
a19049c
fixup! HACK: winebus.sys: Fall back to non-hidraw devices.
ivyl Oct 20, 2025
b32b9f7
ntdll: Keep more LFH block groups alive.
rbernon Oct 23, 2025
f8ec015
FAudio: Set default 7.1 channel mask to SDL3 and Windows defaults.
ivyl Oct 30, 2025
e1020af
fixup! ntdll: Implement a new NtQueryInformationProcess ProcessWineUn…
ivyl Oct 31, 2025
df4ddd4
Revert "server: Check for zero access in alloc_handle()."
Conmanx360 Oct 31, 2025
71140e0
apisetschema: Add some new apisets, and old ones for recently added d…
julliard Feb 25, 2025
b677d8b
ntdll: Set output frame to Rsp - 8 in epilogue on x64.
Oct 31, 2025
4cb174f
ntdll/tests: Test unwind with popping frame reg before another one on…
Oct 31, 2025
98f1a77
ntdll: Fix handling jmp in epilogue unwind on x64.
Oct 31, 2025
3e468ba
ntdll: Handle 0xff jump opcode in epilogue unwind on x64.
Nov 3, 2025
55529d2
ntdll: Fill IOSB in NtUnlockFile().
Nov 4, 2025
808bf3f
wine.inf: Substitute Times New Roman for Segoe UI Semibold.
Nov 5, 2025
a3817e3
ntdll: Implement NtAlertMultipleThreadByThreadId().
Oct 24, 2025
19f6ef0
ntdll: Use NtAlertMultipleThreadByThreadId() in RtlWakeAddressAll().
Oct 24, 2025
4ab2dde
include: Add APP_LOCAL_DEVICE_ID definition.
rbernon Jun 18, 2025
99d4a6a
include: Add gameinput.idl.
rbernon Dec 13, 2024
94148a8
gameinput: Introduce new DLL.
rbernon Dec 13, 2024
7d8947a
opengl32: HACK: Fixup shaders for Stellar Reach.
Nov 5, 2025
8e15e43
pdh: Add stub for PdhEnumObjects{A,W}.
PietJankbal May 25, 2025
c6e1c35
pdh: Add stub for PdhGetRawCounterArrayW{A,W}.
PietJankbal May 28, 2025
c01a7bc
Revert "ntdll: Handle 0xff jump opcode in epilogue unwind on x64."
Nov 6, 2025
2e73817
Revert "ntdll: Fix handling jmp in epilogue unwind on x64."
Nov 6, 2025
7f82d7a
Revert "ntdll/tests: Test unwind with popping frame reg before anothe…
Nov 6, 2025
bfec7d2
Revert "ntdll: Set output frame to Rsp - 8 in epilogue on x64."
Nov 6, 2025
20da5e1
ntdll: Set output frame to Rsp - 8 in epilogue on x64.
Oct 31, 2025
fe42819
ntdll/tests: Test unwind with popping frame reg before another one on…
Oct 31, 2025
4e7b2a1
ntdll: Fix handling jmp in epilogue unwind on x64.
Oct 31, 2025
c597192
ntdll: Handle 0xff jump opcode in epilogue unwind on x64.
Nov 3, 2025
0d870c3
ntdll: Don't detect epilogue in chained unwind function on x64.
Nov 6, 2025
77e5410
fixup! msvcrt: HACK: Introduce asm wrapper for _isatty on x64.
Nov 6, 2025
40fa26f
ntdll: Check for related functions in is_inside_epilog() when detecti…
Nov 7, 2025
f81de2e
Reapply "winex11.drv: Interpret mouse 6/7 as horiz scroll."
ivyl Nov 10, 2025
3170ead
ntdll: Map Windows syscall numbers for Marvel Rivals.
Nov 10, 2025
9022525
win32u: Fill some GPU info in HKLM\Software\Microsoft\DirectX.
Nov 12, 2025
43b3ad8
vkd3d: Import upstream release 1.15.
julliard Feb 20, 2025
2f59e9a
vkd3d: Update version number.
julliard Feb 21, 2025
9e22efd
vkd3d: Import upstream release 1.16.
julliard May 21, 2025
dd87242
include: Fix ARM64EC acq/rel barrier to match ARM64.
iamahuman May 6, 2025
588ed6c
ntdll: Fix syscall_cfa offset in user_mode_abort_thread for ARM64.
iamahuman Feb 5, 2025
42214e1
wow64: Skip memcpy for null pointer.
vitlav Mar 21, 2025
444f260
kerberos: Fix the wow64 thunk for unseal_message().
Jun 4, 2025
160af18
netapi32: Fix WOW64 server_getinfo thunk.
PiotrCW May 2, 2025
072e4db
netapi32: Fix WOW64 share_add thunk.
PiotrCW May 2, 2025
73e41cf
netapi32: Fix WOW64 wksta_getinfo thunk.
PiotrCW May 2, 2025
8c036c2
ntdll: Correctly report execute faults on ARM64.
julliard Jun 26, 2025
2aea772
ntdll: Correctly report execute faults on ARM.
julliard Jun 26, 2025
808ef53
ntdll: Avoid excessive committed range scan in NtProtectVirtualMemory().
May 26, 2025
671e932
wdscore: Don't export C++ symbols.
cjacek Feb 3, 2025
df20c24
ntdll: Detect kernel support before using ARM64 ID regs.
bylaws Jan 7, 2025
d71b25d
ntdll: Check arm64ec TEB frames are valid before popping them.
bylaws Mar 27, 2025
0ba72b3
ntdll/tests: Add THREAD_CREATE_FLAGS_BYPASS_PROCESS_FREEZE test.
bylaws Aug 11, 2025
eb257d2
ntdll: Support THREAD_CREATE_FLAGS_BYPASS_PROCESS_FREEZE flag.
bylaws Aug 11, 2025
d3ecdc1
winternl: Add additional thread create flags.
bylaws Aug 12, 2025
1484476
HACK: Use x86 mono on aarch64.
bylaws Apr 19, 2024
843681d
include: Add arm64 SVE xstate headers.
bylaws Aug 19, 2024
6f30f79
FEX specific AVX support for arm64ec
bylaws Aug 21, 2024
fb77321
ntdll: Setup the FEX SVE predicate reg after handling signals.
bylaws Aug 21, 2024
f538c3c
makedep: Install ARM64EC-only DLLs to the aarch64 PE dir.
bylaws Aug 20, 2024
88bd3ef
wine.inf: Add proton registry overrides for arm64 installs.
bylaws Sep 2, 2024
7c6ddda
Use FEX wow64/ARM64EC dll names
bylaws Apr 17, 2024
ab2f642
services: Pass through FEX config environment variables.
bylaws Jul 28, 2025
06d06a5
ntdll: Add an interface to map the FEX stats shm.
bylaws Jan 23, 2025
e8aee86
winevulkan: Make the unix creation callback pointers always 64-bit.
bylaws Sep 2, 2024
c54a2c5
ntdll: Support THREAD_CREATE_FLAGS_SKIP_THREAD_ATTACH flag.
bylaws Aug 11, 2025
bc75560
ntdll: Support THREAD_CREATE_FLAGS_SKIP_LOADER_INIT flag.
bylaws Aug 11, 2025
5726e5f
configure: Enable vcruntime140_1 and dpnsvcr for arm64x builds.
bylaws Apr 23, 2024
9c9746b
ntdll: Add a default pBaseThreadInitThunk implementation.
bylaws Aug 11, 2025
eceefff
ntdll: Implement WOW64 thread suspension helpers.
bylaws Jul 27, 2023
0d76af7
wow64: Support running a BT module provided suspend routine.
bylaws Jul 27, 2023
4c70c04
HACK: ntdll: Manually define exit thunks for mem{cpy/move/set}
cjacek Jul 10, 2025
49d2b4a
ntdll: Load x86_64 builtin DLLs from the aarch64 PE dir.
bylaws Aug 20, 2024
853e7ef
HACK: Avoid delay importing rpcrt4
bylaws Jul 15, 2025
d30d78e
HACK: wineboot: Always apply FEX's scaling to the reported ARM64 TSC
bylaws Jul 18, 2025
ffd3152
wow64: Write NtProtectVirtualMemory old_prot from within the thunk.
bylaws Jul 22, 2025
82c01fe
ntdll: Add FEX specific Asahi TSO support
bylaws Jul 10, 2025
8354f0f
ntdll: Implement FEX-specific kernel-side unaligned atomic handling.
bylaws Aug 6, 2025
07723ff
WIP: ntdll: ARM64EC suspend support
bylaws Aug 7, 2025
d9cd17e
ntdll: Support cross-process wow64 suspend on ARM64.
bylaws Aug 11, 2025
35c8092
server: Ensure allocated space for mappings is in accessible memory.
bylaws Apr 12, 2024
9e28ae4
Revert "kernelbase: HACK Force Angle Vulkan instead of GL for EpicOnl…
Nov 12, 2025
ee080c5
Revert "kernelbase: HACK: Force CEF swiftshader for EpicOnlineService…
Nov 12, 2025
b183f91
fixup! winex11.drv: Ignore fullscreen window config changes.
zzhiyi Oct 29, 2025
5d67e25
fixup! fixup! winex11.drv: Ignore fullscreen window config changes.
zzhiyi Nov 14, 2025
b10aaab
ntoskrnl.exe: Open thread with MAXIMUM_ALLOWED access in KeGetCurrent…
Nov 17, 2025
041d314
server: esync, fsync: Create server events as esync / fsync.
Nov 17, 2025
37b71dd
ntdll: HACK: Avoid unitialized Dr0-Dr3 in RtlRaiseException on x64.
Nov 17, 2025
2592799
ntdll: Map Windows syscall numbers for Skull & Bones.
Nov 18, 2025
eb8b85a
qasf: Implement seeking for asf reader.
ziqingh Sep 24, 2025
cba7056
qasf: Add asf_reader_stop_stream helper.
ziqingh Oct 10, 2025
20a1839
qasf: Add asf_reader_start_stream helper.
ziqingh Oct 10, 2025
5b17bcb
dwrite/fallback: Add the Bamum Supplement range to the fallback data.
nsivov Nov 14, 2025
c023eef
dwrite/fallback: Add the Cyrillic range to the fallback data.
besentv Nov 14, 2025
0a1d0d2
drwite/fallback: Add the Supplemental Arrows-C range to the fallback …
besentv Nov 14, 2025
ee8a289
win32u: Explicitly check for font family bits.
besentv Nov 20, 2025
68a334c
ntdll: Map Windows syscall numbers for Far Cry 4.
Nov 20, 2025
b314de0
ntdll: Add some specifics for NtQueryInformationProcess( ProcessDebug…
Apr 15, 2025
f5595d0
kernelbase: Add stub for GetIntegratedDisplaySize().
Nov 21, 2025
1925fb6
quartz/dsoundrender: Get rid of DSoundRenderer_Max_Fill buffer data q…
Nov 12, 2025
821d6ce
quartz/test: Check for EC_COMPLETE more often in test_eos().
Nov 12, 2025
152c8c5
quartz/dsoundrender: Send all queued samples to dsound before issuing…
Nov 12, 2025
b2d8cca
quartz/dsoundrender: Do not send EC_COMPLETE while flushing.
Nov 12, 2025
8e90faa
Revert "ntdll: Use NtAlertMultipleThreadByThreadId() in RtlWakeAddres…
Nov 22, 2025
4eece26
Revert "ntdll: Implement NtAlertMultipleThreadByThreadId()."
Nov 22, 2025
d826f3a
wow64win: Change parameter types from LONG to ULONG in wow64_NtUserMe…
jin-king1 Mar 4, 2025
eda95ff
ntdll: Allow mem{cpy,move} optimisation now -fno-builtins is used.
bylaws Feb 7, 2025
692c1b2
ntdll: Rename waiting_thread_count to structure_lock_count in barrier…
Nov 22, 2025
dd06445
ntdll/tests: Add tests for iterative barrier usage.
Nov 22, 2025
4595526
ntdll: Support iterative barrier usage without re-initialization.
Nov 22, 2025
b3d835f
msvfw32: HACK: Don't pass down errors when setting MCI hwnd.
besentv Nov 25, 2025
0510871
win32u: Initialize surface with white colour on creation.
Nov 19, 2025
77f4381
kernelbase: Use ProcessImageFileNameWin32 in GetModuleFileNameExW.
cjacek Mar 15, 2025
fed6b4f
kernelbase: Set last error in GetModuleFileNameExW().
Nov 26, 2025
48610be
iphlpapi: Implement GetOwnerModuleFromTcpEntry().
Nov 26, 2025
8c7e6d0
iphlpapi: Implement GetOwnerModuleFromTcp6Entry().
Nov 26, 2025
d6ae55a
kernelbase: Factor out get_process_image_file_name.
cjacek Mar 15, 2025
defa428
win32u: Disable undecorated windows hack for Mystery Manor: Hidden Ob…
Nov 26, 2025
f20ca49
win32u: HACK: Workaround window ordering on Gamescope for Crystal of …
Nov 27, 2025
caadfe1
msvfw32/tests: Add tests for MCI window styles.
Nov 27, 2025
dffa982
msvfw32: Add WS_CHILD attribute for window if parent is specified.
Nov 27, 2025
d9fdef1
msvfw32: Set correct styles for popup and child windows.
Nov 27, 2025
2ebe604
msvfw32: Set child window id for MCI child window.
Nov 27, 2025
5df9b74
widl: Keep track of statements source locations.
rbernon Aug 25, 2025
6a7f27e
widl: Allow explicit registration by referencing runtimeclasses.
rbernon Aug 25, 2025
50e19fc
windows.perception.stub: Register runtimeclasses explicitly.
rbernon Aug 25, 2025
b2aa7ba
include: Define IHolographicCamera and related types.
Sep 2, 2025
9d833e8
windows.perception.stub/tests: Add IHolographicSpaceInterop::CreateFo…
mohamadaljaf Feb 16, 2025
a2b5f54
Revert "windows.perception.stub: HACK: Set WS_EX_NOACTIVATE for windo…
Nov 27, 2025
215f736
windows.perception.stub: Implement IHolographicSpaceInterop::CreateFo…
mohamadaljaf Nov 1, 2025
69a69c9
windows.perception.stub: HACK: Set WS_EX_NOACTIVATE for window in hol…
Mar 25, 2024
b70f531
windows.perception.stub/tests: Add IHolographicSpace::get_PrimaryAdap…
mohamadaljaf Nov 3, 2025
0d24a1c
windows.perception.stub: Implement IHolographicSpace_get_PrimaryAdapt…
mohamadaljaf Nov 3, 2025
81703e5
windows.perception.stub: Stub some functions.
mohamadaljaf Nov 3, 2025
d4fdaea
include: Add defintions related to Windows.Perception.Spatial.Spatial…
Nov 28, 2025
44103ad
windows.perception.stub: Stub SpatialAnchorExporter class.
Nov 28, 2025
226a51c
windows.perception.stub: Return semi-stub async from exporter_statics…
Nov 28, 2025
e5458b6
windows.perception.stub: Support IAsyncInfo in async access status.
Nov 28, 2025
8c621ba
wine.inf: Mark .NET and some XNA redists as already installed.
bylaws May 6, 2024
b372d5f
win32u: Don't alter memory beyond structure effective size in NtUserE…
Dec 4, 2025
b3c7b62
Revert "dwrite/fallback: Add the Cyrillic range to the fallback data."
besentv Dec 5, 2025
8042d43
Revert "drwite/fallback: Add the Supplemental Arrows-C range to the f…
besentv Dec 5, 2025
ab6d0cb
dwrite: Add the Cyrillic range to the fallback data.
besentv Nov 14, 2025
b9cbaf7
dwrite: Add the Supplemental Arrows-C range to the fallback data.
besentv Nov 14, 2025
fb395e6
dwrite: Add an alternative name for the Noto Sans Symbols font.
nsivov Nov 21, 2025
a0ffa89
Revert "msvfw32: HACK: Don't pass down errors when setting MCI hwnd."
besentv Dec 5, 2025
254cc08
msvfw32: Check if driver has a window before setting destination DGV …
besentv Dec 5, 2025
1743b73
mscoree: HACK: Search for Wine Mono without version first.
madewokherd Dec 6, 2025
dcbef01
mscoree: Update Wine Mono to 10.4.0.
madewokherd Dec 1, 2025
a582823
mscoree: HACK: Accept outdated support msi outside prefix.
madewokherd Dec 6, 2025
3c600a0
mfplat/tests: Add test for MF_XVP_PLAYBACK_MODE.
LizzyFleckenstein03 Apr 11, 2025
a554f14
winegstreamer: Allow caller to allocate samples in MF_XVP_PLAYBACK_MODE.
LizzyFleckenstein03 Apr 11, 2025
2fe145a
mfplat/tests: Don't assume video processor MFT can provide samples.
LizzyFleckenstein03 Apr 16, 2025
4260cd7
mf/tests: Rename test_source to test_stub_source.
LizzyFleckenstein03 Jun 20, 2025
1ce1e74
mf/tests: Rename test_seek_source to test_source.
LizzyFleckenstein03 Jun 20, 2025
a236218
mf/tests: Move some functions.
LizzyFleckenstein03 Jun 20, 2025
91518cd
mf/tests: Add tests for thinning.
LizzyFleckenstein03 Jun 20, 2025
21c57e1
mf: Don't forward thinning to clock.
LizzyFleckenstein03 Jun 20, 2025
b8ca2f8
mf: Handle thinning in media session.
LizzyFleckenstein03 Jun 20, 2025
2e03721
Revert "winedmo: Use the stream context to cache stream chunks."
LizzyFleckenstein03 Dec 8, 2025
faeee15
winedmo: Use the stream context to cache stream chunks.
rbernon Oct 25, 2024
ed70448
mfsrcsnk/tests: Add tests for thinning.
LizzyFleckenstein03 Jul 2, 2025
baca17c
winedmo: Fall back to dts for sample time if pts is not present.
LizzyFleckenstein03 Nov 12, 2025
650e97d
mfsrcsnk: Introduce a DEFINE_MF_ASYNC_PARAMS macro.
rbernon Dec 5, 2025
fc5f636
mfsrcsnk: Process SetRate asynchronously.
LizzyFleckenstein03 Nov 30, 2025
af073dc
mfsrcsnk: Factor out a media_source_request_stream_sample helper.
rbernon Dec 5, 2025
433d5d2
mfsrcsnk: Peek for stream token presence without removing it.
rbernon Dec 5, 2025
f8f8cf4
mfsrcsnk: Implement thinning.
LizzyFleckenstein03 May 14, 2025
27d107b
HACK: mf: Allow rate=0 for JR East Train Simulator.
LizzyFleckenstein03 Jun 9, 2025
279c7d0
kernel32: Don't use export forwarding for RtlLookupFunctionEntry.
Dec 5, 2025
ebf6af3
ntdll: Fix LdrLoadDll() parameters.
Dec 5, 2025
967e62c
ntdll: Stop walk in RtlWalkFrameChain() if there is no function entry.
Dec 5, 2025
003df1e
ntdll: Make VEH registration structure compatible.
Dec 5, 2025
6445cfd
ntdll: Generate process cookie and return it from NtQueryInformationP…
Dec 9, 2025
63714d3
ntdll: Reimplement RtlEncodePointer / RtlDecodePointer using process …
Dec 5, 2025
780b38f
gdi32: HACK: Force using Microsoft Sans Serif for Thai.
ziqingh Nov 19, 2025
edcf00c
mf: Prevent the session from starting invalid topologies.
besentv Dec 9, 2025
f15b760
winex11.drv: Update the gl_drawable of the top-level window when the …
zzhiyi Nov 13, 2025
418eb91
kernel32/tests: Disable heap tests which are now crashing on Windows.
Dec 10, 2025
def4b96
kernel32/tests: Add more tests for heap total and commit sizes.
Dec 10, 2025
c5f2587
ntdll: Align commit size in RtlCreateHeap().
Dec 10, 2025
f090ac3
ntdll: Compute total size as aligned commit size in RtlCreateHeap().
Dec 10, 2025
4786ba9
HACK: winedmo: Assume that AV1 decoder is available.
rbernon Dec 11, 2025
1d6691c
winedmo: Always use upper case AV1 fourcc in media types.
rbernon Dec 11, 2025
bae282a
mf: Change SESSION_FLAG_RESTARTING to 0x40.
LizzyFleckenstein03 Dec 10, 2025
2993a15
mf: Fix crash when stream is null during sample request.
Dec 9, 2025
9866d0f
winedmo: Explicily set HEVC mf GUID.
besentv Dec 11, 2025
8aea1a4
fixup! fsync: Add WINE_FSYNC_YIELD_TO_WAITERS option.
Dec 12, 2025
21adfc2
ntdll: HACK: Enable WINE_FSYNC_YIELD_TO_WAITERS for From Dust.
Dec 12, 2025
9a26b8c
wbemprox: Add Win32_SystemEnclosure.SerialNumber.
Dec 12, 2025
c83c4b7
wbemprox: Mark Win32_SystemEnclosure.Tag as key column.
Dec 12, 2025
7c04244
ntdll: HACK: Enable WINE_SIMULATE_WRITECOPY for DCS World.
Dec 12, 2025
2b6975d
HACK: winedmo: Ignore missing PNG decoders.
rbernon Dec 12, 2025
08868a2
mfsrcsnk: Check and set current stream position before reading.
rbernon Dec 12, 2025
87e9a9a
mfplat: HACK: Enable the 2d buffer lock optimisation for Darksiders W…
Dec 12, 2025
f4d8697
winegstreamer: HACK: Implement video right edge replication for Disin…
Dec 18, 2025
3cd5fd2
kernelbase: Workaround a call with misaligned stack in OpenMutexW().
Dec 20, 2025
a21b86f
mscoree: Update Wine Mono to 10.4.1.
madewokherd Dec 23, 2025
3477f8e
sharedgpures.sys: Request less permissions to duplicate handles
xzn Jan 6, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
1 change: 1 addition & 0 deletions MAINTAINERS
Original file line number Diff line number Diff line change
Expand Up @@ -203,6 +203,7 @@ F: dlls/jscript/
Joystick input
M: Rémi Bernon <[email protected]>
F: dlls/dinput*/
F: dlls/gameinput/
F: dlls/joy.cpl/
F: dlls/windows.gaming.input/
F: dlls/winebus.sys/
Expand Down
196 changes: 196 additions & 0 deletions README.esync
Original file line number Diff line number Diff line change
@@ -0,0 +1,196 @@
This is eventfd-based synchronization, or 'esync' for short. Turn it on with
WINEESYNC=1; debug it with +esync.

== BUGS AND LIMITATIONS ==

Please let me know if you find any bugs. If you can, also attach a log with
+seh,+pid,+esync,+server,+timestamp.

If you get something like "eventfd: Too many open files" and then things start
crashing, you've probably run out of file descriptors. esync creates one
eventfd descriptor for each synchronization object, and some games may use a
large number of these. Linux by default limits a process to 4096 file
descriptors, which probably was reasonable back in the nineties but isn't
really anymore. (Fortunately Debian and derivatives [Ubuntu, Mint] already
have a reasonable limit.) To raise the limit you'll want to edit
/etc/security/limits.conf and add a line like

* hard nofile 1048576

then restart your session.

On distributions using systemd, the settings in `/etc/security/limits.conf`
will be overridden by systemd's own settings. If you run `ulimit -Hn` and it
returns a lower number than the one you've previously set, then you can set

DefaultLimitNOFILE=1024:1048576

in both `/etc/systemd/system.conf` and `/etc/systemd/user.conf`. You can then
execute `sudo systemctl daemon-reexec` and restart your session. Check again
with `ulimit -Hn` that the limit is correct.

Also note that if the wineserver has esync active, all clients also must, and
vice versa. Otherwise things will probably crash quite badly.

== EXPLANATION ==

The aim is to execute all synchronization operations in "user-space", that is,
without going through wineserver. We do this using Linux's eventfd
facility. The main impetus to using eventfd is so that we can poll multiple
objects at once; in particular we can't do this with futexes, or pthread
semaphores, or the like. The only way I know of to wait on any of multiple
objects is to use select/poll/epoll to wait on multiple fds, and eventfd gives
us those fds in a quite usable way.

Whenever a semaphore, event, or mutex is created, we have the server, instead
of creating a traditional server-side event/semaphore/mutex, instead create an
'esync' primitive. These live in esync.c and are very slim objects; in fact,
they don't even know what type of primitive they are. The server is involved
at all because we still need a way of creating named objects, passing handles
to another process, etc.

The server creates an eventfd file descriptor with the requested parameters
and passes it back to ntdll. ntdll creates an object of the appropriate type,
then caches it in a table. This table is copied almost wholesale from the fd
cache code in server.c.

Specific operations follow quite straightforwardly from eventfd:

* To release an object, or set an event, we simply write() to it.
* An object is signalled if read() succeeds on it. Notably, we create all
eventfd descriptors with O_NONBLOCK, so that we can atomically check if an
object is signalled and grab it if it is. This also lets us reset events.
* For objects whose state should not be reset upon waiting—e.g. manual-reset
events—we simply check for the POLLIN flag instead of reading.
* Semaphores are handled by the EFD_SEMAPHORE flag. This matches up quite well
(although with some difficulties; see below).
* Mutexes store their owner thread locally. This isn't reliable information if
a different process's thread owns the mutex, but this doesn't matter—a
thread should only care whether it owns the mutex, so it knows whether to
try waiting on it or simply to increase the recursion count.

The interesting part about esync is that (almost) all waits happen in ntdll,
including those on server-bound objects. The idea here is that on the server
side, for any waitable object, we create an eventfd file descriptor (not an
esync primitive), and then pass it to ntdll if the program tries to wait on
it. These are cached too, so only the first wait will require a round trip to
the server. Then the server signals the file descriptor as appropriate, and
thereby wakes up the client. So far this is implemented for processes,
threads, message queues (difficult; see below), and device managers (necessary
for drivers to work). All of these are necessarily server-bound, so we
wouldn't really gain anything by signalling on the client side instead. Of
course, except possibly for message queues, it's not likely that any program
(cutting-edge D3D game or not) is going to be causing a great wineserver load
by waiting on any of these objects; the motivation was rather to provide a way
to wait on ntdll-bound and server-bound objects at the same time.

Some cases are still passed to the server, and there's probably no reason not
to keep them that way. Those that I noticed while testing include: async
objects, which are internal to the file APIs and never exposed to userspace,
startup_info objects, which are internal to the loader and signalled when a
process starts, and keyed events, which are exposed through an ntdll API
(although not through kernel32) but can't be mixed with other objects (you
have to use NtWaitForKeyedEvent()). Other cases include: named pipes, debug
events, sockets, and timers. It's unlikely we'll want to optimize debug events
or sockets (or any of the other, rather rare, objects), but it is possible
we'll want to optimize named pipes or timers.

There were two sort of complications when working out the above. The first one
was events. The trouble is that (1) the server actually creates some events by
itself and (2) the server sometimes manipulates events passed by the
client. Resolving the first case was easy enough, and merely entailed creating
eventfd descriptors for the events the same way as for processes and threads
(note that we don't really lose anything this way; the events include
"LowMemoryCondition" and the event that signals system processes to shut
down). For the second case I basically had to hook the server-side event
functions to redirect to esync versions if the event was actually an esync
primitive.

The second complication was message queues. The difficulty here is that X11
signals events by writing into a pipe (at least I think it's a pipe?), and so
as a result wineserver has to poll on that descriptor. In theory we could just
let wineserver do so and then signal us as appropriate, except that wineserver
only polls on the pipe when the thread is waiting for events (otherwise we'd
get e.g. keyboard input while the thread is doing something else, and spin
forever trying to wake up a thread that doesn't care). The obvious solution is
just to poll on that fd ourselves, and that's what I did—it's just that
getting the fd from wineserver was kind of ugly, and the code for waiting was
also kind of ugly basically because we have to wait on both X11's fd and the
"normal" process/thread-style wineserver fd that we use to signal sent
messages. The upshot about the whole thing was that races are basically
impossible, since a thread can only wait on its own queue.

System APCs already work, since the server will forcibly suspend a thread if
it's not already waiting, and so we just need to check for EINTR from
poll(). User APCs and alertable waits are implemented in a similar style to
message queues (well, sort of): whenever someone executes an alertable wait,
we add an additional eventfd to the list, which the server signals when an APC
arrives. If that eventfd gets signaled, we hand it off to the server to take
care of, and return STATUS_USER_APC.

Originally I kept the volatile state of semaphores and mutexes inside a
variable local to the handle, with the knowledge that this would break if
someone tried to open the handle elsewhere or duplicate it. It did, and so now
this state is stored inside shared memory. This is of the POSIX variety, is
allocated by the server (but never mapped there) and lives under the path
"/wine-esync".

There are a couple things that this infrastructure can't handle, although
surprisingly there aren't that many. In particular:
* Implementing wait-all, i.e. WaitForMultipleObjects(..., TRUE, ...), is not
exactly possible the way we'd like it to be possible. In theory that
function should wait until it knows all objects are available, then grab
them all at once atomically. The server (like the kernel) can do this
because the server is single-threaded and can't race with itself. We can't
do this in ntdll, though. The approach I've taken I've laid out in great
detail in the relevant patch, but for a quick summary we poll on each object
until it's signaled (but don't grab it), check them all again, and if
they're all signaled we try to grab them all at once in a tight loop, and if
we fail on any of them we reset the count on whatever we shouldn't have
consumed. Such a blip would necessarily be very quick.
* The whole patchset only works on Linux, where eventfd is available. However,
it should be possible to make it work on a Mac, since eventfd is just a
quicker, easier way to use pipes (i.e. instead of writing 1 to the fd you'd
write 1 byte; instead of reading a 64-bit value from the fd you'd read as
many bytes as you can carry, which is admittedly less than 2**64 but
can probably be something reasonable.) It's also possible, although I
haven't yet looked, to use some different kind of synchronization
primitives, but pipes would be easiest to tack onto this framework.
* PulseEvent() can't work the way it's supposed to work. Fortunately it's rare
and deprecated. It's also explicitly mentioned on MSDN that a thread can
miss the notification for a kernel APC, so in a sense we're not necessarily
doing anything wrong.

There are some things that are perfectly implementable but that I just haven't
done yet:
* Other synchronizable server primitives. It's unlikely we'll need any of
these, except perhaps named pipes (which would honestly be rather difficult)
and (maybe) timers.
* Access masks. We'd need to store these inside ntdll, and validate them when
someone tries to execute esync operations.

This patchset was inspired by Daniel Santos' "hybrid synchronization"
patchset. My idea was to create a framework whereby even contended waits could
be executed in userspace, eliminating a lot of the complexity that his
synchronization primitives used. I do however owe some significant gratitude
toward him for setting me on the right path.

I've tried to maximize code separation, both to make any potential rebases
easier and to ensure that esync is only active when configured. All code in
existing source files is guarded with "if (do_esync())", and generally that
condition is followed by "return esync_version_of_this_method(...);", where
the latter lives in esync.c and is declared in esync.h. I've also tried to
make the patchset very clear and readable—to write it as if I were going to
submit it upstream. (Some intermediate patches do break things, which Wine is
generally against, but I think it's for the better in this case.) I have cut
some corners, though; there is some error checking missing, or implicit
assumptions that the program is behaving correctly.

I've tried to be careful about races. There are a lot of comments whose
purpose are basically to assure me that races are impossible. In most cases we
don't have to worry about races since all of the low-level synchronization is
done by the kernel.

Anyway, yeah, this is esync. Use it if you like.

--Zebediah Figura
9 changes: 9 additions & 0 deletions autogen.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
#!/bin/sh
set -e
tools/make_requests
tools/make_specfiles
dlls/winevulkan/make_vulkan -x vk.xml -X video.xml
autoreconf -ifv
rm -rf autom4te.cache

echo "Now run ./configure"
Loading