a hotfix for the recent release of Persona 5 Royal.
--
v17: kernel32: Add semi-stub for RemoveDirectoryTransactedA/W().
kernel32: Add semi-stub for GetFileAttributesTransactedA/W().
kernel32: Add semi-stub for FindFirstFileTransactedA/W().
https://gitlab.winehq.org/wine/wine/-/merge_requests/1145
a hotfix for the recent release of Persona 5 Royal.
--
v16: kernel32: Add semi-stub for RemoveDirectoryTransactedA/W().
kernel32: Add semi-stub for GetFileAttributesTransactedA/W().
kernel32: Add semi-stub for FindFirstFileTransactedA/W().
kernel32: Add semi-stub for DeleteFileTransactedA/W().
kernel32: Add semi-stub for CreateDirectoryTransactedA/W().
kernel32: Add semi-stub for CreateFileTransactedA/W().
https://gitlab.winehq.org/wine/wine/-/merge_requests/1145
On Thu Mar 30 18:33:42 2023 +0000, Alexandre Julliard wrote:
> Please don't use Hungarian notation, particularly when the other
> parameters use the standard form.
hungarian notation is the pus in front of MiniVersion if I am reading correctly?
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/1145#note_28475
Fixes bug [53826](https://bugs.winehq.org/show_bug.cgi?id=53826).
--
v22: ntdll/tests: Increase margins in timer merging tests.
ntdll: Set xattr in NtCreateFile if inferred and requested attributes don't match.
ntdll: Only infer hidden attribute from file name if xattr is not present.
ntdll: Handle hidden file names inside get_file_info instead of after it.
ntdll: Do not open-code hidden file handling in get_dir_data_entry.
ntdll/tests: Add test for file attributes of files with names beginning with a dot.
https://gitlab.winehq.org/wine/wine/-/merge_requests/1148
This second MR in the Wayland series adds display configuration related enhancements, including providing more display information (like a proper/consistent name and position) to Wine and supporting GetCurrentDisplaySettings.
To get additional information from the Wayland compositor we need to use a protocol from the wayland-protocols collection, so we introduce support in the build system for protocol .xml files. These changes are introduced on their own commit in the series, but we can squash it with the next commit, where the functionality is first used, if preferred.
To be able to provide a consistent view of the display settings across all processes, this MR leverages the win32u CURRENT_SETTINGS storage mechanism (which was previously used only in the null driver).
Thanks!
--
v4: winewayland.drv: Infer and report Windows monitor positions.
winewayland.drv: Use the output name reported by the compositor.
tools: Support building Wayland protocol source files.
winewayland.drv: Handle wl_output objects only in the desktop process.
winewayland.drv: Support GetCurrentDisplaySettings.
win32u: Support setting the registry mode using gdi_device_manager.
https://gitlab.winehq.org/wine/wine/-/merge_requests/2476
This second MR in the Wayland series adds display configuration related enhancements, including providing more display information (like a proper/consistent name and position) to Wine and supporting GetCurrentDisplaySettings.
To get additional information from the Wayland compositor we need to use a protocol from the wayland-protocols collection, so we introduce support in the build system for protocol .xml files. These changes are introduced on their own commit in the series, but we can squash it with the next commit, where the functionality is first used, if preferred.
To be able to provide a consistent view of the display settings across all processes, this MR leverages the win32u CURRENT_SETTINGS storage mechanism (which was previously used only in the null driver).
Thanks!
--
v5: winewayland.drv: Infer and report Windows monitor positions.
winewayland.drv: Use the output name reported by the compositor.
tools: Support building Wayland protocol source files.
winewayland.drv: Handle wl_output objects only in the desktop process.
winewayland.drv: Support GetCurrentDisplaySettings.
win32u: Support setting the registry mode using gdi_device_manager.
https://gitlab.winehq.org/wine/wine/-/merge_requests/2476
This second MR in the Wayland series adds display configuration related enhancements, including providing more display information (like a proper/consistent name and position) to Wine and implementing GetCurrentDisplaySettings.
To get additional information from the Wayland compositor we need to use a protocol from the wayland-protocols collection, so we introduce support in the build system for protocol .xml files. These changes are introduced on their own in the first commit in the series, but we can squash it with the next commit, where the functionality is first used, if preferred.
To be able to provide a consistent view of the display settings across all processes, this MR adds a shared memory region containing an authoritative version of the Wayland output information (see the "winewayland.drv: Implement GetCurrentDisplaySettings." commit for more details).
Thanks!
--
v3: winewayland.drv: Infer and report Windows monitor positions.
winewayland.drv: Use the output name reported by the compositor.
tools: Support building Wayland protocol source files.
winewayland.drv: Handle wl_output objects only in the desktop process.
winewayland.drv: Support GetCurrentDisplaySettings.
win32u: Support setting the registry mode using gdi_device_manager.
https://gitlab.winehq.org/wine/wine/-/merge_requests/2476
--
v3: winemac: Use the default IME implementation for stubs.
winex11: Use the default IME implementation for stubs.
imm32: Return TRUE from ImmIsIME with any HKL.
imm32: Add a default implementation for IME functions.
imm32: Introduce new input_context_init helper.
imm32: Select current IME on input contexts when needed.
imm32: Send WM_IME_SELECT messages when IME is activated.
imm32: Pass the HIMC to the IME UI window IMMGWL_IMC.
win32u: Ignore some IME messages in default_window_proc.
win32u: Ignore IME messages from IME UI windows in DefWindowProc.
imm32/tests: Test DefWindowProc with IME UI messages.
https://gitlab.winehq.org/wine/wine/-/merge_requests/2539
This series of patches implements GetConsoleOriginalTitleA/W().
We re-use the existing logic of GetConsoleTitle, as it is the same for GetConsoleOriginalTitle.
--
v2: kernel32/tests: Test GetConsoleOriginalTitleA/W() with empty title
kernelbase: Implement GetConsoleOriginalTitleA()
kernelbase: Implement GetConsoleOriginalTitleW()
conhost: Save original console title on initialization
kernel32/tests: Check return length of GetConsoleOriginalTitleA/W()
https://gitlab.winehq.org/wine/wine/-/merge_requests/2532
Today, NtCreateThreadEx() passes to pthread_attr_setstack() an address
range that spans both the user (PE) stack and the kernel (Unix) stack.
pthread_attr_setstack() accepts an address range that will be used as
the initial stack area for the thread created by pthread_create(). It
is often assumed that the initial stack will be available for the entire
duration of the thread's lifetime.
This assumption, however, conflicts with how Win32 fibers operate.
Fiber APIs allow the thread's initial stack to be freed before the
thread exits, or kept alive beyond the point of thread's termination.
This allows the lifetime of the thread's initial stack to be shorter or
longer than the originating thread's lifetime. This is possible because
each fiber has its own stack and context, and ConvertThreadToFiber()
transfers the current thread's stack to a new fiber.
This specifically causes problems in Glibc v2.31 and earlier. These
Glibc versions have a bug where madvise(2) with the MADV_DONTNEED flag
is called on the initial stack area on thread exit, even when the stack
was user-supplied (via pthread_attr_setstack). Therefore, the kernel
may zero out any portion of the initial stack at any time after the
originating thread terminates, even if the stack no longer belongs to
the current thread (either freed and reallocated, or owned by a fiber).
This may ultimately lead to memory corruption.
Fix this by only passing the syscall (kernel) portion of the stack to
pthread_attr_setstack().
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/2468
--
v2: winemac: Use the default IME implementation for stubs.
winex11: Use the default IME implementation for stubs.
imm32: Return TRUE from ImmIsIME with any HKL.
imm32: Add a default implementation for IME functions.
imm32: Introduce new input_context_init helper.
imm32: Select current IME on input contexts when needed.
imm32: Send WM_IME_SELECT messages when IME is activated.
imm32: Pass the HIMC to the IME UI window IMMGWL_IMC.
win32u: Ignore some IME messages in default_window_proc.
win32u: Ignore IME messages from IME UI windows in DefWindowProc.
imm32/tests: Test DefWindowProc with IME UI messages.
https://gitlab.winehq.org/wine/wine/-/merge_requests/2539
The app I'm considering opens a video_processor on its own, with
a NV12 format on input and a ARGB32 format on output.
Tested on Windows: the samples are flipped vertically. While Wine
keeps them untouched.
So added a videoflip in the video processor to be activated when needed.
Current activation is based on RGB vs non RGB input/output formats.
Set as draft as if somehow related to MR!2159.
Comments welcomed.
Signed-off-by: Eric Pouech <epouech(a)codeweavers.com>
--
v2: winegstreamer: In video_processor, activate a videoflip converter.
https://gitlab.winehq.org/wine/wine/-/merge_requests/2471
Fixes Epic Online Services update hanging when the service needs to be restarted (a helper process is waiting for either service's mutex to be available or QueryServiceStatus to tell that the server is stopped after the service had just exited the process without notifying service control manager).
It seems to me that using a job object is much simpler than the other ways (like waiting on multiple process handles and managing process addition and deletion in the waiters list). I tested that on real up to date Windows 10 machine and there the process has the job object which object has JOB_OBJECT_LIMIT_BREAKAWAY_OK | JOB_OBJECT_LIMIT_SILENT_BREAKAWAY_OK limit flags (and only those). That job has also the other service processes in it but not services.exe itself. However, for some reason on any Testbot machine that is not the case and IsProcessInJob() reports that the process doesn't have a job. But since I do see that job on a real machine I think using job object here is fine.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/2536
Stop changing their attributes in place. This is complex, somewhat brittle, and
currently broken for the Vulkan backend.
Restrict wined3d_texture_update_desc() to changing user memory and pitch.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/2535
--
v3: d3d10/effect: Add support for 'iadd' instruction.
d3d10/effect: Add support for 'imin' instruction.
d3d10/effect: Add support for umin/umax instructions.
d3d10/effect: Add support for asin/acos/atan instructions.
d3d10/effect: Handle division by zero in 'udiv'.
d3d10/effect: Add support for 'movc' instruction.
https://gitlab.winehq.org/wine/wine/-/merge_requests/2485
--
v3: imm32: Create the IME UI as child of the IME default window.
imm32: Re-create the IME UI window when IME changes.
imm32: Keep the IME UI window on the default input context.
imm32: Update existing input contexts on layout change.
imm32/tests: Test IME UI window and IME window presence.
imm32/tests: Test IME UI creation with the installed IME.
imm32/tests: Test ImmProcessKey with the installed IME.
imm32: Ignore ImmProcessKey if hkl isn't the current layout.
imm32: Cleanup ImmProcessKey variables and traces.
imm32/tests: Ignore expected calls marked with todo.
imm32/tests: Add explicit ImmLoadIME / ImmFreeLayout calls.
https://gitlab.winehq.org/wine/wine/-/merge_requests/2531
--
v2: imm32: Create the IME UI as child of the IME default window.
imm32: Re-create the IME UI window when IME changes.
imm32: Keep the IME UI window on the default input context.
imm32: Update existing input contexts on layout change.
imm32/tests: Test IME UI window and IME window presence.
imm32/tests: Test IME UI creation with the installed IME.
imm32/tests: Test ImmProcessKey with the installed IME.
imm32: Ignore ImmProcessKey if hkl isn't the current layout.
imm32: Cleanup ImmProcessKey variables and traces.
imm32/tests: Ignore expected calls marked with todo.
imm32/tests: Add explicit ImmLoadIME / ImmFreeLayout calls.
https://gitlab.winehq.org/wine/wine/-/merge_requests/2531
* Disable lighting, which affects rendering tests in non-obvious ways.
* Show that the texture is explicitly never set in ddraw7.
* Show that the diffuse color is rendered in ddraw4 and ddraw7, which is
consistent with the texture being unset in ddraw7 and suggests that the same
applies to ddraw4.
This may or may not help with bug 54069, but if it does not, it hopefully will
at least make the reason for failure clearer.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/2487
--
v2: d3d10/effect: Add support for 'iadd' instruction.
d3d10/effect: Add support for 'imin' instruction.
d3d10/effect: Add support for umin/umax instructions.
d3d10/effect: Add support for asin/acos/atan instructions.
d3d10/effect: Handle division by zero in 'udiv'.
d3d10/effect: Add support for 'movc' instruction.
https://gitlab.winehq.org/wine/wine/-/merge_requests/2485
Some refactoring + implementation of `_StructuredTaskCollection::_Cancel` and `_StructuredTaskCollection::_IsCanceling`.
--
v2: msvcr100: Implement _StructuredTaskCollection::_IsCanceling.
msvcr100: Implement _StructuredTaskCollection canceling.
msvcr100: Use enum for _StructuredTaskCollection status bits.
msvcr100: Use enum for _StructuredTaskCollection return value.
msvcr100: Only wake task collection waiters when finished >= count.
https://gitlab.winehq.org/wine/wine/-/merge_requests/2524
Needed for Epic Online Services updater which invokes taskkill with /T flag and fails to replace a file if that didn't actually killed the processes.
There is apparently a bit of refactoring on the way, with most notably using toolhelp snapshot instead of EnumProcesses(). That is more convenient for finding child processes (instead of performing a separate query for parent pid), but I also think that is more consistent in general and gets rid of existing separate query for process name.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/2528
I left a few comments on the tests. Otherwise, I quite like the patch series. Force-setting the extended attributes on visible-but-starting-with-a-dot files seems like a good compromise to fix the bug at hand without requiring a ton of attribute setting and I couldn't think of any better solution.
This won't fix the case of Wine-created dot files when the show_dot_files option is enabled if the user then disables the option, which again seems like a good compromise.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/1148#note_28247
Matteo Bruni (@Mystral) commented about dlls/ntdll/tests/file.c:
> }
>
> +#define lok ok_(__FILE__, line)
> +#define rename_file(h,f) rename_file_(__LINE__,(h),(f))
> +static BOOL rename_file_( int line, HANDLE h, const WCHAR *filename )
> +{
> + FILE_RENAME_INFORMATION *fri;
> + UNICODE_STRING ntpath;
> + IO_STATUS_BLOCK io;
> + NTSTATUS status;
> + BOOLEAN ret;
> + ULONG size;
> +
> + ret = pRtlDosPathNameToNtPathName_U( filename, &ntpath, NULL, NULL );
> + lok( ret, "RtlDosPathNameToNtPathName_U failed\n" );
> + if (!ret) return FALSE;
Please get rid of the ok() and if() {}, we can just assume that the RtlDosPathNameToNtPathName_U() call works correctly (i.e. if it fails we have bigger problems and arguably crashing and burning is better than reporting a failure and silently skipping the test).
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/1148#note_28242
Matteo Bruni (@Mystral) commented about dlls/ntdll/tests/file.c:
> CloseHandle( h );
> }
>
> +#define lok ok_(__FILE__, line)
> +#define rename_file(h,f) rename_file_(__LINE__,(h),(f))
> +static BOOL rename_file_( int line, HANDLE h, const WCHAR *filename )
I'd avoid these line shenanigans, we now have test contexts to disambiguate ok() calls from different tests.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/1148#note_28241
Based on !2524.
This adds the remaining stubs needed for Crazy Machines 3 to work and decode preview images correctly in online mode.
--
v2: msvcr110: Add _Context::_IsSynchronouslyBlocked stub.
msvcr110: Add _Cancellation_beacon::_Cancellation_beacon_dtor stub.
msvcr110: Add _Cancellation_beacon::_Cancellation_beacon_ctor stub.
msvcr100: Implement _StructuredTaskCollection::_IsCanceling.
msvcr100: Implement _StructuredTaskCollection canceling.
msvcr100: Use enum for _StructuredTaskCollection status bits.
msvcr100: Use enum for _StructuredTaskCollection return value.
msvcr100: Only wake task collection waiters when finished >= count.
https://gitlab.winehq.org/wine/wine/-/merge_requests/1979
Diablo IV (closed beta) depends on DEVPKEY_Device_MatchingDeviceId being present for GPUs (once it is able to match GPU luid to the one obtained from dxgi). It also depends on the MatchingDeviceId conating "ven_" and "dev_" substrings. Without those it doesn't consider the gpu as valid, which currently results in the game complaining about no GPUs found. I guess that maybe it is trying to filter out software GPUs and such this way.
As far as my testing goes, DEVPKEY_Device_MatchingDeviceId has this form with hardware GPUs only and maybe with the recent enough Win10 or Win11.
The other two device properties being added are also queried by the game although they are not strictly needed for it.
--
v6: win32u: Set DEVPKEY_Device_RemovalPolicy for GPUs.
win32u: Set DEVPKEY_Device_BusNumber for GPUs.
win32u: Set DEVPKEY_Device_MatchingDeviceId for GPUs.
https://gitlab.winehq.org/wine/wine/-/merge_requests/2449
I initially wanted to do the refactoring in a separate merge request, but since my merge request yesterday broke the tests, I decided to add the implementation into this commit as well.
--
v5: kernelbase: Recursively obtain the Wow6432Node parent.
kernelbase: Add support for shared registry keys.
kernelbase: Call create_key() from create_subkey().
kernelbase: Factor creating a subkey out of create_key().
kernelbase: Don't open Wow6432nodes from create_key().
https://gitlab.winehq.org/wine/wine/-/merge_requests/2483