This commit replaces the SampleGrabberSink with a dedicated Video Sink,
referred to as the Simple Video Renderer (SVR).
This brings it more inline with Windows and provides the benefit of
having direct access to the IMFSample, removing the need to copy the
sample data.
--
v7: mfmediaengine: Fallback to sample copy if scaling is required.
mfmediaengine: Implement D3D-aware video frame sink.
mfmediaengine: Implement SVR.
https://gitlab.winehq.org/wine/wine/-/merge_requests/5924
Signed-off-by: Nikolay Sivov <nsivov(a)codeweavers.com>
--
v2: windowscodecs: Implement CreateMetadataReader().
windowscodecs/metadata: Add a helper to iterate over components.
windowscodecs/tests: Add a basic test for CreateComponentEnumerator().
windowscodecs/tests: Add some tests for CreateMetadataReader().
windowscodecs/tests: Use string literals in the metadata tests.
https://gitlab.winehq.org/wine/wine/-/merge_requests/6954
The tests indicate that for dmo_wrapper_sink_Receive:
(1) If ProcessOutput succeeds, including S_FALSE, it continue processing.
(2) If ProcessOutput fails, it returns S_OK.
(3) If downstream Receive fails or return S_FALSE, it returns downstream hr.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/6957
--
v3: mshtml: Get rid of unused HTMLElement_toString_dispids.
mshtml: Expose respective props from StyleSheetPrototype.
mshtml: Don't expose toString from styles in IE9+ modes.
mshtml: Don't expose the *Expression methods from styles in IE9+ modes.
mshtml: Don't expose the clip* props from style declaration or properties
mshtml: Don't expose 'behavior' prop from styles in IE11 mode.
mshtml: Move 'filter' prop to MSCSSPropertiesPrototype in IE9 mode.
mshtml: Prefer builtins for style aliases that have the same name.
mshtml: Expose respective props from MSCSSPropertiesPrototype.
mshtml/tests: Add more tests for the style aliased prop names.
https://gitlab.winehq.org/wine/wine/-/merge_requests/6952
--
v2: msvcrt: Call _wfindnext64 in _findnext64 function.
msvcrt: Call _wfindfirst64 in _findfirst64 function.
msvcrt: Call _wfindnext32 in _findnext32 function.
msvcrt: Call _wfindfirst32 in _findfirst32 function.
include: Cleanup corecrt_io.h file and use it in io.h.
msvcrt: Prepare _searchenv_s() for utf-8 encoded filename.
https://gitlab.winehq.org/wine/wine/-/merge_requests/6962
--
v2: mshtml: Get rid of unused HTMLElement_toString_dispids.
mshtml: Expose respective props from StyleSheetPrototype.
mshtml: Don't expose toString from styles in IE9+ modes.
mshtml: Don't expose the *Expression methods from styles in IE9+ modes.
mshtml: Don't expose the clip* props from style declaration or properties
mshtml: Don't expose 'behavior' prop from styles in IE11 mode.
mshtml: Expose respective props from MSCSSPropertiesPrototype.
mshtml/tests: Add more tests for the style aliased prop names.
https://gitlab.winehq.org/wine/wine/-/merge_requests/6952
This is a heavily simplified version of Michael Müller's staging patch
(the staging version got broken by the PE/Unix split)
I rebased that staging patch but I thought it was too big for what it
does (so I did this instead)
As for automatically changing the status, SM_MEDIACENTER would require
Windows version checks (which are never used in Wine) and SM_TABLETPC
would likely require touchscreen/tablet detection (rbernon is working
on some touch stuff so that could be useful)
--
v3: win32u: Enable the media center metric by default.
win32u: Add registry key for changing tablet status.
https://gitlab.winehq.org/wine/wine/-/merge_requests/5234
Continuation of !5704 for cases not covered by CI. As far as I can tell, these variables have been unused in all versions of Bison, but older versions of Clang (or other compilers) didn’t detect this, likely skipping the analysis due to the size or complexity of the generated code. When Clang started emitting warnings, upstream Bison partially addressed the issue by [marking the variables as unused](https://git.savannah.gnu.org/cgit/bison.git/commit/?id=a166d5450e3f…. However, these markings remain ineffective in Clang MSVC mode due to hardcoded assumptions. My attempts to address this issue upstream in Bison have not received a response.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/6958
--
v6: winegstreamer: Send media source shutdown notification via IMFMediaShutdownNotify.
mf: Introduce IMFMediaShutdownNotify for notification of media source shutdown.
mf: Handle media source Start() failure due to source shutdown.
mf: Handle media source event subscription failure due to source shutdown.
mf: Handle media source BeginGetEvent() failure due to shutdown.
mf: Handle media source EndGetEvent() failure due to shutdown.
https://gitlab.winehq.org/wine/wine/-/merge_requests/6800
This serie is a first attempt to provide a solution to bug 57308 [1](https://bugs.winehq.org/show_bug.cgi?id=57308).
Basically, Arch distro is looking for Wine support in distributing debug information for Wine PE modules separated from image.
A quick overview of distro (Debian, Fedora, Arch) situation i (I may have missed a couple of items), but:
- no distro ship separate debug information for PE modules (they do it for ELF ones though)
- at best, they ship unstripped PE modules.
IMO, we need to help them pave the way to what should be the best expected situation (in Wine and wrt distros) to support separate debug information for PE images.
First, I believe we need to use a (solid) key to bind the stripped image and the file holding the debug information. In ELF format, this is typically done by inserting a .note.gnu.build-id section (in both stripped image and debug information file) which contains the key. This key is used to either search in fixed location (eg /usr/lib/.debug), or as key to download the debug information from a remote server (debuginfod). The key is generally made of a hash of (some sections of) the image file. This allows (esp. in the case of downloading the debug information from a debugger) to discriminate between several versions of the same module.
I think we should target this kind of solution instead of storing the debug information alongside the module (usually done as ntdll.dll.debug). This wouldn't let debuggers download the expected debug info upon request.
Fortunately, gcc and clang provide a build-id option (when generating PE images) which stores this key in the PE image.
What this serie does:
- fixes & improves dbghelp in the support of the build-id information from gcc/mingw & clang,
- improves Wine's configure script so that clang can be used to generate dwarf debug information and build-id information in PE builds,
- adds a couple of additional search locations for debug information files,
It takes the following assumptions for the storage:
- debug information files for PE images are stored in same hierarchy as debug information files for ELF images (eg /usr/lib/.debug)
- naming of such files is done as ELF, ie by using the hex string generated from the binary blob of the key. This is _NOT_ the usual way how the GUID will be printed (because the first 3 integers of the GUID are stored in little-endian format). (Note: I had to make a choice here. I don't have strong arguments one way or the other, but we need to agree on the convention here).
What distro should do to support separate debug info:
- configure Wine with --enable-build-id
- adapt at least the packaging tool to extract the key out of unstripped image \[2\],
- if binutils isn't compiled with PE support (this is apparently the Arch case), adapt the scripts to use x86_64-objcopy instead of objcopy (and friends).
I marked this MR as draft for now, as:
- I still need to polish some items (like the default location for looking up debug information files),
- wait for feedback on this proposal (it does make a couple of assumptions that need sharing IMO),
Further steps:
- the steps above are mainly targetted to have a solution for packaged download of debug information files,
- this should be integrated in debuginfod (server side: ingestion of PE files and client side: ensure gdb, lldb are compatible; implement debuginfod in winedbg).
Feed back welcomed!
\[2\]:
The least invasive readelf replacement (assuming binutils is compiled with PE support). (otherwise, use x86_64-objdump)
```
BUILDID=`objdump -p "$INPUT" | sed -n "/RSDS signature / {s/.*signature //; s/ age.*//p; q;}"`
BUILDID=${BUILDID:6:2}${BUILDID:4:2}${BUILDID:2:2}${BUILDID:0:2}${BUILDID:10:2}${BUILDID:8:2}${BUILDID:14:2}${BUILDID:12:2}${BUILDID:16}
```
Additional note: gcc/mingw puts the desired debug entry inside a dedicated section (.buildid), while clangs keeps it in .rdata (as msvc does). So, this invalidates any attempt to get information from the .buildid section (as stated in bug report).
--
v4: dbghelp: Search debug info with buildid for RSDS debug entry w/o filenames.
dbghelp: Extend search for buildid in system directories.
https://gitlab.winehq.org/wine/wine/-/merge_requests/6715
On Mon Dec 2 10:29:56 2024 +0000, eric pouech wrote:
> question: do you need both calls to test_NtQueryDirectoryFile_mask to
> invalidate a platform?
Given that the key behaviour we're testing involves the reuse of a handle, we need at least two calls. I could change it so we only verify the results of the second call, and not the first, if that would be preferable?
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/6904#note_89654
On Mon Dec 2 10:29:56 2024 +0000, eric pouech wrote:
> tracing GetLastError() is pointless here (you're testing ntdll APIs,
> while GetLastError() reflects kernel32/kernelbase API results)
Excellent point, I'll report the `status` instead
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/6904#note_89652
Let me know if you'd like me to split this up. As per feedback, I'm now doing the admin token-setting via an extension to NtSetInformationProcess.
Testing on Windows shows that the owner of GetDesktopWindow() always has a default admin token with `TokenElevationTypeDefault`, no matter the token of the process/thread that is responsible for creating it. We've had issues in this area in the past - 99e2fad1 was a case where it was important that explorer not inherit the token of the *process* spawning it, but instead the token of the *thread*. This patch keeps that app working, since now explorer will set a default token regardless. In addition to the privilege issues from 99e2fad1, it is a relatively common pattern to duplicate the token of the owner of GetDesktopWindow to acquire a default token.
Services are also currently launched with limited tokens, so this series also has services.exe elevate itself.
--
v4: kernelbase: Improve logging of information classes in GetTokenInformation.
Revert "win32u: Create explorer with the thread effective access token."
explorer: Apply a default admin token when running for the desktop.
https://gitlab.winehq.org/wine/wine/-/merge_requests/6602
This MR fix some video play crashes for KiriKiri games.
If we don't correctly return failure in dmo_wrapper_sink_Receive() call, the worker thread which calls Receive() will continue running and crashes then. With this MR, the worker thread will terminate as expected because Receive() fails.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/6915
For all mach vm operations this removes the task suspend and resume, which are not needed.
This uses `mach_vm_read_overwrite` to read into a caller-specified buffer, saving the `mach_vm_deallocate` call (bringing all read operations down to 1 syscall from 4).
The only alignment restriction on `mach_vm_write` according to the original CMU documentation is that data is
> [pointer to page aligned in array of bytes] An array of data to be written.
(In practice it also works with arbitrary addresses on macOS, but it probably doesn't hurt to follow the original specifications here).
The only other reference that these read/writes should be page-aligned is from the GNU Hurd documentation
> The current implementation requires that address, data and data_count all be page-aligned. Otherwise, KERN_INVALID_ARGUMENT is returned.
which I assume was the reason why this was originally done (plus it sounds to me like they will fix that in the future and 4fe19777 already broke GNU Hurd support anyways, if that was supposed to be working).
Also this includes the missing mach part of 5b1f3b14, which was only applied to the ptrace backend, and together with the `write_process_memory` rework, this gets rid of all fixmes in mach.c
--
v10: server: Work around macOS W^X limitations in write_process_memory.
https://gitlab.winehq.org/wine/wine/-/merge_requests/4826
According to the spec, the compiler is free to use a signed, unsigned, or even char type for enums, provided all values fit within the type. For example, constructs like `*_FORCE_DWORD` can force an unsigned type using a value like `0xffffffff`. While some headers use this approach, it’s inconsistent and 0x7fffffff is often used instead.
Unfortunately, MSVC and GCC differ in their behavior: GCC always uses an unsigned type, while MSVC uses a signed type when possible. Consequently, Clang’s behavior depends on the mode being used.
Additionally, Clang emits a warning for "useless" checks when building Wine in MinGW mode. For instance:
```
dlls/gdiplus/graphics.c:7337:18: warning: result of comparison of unsigned enum expression < 0 is always false [-WTautological-unsigned-enum-zero-compare]
7337 | src_space < 0 || src_space > CoordinateSpaceDevice)
```
This warning is impractical for code that aims to be portable. The check is not tautological when building in MSVC mode (e.g., in our CI). I considered disabling the warning, but since this is the only place in the codebase where it’s problematic, I believe we can simply adjust the check.
This resolves the last warning in LLVM builds, allowing -Werror to be used in MinGW mode as well.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/6949
Tested by running chrome without no-sandbox successfully.
--
v2: ntdll: Force redirect all ARM64EC indirect calls until the JIT is ready.
ntdll: Add arm64ec_get_module_metadata helper.
https://gitlab.winehq.org/wine/wine/-/merge_requests/6877
This MR improves configuration scheme when using clang as cross compiler:
- it fixes test for dwarf (-4) support (current test is failing as ldd emits
a warning when generating the long section names for the dwarf section,
that configure.ac treats as an error),
- it fixes --enable-build-id option with clang (clang linker uses -build-id
option, while gcc uses --build-id /mind the extra '-'/)
- it adds support in winegcc for a generic build-id linker option.
(extracted from draft MR!6715)
--
v3: configure.ac: Don't add -Wl,--build-id linker option to CFLAGS.
configure.ac: Properly detect build-id support for clang.
winegcc: Remap build-id linker option for clang.
configure.ac: Properly test clang for dwarf support.
https://gitlab.winehq.org/wine/wine/-/merge_requests/6922
I know we've had a policy to avoid window manager specific workarounds, I think we could reconsider it. The fix could be unguarded and applied with every window manager, and could very well work, but I think it is ugly enough to justify checking for KWin specifically.
The problem is that as soon as a window configure request is sent to a maximized window, KWin internal state gets bogus and it loses track of the window maximized state. I've described the KWin source details on https://bugs.kde.org/show_bug.cgi?id=496966 and opened https://invent.kde.org/plasma/kwin/-/merge_requests/6854 as a possible fix for it, but the time it will take to land could justify working around it in Wine.
The workaround is to avoid sending configure requests to maximized windows, which sounds sensible and we already avoid resizing maximized windows, but, moving a maximized window to a different monitor *requires* sending a configure request. KWin bug makes no difference to requests with only position changes, and they trigger it all the same. So, the only solution is to temporarily remove the maximized state bits before sending the configure request, putting them back afterwards. This is quite straightforward to do with the new state tracker, but it could very well trigger other problems with other window managers.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=57465
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/6944
On Mon Dec 2 22:29:18 2024 +0000, Robbert van der Helm wrote:
> Ah I completely missed the assignment there at the end when I was
> grepping for usages of `wm_state_serial`. I still can't reliably get
> Wine to accept configuration events I sent to it though. If I set the
> `WM_STATE` property it does process the next event, but then it gets
> stuck again after that because now `net_wm_state_serial` will be stuck
> on a nonzero value. I could probably figure out a way to get Wine to
> cooperate, but that's almost certainly going to break in a future Wine release.
> To reiterate, my goal isn't necessarily to send `ConfigureNotify` events
> to Wine. I just want a Wine window that's reparented to another window
> to handle mouse events correctly, as otherwise Wine seems to interpret
> pointer events as being relative to the root window. So for example, if
> I have a regular top level X11 window at position 50x50 relative to the
> top left of the root window, and I reparent a Wine window into that
> window, clicking at coordinates 20x20 from the top left of the
> reparented Wine window will cause Wine to register a click at coordinate
> 70x70. Up until now it was possible to work around this by telling Wine
> about its location on screen through `ConfigureNotify` events, but that
> is of course a hack.
> Since you've been working on Wine's X11 driver, what do you think is the
> best way to approach this in a way that isn't likely to break again in
> the future? Would extending Wine's existing tracking of
> reparented/embedded windows so any events related to pointer coordinates
> get translated accordingly make sense?
There has been various changes in the way we handle window positioning, and it's now probably more flexible to arbitrary X11 parent windows, but in any case we still always consider the X root window coordinates as the origin for the Win32 desktop.
If you want to embed all Wine windows into another window and use its position as the Win32 desktop origin, it's basically what the "virtual desktop" mode is doing already. It's an option in winecfg, where we create a dedicated window for the Win32 desktop and every Wine window will be a child of it. You could probably then reparent the desktop window to the window you want?
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/6569#note_89502
On Mon Dec 2 10:04:22 2024 +0000, Rémi Bernon wrote:
> `wm_state_serial` should be cleared when the window state actually
> changes and the `WM_STATE` PropertyNotify event is received, calling
> `window_wm_state_notify` which clears it.
Ah I completely missed the assignment there at the end when I was grepping for usages of `wm_state_serial`. I still can't reliably get Wine to accept configuration events I sent to it though. If I set the `WM_STATE` property it does process the next event, but then it gets stuck again after that because now `net_wm_state_serial` will be stuck on a nonzero value. I could probably figure out a way to get Wine to cooperate, but that's almost certainly going to break in a future Wine release.
To reiterate, my goal isn't necessarily to send `ConfigureNotify` events to Wine. I just want a Wine window that's reparented to another window to handle mouse events correctly, as otherwise Wine seems to interpret pointer events as being relative to the root window. So for example, if I have a regular top level X11 window at position 50x50 relative to the top left of the root window, and I reparent a Wine window into that window, clicking at coordinates 20x20 from the top left of the reparented Wine window will cause Wine to register a click at coordinate 70x70. Up until now it was possible to work around this by telling Wine about its location on screen through `ConfigureNotify` events, but that is of course a hack.
Since you've been working on Wine's X11 driver, what do you think is the best way to approach this in a way that isn't likely to break again in the future? Would extending Wine's existing tracking of reparented/embedded windows so any events related to pointer coordinates get translated accordingly make sense?
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/6569#note_89501
This MR improves configuration scheme when using clang as cross compiler:
- it fixes test for dwarf (-4) support (current test is failing as ldd emits
a warning when generating the long section names for the dwarf section,
that configure.ac treats as an error),
- it fixes --enable-build-id option with clang (clang linker uses -build-id
option, while gcc uses --build-id /mind the extra '-'/)
- it adds support in winegcc for a generic build-id linker option.
(extracted from draft MR!6715)
--
v2: configure.ac: Don't add -Wl,--build-id linker option to CFLAGS.
configure.ac: Properly detect build-id support for clang.
winegcc: Remap build-id linker option for clang.
configure.ac: Properly test clang for dwarf support.
https://gitlab.winehq.org/wine/wine/-/merge_requests/6922
--
v3: win32u: Move surface and swapchain wrappers from winevulkan.
winevulkan: Keep the host function pointers in devices and instances.
winevulkan: Use the vulkan object as the wrapper tree node.
winevulkan: Get rid of unnecessary *to_handle helpers.
winevulkan: Avoid changing client command buffer pointer.
winevulkan: Fix incorrect client queue pointers.
winevulkan: Introduce a new vulkan_object_init helper.
winevulkan: Use the result to decide if creation failed.
https://gitlab.winehq.org/wine/wine/-/merge_requests/6931
This MR improves configuration scheme when using clang as cross compiler:
- it fixes test for dwarf (-4) support (current test is failing as ldd emits
a warning when generating the long section names for the dwarf section,
that configure.ac treats as an error),
- it fixes --enable-build-id option with clang (clang linker uses -build-id
option, while gcc uses --build-id /mind the extra '-'/)
- it adds support in winegcc for a generic build-id linker option.
(extracted from draft MR!6715)
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/6922
For all mach vm operations this removes the task suspend and resume, which are not needed.
This uses `mach_vm_read_overwrite` to read into a caller-specified buffer, saving the `mach_vm_deallocate` call (bringing all read operations down to 1 syscall from 4).
The only alignment restriction on `mach_vm_write` according to the original CMU documentation is that data is
> [pointer to page aligned in array of bytes] An array of data to be written.
(In practice it also works with arbitrary addresses on macOS, but it probably doesn't hurt to follow the original specifications here).
The only other reference that these read/writes should be page-aligned is from the GNU Hurd documentation
> The current implementation requires that address, data and data_count all be page-aligned. Otherwise, KERN_INVALID_ARGUMENT is returned.
which I assume was the reason why this was originally done (plus it sounds to me like they will fix that in the future and 4fe19777 already broke GNU Hurd support anyways, if that was supposed to be working).
Also this includes the missing mach part of 5b1f3b14, which was only applied to the ptrace backend, and together with the `write_process_memory` rework, this gets rid of all fixmes in mach.c
--
v9: server: Do not page align address in write_process_memory.
server: Do not suspend mach task in write_process_memory.
server: Use mach_vm_read_overwrite in get_selector_entry.
server: Do not suspend mach task in get_selector_entry.
server: Use mach_vm_read_overwrite in read_process_memory.
https://gitlab.winehq.org/wine/wine/-/merge_requests/4826
For all mach vm operations this removes the task suspend and resume, which are not needed.
This uses `mach_vm_read_overwrite` to read into a caller-specified buffer, saving the `mach_vm_deallocate` call (bringing all read operations down to 1 syscall from 4).
The only alignment restriction on `mach_vm_write` according to the original CMU documentation is that data is
> [pointer to page aligned in array of bytes] An array of data to be written.
(In practice it also works with arbitrary addresses on macOS, but it probably doesn't hurt to follow the original specifications here).
The only other reference that these read/writes should be page-aligned is from the GNU Hurd documentation
> The current implementation requires that address, data and data_count all be page-aligned. Otherwise, KERN_INVALID_ARGUMENT is returned.
which I assume was the reason why this was originally done (plus it sounds to me like they will fix that in the future and 4fe19777 already broke GNU Hurd support anyways, if that was supposed to be working).
Also this includes the missing mach part of 5b1f3b14, which was only applied to the ptrace backend, and together with the `write_process_memory` rework, this gets rid of all fixmes in mach.c
--
v8: server: Do not page align address in write_process_memory.
server: Do not suspend mach task in write_process_memory.
server: Use mach_vm_read_overwrite in get_selector_entry.
server: Do not suspend mach task in get_selector_entry.
server: Use mach_vm_read_overwrite in read_process_memory.
server: Do not suspend mach task in read_process_memory.
https://gitlab.winehq.org/wine/wine/-/merge_requests/4826
--
v2: win32u: Move surface and swapchain wrappers from winevulkan.
win32u: Keep track of redirected host vulkan functions.
winevulkan: Pass wrapper structs to win32u_vkGet(Device|Instance)ProcAddr.
winevulkan: Use the vulkan object as the wrapper tree node.
winevulkan: Get rid of unnecessary *to_handle helpers.
winevulkan: Avoid changing client command buffer pointer.
winevulkan: Fix incorrect client queue pointers.
winevulkan: Introduce a new vulkan_object_init helper.
winevulkan: Use the result to decide if creation failed.
https://gitlab.winehq.org/wine/wine/-/merge_requests/6931
On Sun Dec 1 21:56:35 2024 +0000, Jinoh Kang wrote:
> I'd advise you to test WaitCompletionPacket againat waitable objects
> that use `get_wait_queue_thread()`, including keyed events, mutexes, and
> message queue objects (not exposed via Win32 API, only at win32k level).
Thanks for the review. The problem is that there might be no threads that initiate any wait. Anyway, I will add more tests and get back to you.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/6911#note_89419
I mostly commented the first patch for the tests...
we need I'm afraid more tests to discriminate whether the scan mask is bound to directory handle or to the directory itself
reading MSDN doc [1] suggests that it's likely the former; but I never trust MSDN doc, hence the need to more tests, esp with two handles opened to the same directory and test the mixing of calls
if it's the case, then it means that tweaking the fd cache is wrong (as you in your second patch), and we likely need another layer for storing the mask
[1] https://learn.microsoft.com/en-us/windows-hardware/drivers/ddi/ntifs/nf-nti…
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/6904#note_89400
eric pouech (@epo) commented about dlls/ntdll/tests/directory.c:
> + InitializeObjectAttributes(&attr, &ntdirname, OBJ_CASE_INSENSITIVE, 0, NULL);
> +
> + /* Open a handle for our test directory */
> + status = pNtOpenFile(&dirh, SYNCHRONIZE | FILE_LIST_DIRECTORY, &attr, &io, FILE_SHARE_READ,
> + FILE_SYNCHRONOUS_IO_NONALERT | FILE_OPEN_FOR_BACKUP_INTENT | FILE_DIRECTORY_FILE);
> + ok( status == STATUS_SUCCESS, "failed to open dir '%s', ret 0x%lx, error %ld\n", testdir, status, GetLastError() );
> + if (status != STATUS_SUCCESS)
> + {
> + skip("can't test if we can't open the directory\n");
> + goto done;
> + }
> +
> + /* Verify that updated windows 8 and higher behaviour is supported */
> + if (!winetest_platform_is_wine && !test_NtQueryDirectoryFile_mask(dirh, TRUE, atestfile, TRUE, TRUE))
> + run_updated_tests = FALSE;
> + if (!winetest_platform_is_wine && !test_NtQueryDirectoryFile_mask(dirh, TRUE, notatestfile, FALSE, TRUE))
question: do you need both calls to test_NtQueryDirectoryFile_mask to invalidate a platform?
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/6904#note_89399