--
v16: cfgmgr32: Support fetching properties for device objects in Dev{GetObjects, CreateObjectQueryEx}.
cfgmgr32: Implement initial device enumeration for DevCreateObjectQuery.
cfgmgr32: Stub DevCreateObjectQuery(Ex) functions.
cfgmgr32/tests: Add tests for fetching specific properties in DevGetObjects.
https://gitlab.winehq.org/wine/wine/-/merge_requests/8478
These are the first steps towards code sharing, finally :)
Patch 4 is a bit big, but it's just copying code from various source files into a single source file. I can attempt to split if if that's preferable for review purposes.
--
v2: d3dx10: Use shared d3dx code in get_image_info when possible.
d3dx9: Move functions intended for code sharing into a separate source file.
d3dx9: Introduce d3dx_image_file_format enumeration.
https://gitlab.winehq.org/wine/wine/-/merge_requests/8490
If wine dlls are built with frame pointers enabled, the frame pointer will be
used during unwinding.
If we don't restore frame pointer before calling the user mode callback, then
later when the unwinder encounters the user mode callback frame, it will set
the frame pointer to something unexpected (depends on what it was during
`call_user_mode_callback`). Then for the subsequent frame it adjusts the stack
pointer based on the frame pointer, thus derailing the unwinding process.
--
v10: ntdll: Also restore rbp before calling user mode callback.
user32/tests: Test unwinding through a user callback.
https://gitlab.winehq.org/wine/wine/-/merge_requests/8466
--
v15: cfgmgr32: Support fetching properties for device objects in Dev{GetObjects, CreateObjectQueryEx}.
cfgmgr32: Implement initial device enumeration for DevCreateObjectQuery.
cfgmgr32: Stub DevCreateObjectQuery(Ex) functions.
cfgmgr32/tests: Add tests for fetching specific properties in DevGetObjects.
https://gitlab.winehq.org/wine/wine/-/merge_requests/8478
Follow-up to !8184.
This also adds a bunch of helpers for writing media source tests (without involving the mf session) in mfsrcsnk, these could be helpful for more tests of this kind in the future. I'm somewhat unsure as to why we haven't done tests for source behavior so far: while those are plugins, applications rely on a bunch of things in the builtin sources that microsoft provides.
Since this affects both mfsrcsnk and winegstreamer sources, tests should be run both with `HKCU\\Software\\Wine\\MediaFoundation\\DisableGstByteStreamHandler` enabled and disabled. Due to this I figured it'd make sense to implement everything first and then remove the test todo_wine's and the statements rejecting the thin parameter in a single commit ("Allow thinning"). Perhaps this could be solved more nicely by setting the registry key in the tests themselves? I'm unsure if that is something we do in tests, generally.
`MEStreamThinMode` events need to be emitted between the last sample using the outdated thinning parameter and the first sample using the updated thinning parameter. The winegstreamer implementation for this turned out a bit complex, if there is a simpler way to do this please let me know.
Regarding winegstreamer, note that buffers need to be intercepted before the decoder because decoders often discard `GST_BUFFER_FLAG_DELTA_UNIT` flags (which is already annoying in itself - it causes all samples to be marked as `MFSampleExtension_CleanPoint`, this should potentially be worked around in the future). But even besides that, intercepting before the decoder is the "proper" implementation, since the point of thinning is increasing decoding speed by skipping delta frames, tho there are some games that rely on the semantics as well.
--
v3: mfsrcsnk: Emit MEStreamThinMode event.
mfsrcsnk: Move media_source_send_sample.
mfsrcsnk: Implement thinning.
winedmo: Implement thinning.
winedmo: Generate missing timestamps.
winegstreamer: Implement thinning in media source.
winegstreamer: Implement thinning in wg_parser.
mfsrcsnk/tests: Add tests for thinning.
https://gitlab.winehq.org/wine/wine/-/merge_requests/8505
Fixes a regression with 672c3a561f5.
---
A few applications (Quicken, some Wine Mono tests) hit this server assertion after the 10.11 merge:
```
Assertion failed: (mutex->owner == thread), function abandon_mutexes, file mutex.c, line 244.
```
I'm not sure that this patch is correct, exactly. But the current situation is that `mutex_destroy` frees its mutex's sync object, but leaves it in its owning thread's list of `mutex_sync`s. So later, `abandon_mutexes` will enumerate it, which is a UAF. If the memory got stomped on in the meantime (or zeroed, as macOS' `free` does recently), it will hit the above assertion.
Arguably I suppose this could call `mutex_sync_destroy` instead of the direct `do_release`?
Also should this do a `release_object` on the `struct mutex *` itself?
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/8538
--
v8: setupapi: Support in-built properties in SetupDiGetDevicePropertyW and CM_Get_DevNode_Property_ExW.
ntoskrnl.exe/tests: Add tests for built-in properties for PnP device instances.
setupapi/tests: Add tests for inbuilt device properties.
https://gitlab.winehq.org/wine/wine/-/merge_requests/8515