An application was spawning a Unix process with CreateProcess (which returned success only when the stack was favorable; see the first patch) and then closing the handles from the PROCESS_INFORMATION, which were garbage. That obviously caused havoc elsewhere if those garbage values happened to be valid handles.
It's not quite clear to me what the "right" thing to do is when a Unix process is created this way, since it's kind of a hack. But we already zero out the PS_CREATE_INFO in NtCreateUserProcess, so zeroing the handles seems in keeping with that.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/8839
On Tue Aug 26 09:09:44 2025 +0000, Ivan Lyugaev wrote:
> Will my MR be considered further?
I think using the registry would make this significantly cleaner, enough that I don't plan to review it further while it uses files.
I'd consider multiple configurations an advanced feature, and that's still possible for the UI to provide based on the registry. Transferring configurations across different machines is going to be even less common. I don't think the improvement in discoverability for that use case is worth it.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/8778#note_113915
On Tue Aug 26 16:38:49 2025 +0000, Alexandre Julliard wrote:
> You should stop updating your MR every day. Not only is it a waste of CI
> resources, but it makes it look like it's not ready since it keeps being updated.
> Also you don't need additional forks, you can create a MR from a
> different branch in the same fork.
My apologies about the daily updating. This was a misunderstanding on my part, since the UI here states that checks have failed and that the MR is not ready for merging after the main project has taken commits. Due to that warning here, I had thought that it was necessary to keep this fork updated with main, until it has been merged with main. Since what you say here tells me that I was wrong about this, I will stop updating my fork. Thank you. This MR is ready.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/8573#note_113910
C++/CX exposes `IPropertyValue` through `Platform::Details::CreateValue`, which returns a `Platform::Object` (which just seems to be a `IPropertyValue` object + C++ RTTI) containing the boxed value.
Apps don't seem to call `CreateValue` directly with a typecode. The code for boxing values gets generated when a value type gets assigned to a `Platform::Object` variable, as documented [here.](https://learn.microsoft.com/en-us/cpp/extensions/boxing-cpp-componen… The generated code will:
1. Call `__abi_make_type_id` with a `struct __abi_type_descriptor *` value, which is just a typecode + string pair. This returns a `Platform::Type` object.
2. Call `Platform::Type::GetTypeCode` on the returned `Platform::Type` object to get back the typecode.
3. Call `Platform::Details::CreateValue` with the typecode and a pointer to the actual value that needs to be boxed.
Apart from the usual WinRT methods, `Platform::Type` obejcts also impement the `IEquatable` and `IPrintable` interfaces. I don't know what their vtables look like, though.
The `Platform::Type` and `Platform::Object` classes also have associated RTTI (can be demonstrated by calling `__RTtypeid`), which we'll also need to emit at some point in the future.
--
v9: vccorlib140: Use the correct symbol name for InitControlBlock on i386 and arm.
vccorlib140: Implement Platform::Details::CreateValue.
vccorlib140: Add stub for Platform::Details::CreateValue.
vccorlib140: Implement Platform::Type::{Equals, GetTypeCode, ToString, FullName::get}.
vccorlib140: Implement __abi_make_type_id.
https://gitlab.winehq.org/wine/wine/-/merge_requests/8831
C++/CX exposes `IPropertyValue` through `Platform::Details::CreateValue`, which returns a `Platform::Object` (which just seems to be a `IPropertyValue` object + C++ RTTI) containing the boxed value.
Apps don't seem to call `CreateValue` directly with a typecode. The code for boxing values gets generated when a value type gets assigned to a `Platform::Object` variable, as documented [here.](https://learn.microsoft.com/en-us/cpp/extensions/boxing-cpp-componen… The generated code will:
1. Call `__abi_make_type_id` with a `struct __abi_type_descriptor *` value, which is just a typecode + string pair. This returns a `Platform::Type` object.
2. Call `Platform::Type::GetTypeCode` on the returned `Platform::Type` object to get back the typecode.
3. Call `Platform::Details::CreateValue` with the typecode and a pointer to the actual value that needs to be boxed.
Apart from the usual WinRT methods, `Platform::Type` obejcts also impement the `IEquatable` and `IPrintable` interfaces. I don't know what their vtables look like, though.
The `Platform::Type` and `Platform::Object` classes also have associated RTTI (can be demonstrated by calling `__RTtypeid`), which we'll also need to emit at some point in the future.
--
v8: vccorlib140: Use the correct symbol name for InitControlBlock on i386 and arm.
vccorlib140: Implement Platform::Details::CreateValue.
vccorlib140: Add stub for Platform::Details::CreateValue.
vccorlib140: Implement Platform::Type::{Equals, GetTypeCode, ToString, FullName::get}.
vccorlib140: Implement __abi_make_type_id.
https://gitlab.winehq.org/wine/wine/-/merge_requests/8831
`IMap` is implemented on top of a `rb_tree` guarded with an `SRWLOCK`. We need the map to be thread safe as:
* `PropertySet` is marked as `IAgileObject`.
* I plan to use `PropertySet` as the backing store for [`DeviceInformation::Properties`](https://learn.microsoft.com/en-us/uwp/api/windows.devices.enumeration.deviceinformation.properties?view=winrt-26100). These properties can be updated by apps after receiving an [`Updated`](https://learn.microsoft.com/en-us/uwp/api/windows.devices.enumeration.devicewatcher.updated?view=winrt-26100#windows-devices-enumeration-devicewatcher-updated) event from the device watcher with [`DeviceInformation::Update`](https://learn.microsoft.com/en-us/uwp/api/windows.devices.enumeration.deviceinformation.update?view=winrt-26100). The current `DeviceWatcher` implementation dispatches the event delegates for `Update` from a separate thread.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/8685
This MR introduces an initial implementation for `ReadPackageFromStream` in order to be able to decompress/read OPC packages, and enumerate their parts.
This is for supporting AppX packages, which themselves are OPC packages as well. As such, the code does not implement support for reading relationships or interleaved archives, as AppX does not support either (`APPX_E_RELATIONSHIPS_NOT_ALLOWED`, `APPX_E_INTERLEAVING_NOT_ALLOWED`).
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/8837
[Chromium obtains an agile reference](https://source.chromium.org/chromium/chromium/src/+/main:device/… to WinRT activation factories with RoAgileReference. As we currently do not support marshaling WinRT objects, this fails. However, as objects marked with IAgileObject don't need to be marshaled across apartments, we can trivially implement `RoAgileReference` for such objects, as most activation factories tend to be agile.
--
v2: combase: Don't marshal objects that implement IAgileObject in RoGetAgileReference.
https://gitlab.winehq.org/wine/wine/-/merge_requests/8697
Thanks for feedback.
I'll take a closer look at how Carla experimental features work which allow the VST DLLs to be loaded directly.
Maybe yabridge is taking unnecessary control of windowing that Wine may be able to handle internally instead. Carla's VST DLL handler may help clarify where exactly diff occurs.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/6569#note_113875