Compare commits

...

352 Commits

Author SHA1 Message Date
Michael Stefaniuc 270803bad7 Release 6.0.4.
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2022-04-12 20:36:27 +02:00
Matteo Bruni ce5477ef02 combase: Add RoSetErrorReportingFlags() stub.
Signed-off-by: Matteo Bruni <mbruni@codeweavers.com>
Signed-off-by: Huw Davies <huw@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 430583893e)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2022-03-31 23:44:08 +02:00
Nikolay Sivov 9002eae344 comctl32/listview: Initialize subitem text buffer before drawing each subitem.
Notification handler for LVN_GETDISPINFO is not guaranteed to touch text buffer.
When it doesn't, it can lead to already queried text to be reused for subitems.

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=52583
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 4f1853c576)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2022-03-31 23:31:29 +02:00
Alex Henrie c7ae2d5d22 explorer: Only try to destroy the IShellWindows object if it exists.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=52494
Signed-off-by: Alex Henrie <alexhenrie24@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit adda27cdb8)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2022-03-31 22:32:25 +02:00
Piotr Caban 9c0dfffe3f ucrtbase: Add support for r-value demangling in unDName.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=44202
Signed-off-by: Piotr Caban <piotr@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit a656a8b644)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2022-03-31 21:59:10 +02:00
Alexandre Julliard dadacb9fb8 user.exe: Make sure that the thunk selector doesn't get freed.
Spotted by Fabian Maurer.

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=12732
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 879ccd3357)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2022-03-31 21:41:45 +02:00
Louis Lenders 1a508ae2bf ole32: Add stub for OleConvertIStorageToOLESTREAMEx.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=52298
Signed-off-by: Louis Lenders <xerox.xerox2000x@gmail.com>
Signed-off-by: Esme Povirk <esme@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 18e331fd63)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2022-03-31 00:05:53 +02:00
Ismael Luceno 4517c49ade server: Fix missing include for uid_t.
Explicitly include <sys/types.h> to make uid_t available to users of
server/security.h.

This is a problem on musl, and possibly other non-glibc systems.

Signed-off-by: Ismael Luceno <ismael@iodev.co.uk>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit c35df50c30)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2022-03-30 23:43:53 +02:00
Louis Lenders 188c86e5f3 wbemprox: Add some properties of SoftwareLicensingProduct class.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=51163
Signed-off-by: Louis Lenders <xerox.xerox2000x@gmail.com>
Signed-off-by: Hans Leidekker <hans@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit a9826b48e4)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2022-03-30 23:33:50 +02:00
Gabriel Ivăncescu 2aa94c0beb ddraw: Use WINED3D_SWAPCHAIN_NO_WINDOW_CHANGES only if window is not in foreground.
Fixes a regression introduced by f90d607c67.

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=50370
Signed-off-by: Gabriel Ivăncescu <gabrielopcode@gmail.com>
Signed-off-by: Stefan Dösinger <stefan@codeweavers.com>
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit a384da8865)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2022-03-30 23:28:21 +02:00
Nikolay Sivov 461abf501a include: Add WbemErrorEnum error codes.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=52378
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 9dd1654c84)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2022-03-16 23:36:26 +01:00
Olivier F. R. Dierick 134789d517 taskschd: Set count to zero in regtasks_get_Count stub.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=52349
Signed-off-by: Olivier F. R. Dierick <o.dierick@piezo-forte.be>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit bbd9b9bfee)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2022-03-16 23:34:51 +01:00
Huw Davies 149284628d user32: Set WM_CONTEXTMENU's wparam to the child window's handle.
DefWindowProc() does not propagate the wparam; it updates it instead.
Spotted by YAL.

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=52327
Signed-off-by: Huw Davies <huw@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 3af8415ca9)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2022-03-16 23:31:28 +01:00
Nikolay Sivov 3ce2336788 d3d11: Always initialize out view pointer in CreateRenderTargetView().
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=51195
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit df8ef3a54f)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2022-03-16 23:28:16 +01:00
Jacek Konieczny c03499e8ec winealsa.drv: Use separate port for each output device.
This fixes use of multiple MIDI outputs while keeping the flexibility of
proper ALSA sequencer port subscriptions.

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=52220
Signed-off-by: Jacek Konieczny <jajcus@jajcus.net>
Signed-off-by: Andrew Eikum <aeikum@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 240f2f3963)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2022-03-16 23:02:12 +01:00
Jacek Caban 2b48e780fe ntdll: Fix handling \\.\CON path in RtlDosPathNameToNtPathName.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=32183
Signed-off-by: Jacek Caban <jacek@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 32b81bfaff)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2022-03-16 22:58:43 +01:00
Zebediah Figura bd444692a9 ntdll/tests: Add more tests for RtlDosPathNameToNtPathName_U().
Signed-off-by: Zebediah Figura <z.figura12@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit f2f69a8799)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2022-03-16 22:58:30 +01:00
Bernhard Übelacker 749d5efa7e inetmib1: Fix endianess issue with dwLocalAddr and dwLocalPort.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=52224
Signed-off-by: Bernhard Übelacker <bernhardu@mailbox.org>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 9145b551b2)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2022-03-16 22:50:22 +01:00
Akihiro Sagawa 4642de1d6c quartz: Fix a race in IMediaFilter::Pause().
Before finishing async run, graph->stream_start isn't stable.
This will cause graph->current_pos to be out of playback duration.
Since graph->current_pos is out of the range, the playback will
be stopped.

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=52200
Signed-off-by: Akihiro Sagawa <sagawa.aki@gmail.com>
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit bbdb658402)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2022-03-16 22:48:56 +01:00
Eric Pouech 3bff9ccfa4 cmd: Don't crash on 'if exist' without parameter.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=51598
Signed-off-by: Eric Pouech <eric.pouech@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 535da77552)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2022-03-16 22:47:28 +01:00
Connor McAdams 19de448df6 winex11.drv: Add mutable pixel format awareness.
Add the ability to check if the pixel format on the current window was
previously set by wglSetPixelFormatWine(), and if was, allow the
application to change it with a regular wglSetPixelFormat call.

Signed-off-by: Connor McAdams <cmcadams@codeweavers.com>
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 6d04e6c3a9)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2022-03-16 22:45:20 +01:00
Bernhard Übelacker 6766fb687f hhctrl.ocx: Handle only the number of bytes given in html_fragment_len.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=39699
Signed-off-by: Bernhard Übelacker <bernhardu@mailbox.org>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit e3b2863148)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2022-03-16 22:40:28 +01:00
Alexandre Julliard 2e51da6f16 krnl386.exe: Page-align the GlobalAlloc() size when the selector limit is in pages.
GlobalSize() uses the selector limit and that needs to match the
allocated size.

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=52082
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 1c5e4d066f)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2022-03-16 22:33:00 +01:00
Rémi Bernon 6d98de6889 ntdll: Use the unrolled memset from msvcrt.
Although less frequently used, heap allocations are zeroed out with
ntdll memset and they don't benefit from the msvcrt memset optimisation.

Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit a602bdd326)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2022-03-15 23:25:50 +01:00
Hugh McMaster 6e7f753c15 conhost: Process Ctrl-M key input.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=50526
Signed-off-by: Hugh McMaster <hugh.mcmaster@outlook.com>
Signed-off-by: Jacek Caban <jacek@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 12cf3459b5)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2022-03-15 23:23:53 +01:00
Christian Costa 19acdd0c35 d3dx9: Also check for a valid alpha channel for TGA images.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=48631
Signed-off-by: Matteo Bruni <mbruni@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 46f08b169b)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2022-03-15 23:22:29 +01:00
Louis Lenders ce23d7aa44 wsdapi: Add stub for WSDCreateDiscoveryProvider.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=52173
Signed-off-by: Louis Lenders <xerox.xerox2000x@gmail.com>
Signed-off-by: Owen Rudge <orudge@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 03f0659805)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2022-03-15 23:18:19 +01:00
Alexandre Julliard 795035c0ec configure: Fix the netapi check.
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 13a3340bc2)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2022-03-15 23:16:07 +01:00
Gerald Pfeifer 71dc3ca16e configure: Diagnose if NetAPI is not present.
For most other configure options we are warning when some dependency
is not present, in particular when it's been explicitly requested.
Also do this for Samba NetAPI now.

Signed-off-by: Gerald Pfeifer <gerald@pfeifer.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 07c9dd9bdf)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2022-03-15 23:15:40 +01:00
Zhiyi Zhang d0b9ab2b91 comctl32/button: Support image list margin for buttons with BS_CENTER or BS_VCENTER.
WinSCP uses image list margin to adjust image position on a button when theming is on.

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=52076
Signed-off-by: Zhiyi Zhang <zzhang@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit feb0b73a3c)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2022-03-15 23:09:34 +01:00
Nick Fox c133264b69 ntdll: Fix LdrGetDllPath with LOAD_WITH_ALTERED_SEARCH_PATH without a path.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=26350
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=51821
Signed-off-by: Nick Fox <nick@foxsec.net>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit ef26f7bd5c)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2022-03-15 23:06:59 +01:00
Nick Fox 9288f9e22a kernel32: Add tests for LdrGetDllPath with LOAD_WITH_ALTERED_SEARCH_PATH.
Signed-off-by: Nick Fox <nick@foxsec.net>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 85723b9208)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2022-03-15 23:06:44 +01:00
Piotr Caban c2efc7ed8a vcruntime140_1: Add support for exception separated code segments.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=51396
Signed-off-by: Piotr Caban <piotr@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 9ccd84b945)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2022-03-15 23:02:26 +01:00
Derek Lesho 6dfcf590e1 kernelbase: Fix parameter order of FindResourceExW call for non-localized path.
Signed-off-by: Derek Lesho <dlesho@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 472763c523)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2022-03-15 22:59:51 +01:00
Alex Henrie 05bcb3cde0 krnl386: Add GetLPErrMode stub.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=52102
Signed-off-by: Alex Henrie <alexhenrie24@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 819d049f12)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2022-03-15 22:42:45 +01:00
Piotr Caban 4c16e0f20b msvcrt: Don't use GetDaylightFlag function in _ftime64.
The function is not available on current Windows releases.

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=51959
Signed-off-by: Piotr Caban <piotr@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 00824a94f0)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2022-03-15 22:31:51 +01:00
Thomas Faber d1833f8ea6 msvcrt/tests: Show that spawn does not require locking of fds.
Signed-off-by: Thomas Faber <thomas.faber@reactos.org>
Signed-off-by: Piotr Caban <piotr@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit be0684dad5)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2022-03-15 22:23:56 +01:00
Doug Lyons 5be7fa7879 msvcrt: Do not acquire fd lock in msvcrt_create_io_inherit_block.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=51647
Signed-off-by: Doug Lyons <douglyons@douglyons.com>
Signed-off-by: Thomas Faber <thomas.faber@reactos.org>
Signed-off-by: Piotr Caban <piotr@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 5a514d3f45)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2022-03-15 22:23:00 +01:00
Piotr Caban b45ad23033 oleacc: Add AccessibleObjectFromPoint implementation.
Based on a patch by Alex Henrie.

Signed-off-by: Piotr Caban <piotr@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 92f4f4a4c1)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2022-03-15 22:17:02 +01:00
Connor McAdams 4ed070302f oleacc: Implement AccessibleObjectFromEvent.
Signed-off-by: Connor McAdams <cmcadams@codeweavers.com>
Signed-off-by: Piotr Caban <piotr@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 602a36a253)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2022-03-15 22:13:22 +01:00
Louis Lenders ef27e2b503 combase: Add stub for RoOriginateError.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=51983
Signed-off-by: Louis Lenders <xerox.xerox2000x@gmail.com>
Signed-off-by: Huw Davies <huw@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 6b59b26fff)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2022-02-26 00:22:49 +01:00
Piotr Caban fb168121b2 msvcp100: Export ctype<char>::table function.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=51978
Signed-off-by: Piotr Caban <piotr@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 0c42b9e111)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2022-02-26 00:20:39 +01:00
Loïc Rebmeister 0b26e88937 loader: Create performance\winsat\datastore on prefix creation.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=51968
Signed-off-by: Loïc Rebmeister <fox2code@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 2173d2dcc8)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2022-02-26 00:17:17 +01:00
Louis Lenders b48ce9212e wbemprox: Add empty DNSDomain to Win32_NetworkAdapterConfiguration.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=51938
Signed-off-by: Louis Lenders <xerox.xerox2000x@gmail.com>
Signed-off-by: Hans Leidekker <hans@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit d68ea16266)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2022-02-26 00:09:20 +01:00
Bernhard Kölbl 4bde9d09a3 oleaut32: Allow the registration of 64bit typelibs from a 32bit context.
Windows allows the registration of 64bit typelibs from 32bit programs
even on a pure Win32 install.

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=51864
Signed-off-by: Bernhard Kölbl <besentv@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit c159f5438a)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2022-02-26 00:07:31 +01:00
Eric Pouech b00bd9b9ee winedbg: Fix command line arguments parsing.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=42030
Signed-off-by: Eric Pouech <eric.pouech@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 9808c1d8a3)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2022-02-25 23:51:50 +01:00
Gabriel Ivăncescu ad7c5e9ced user32: Redraw children when the combo box is dropped down.
Some applications subclass the combo box and handle WM_ERASEBKGND themselves,
without using WS_CLIPCHILDREN. This causes them to erase over the editbox
child, so it requires a refresh as well.

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=22260
Signed-off-by: Gabriel Ivăncescu <gabrielopcode@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 0d4392077e)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2022-02-25 23:45:17 +01:00
Gabriel Ivăncescu 9edeb764da comctl32: Redraw children when the combo box is dropped down.
Some applications subclass the combo box and handle WM_ERASEBKGND themselves,
without using WS_CLIPCHILDREN. This causes them to erase over the editbox
child, so it requires a refresh as well.

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=22260
Signed-off-by: Gabriel Ivăncescu <gabrielopcode@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit c82d6ee4a7)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2022-02-25 23:45:04 +01:00
Robert Wilhelm d4024e428b vbscript: Support VT_BSTR in stack_pop_bool.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=51911
Signed-off-by: Robert Wilhelm <robert.wilhelm@gmx.net>
Signed-off-by: Jacek Caban <jacek@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit b9e38a41ea)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2022-02-25 20:39:20 +01:00
Michael Stefaniuc f560fad07d Release 6.0.3.
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2022-02-25 14:28:42 +01:00
Alexandre Julliard 8d00191097 wininet/tests: Mark a failing test as todo.
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 13966ac997)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2022-02-06 14:56:33 +01:00
Jefferson Carpenter 98a3f0376b msxml3/saxreader: Handle null url in parseURL().
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=51267
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit b7386cec71)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2022-02-06 14:56:33 +01:00
Hans Leidekker b296253f79 wbemprox: Add __DERIVATION to the list of system properties.
Signed-off-by: Hans Leidekker <hans@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 8b6565a61f)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2022-02-06 14:56:33 +01:00
Hans Leidekker b5eebf644a wbemprox: Return an empty array for __DERIVATION.
Based on a patch by Louis Lenders.

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=51871
Signed-off-by: Hans Leidekker <hans@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 2243229043)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2022-02-06 14:56:33 +01:00
Piotr Caban 56b6abd5ea ucrtbase: Fix fopen x mode test failures.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=51894
Signed-off-by: Piotr Caban <piotr@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 6584733327)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2022-02-06 14:56:33 +01:00
Ted Lyngmo b690f67231 ucrtbase: Add support for x mode in fopen.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=51846
Signed-off-by: Ted Lyngmo <ted@lyncon.se>
Signed-off-by: Piotr Caban <piotr@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 51b9f4cd2b)
Conflicts:
	dlls/ucrtbase/tests/misc.c
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2022-02-06 14:56:33 +01:00
Piotr Caban efdd2b8a57 msvcrt: Support z length modifier in scanf.
Signed-off-by: Piotr Caban <piotr@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 5d5f11c002)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2022-02-06 14:56:33 +01:00
Alistair Leslie-Hughes b56d5b9a47 wininet: Allow up to 4K for response headers.
LevelHead includes a Header value that is > 3K in length which
causes a crash after linking your account.

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=47505
Signed-off-by: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
Signed-off-by: Hans Leidekker <hans@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 42920ad653)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2022-02-06 14:56:33 +01:00
Alistair Leslie-Hughes a6af1e31dd wininet: Reset context length for http status 304.
Signed-off-by: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
Signed-off-by: Hans Leidekker <hans@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 8825ed72d7)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2022-02-06 14:56:33 +01:00
Fabian Maurer 3bf9bae9bf msi: Set dialog as parent in subsequent dialog.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=51576
Signed-off-by: Fabian Maurer <dark.shadow4@web.de>
Signed-off-by: Hans Leidekker <hans@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 4b88e29052)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2022-02-06 14:56:33 +01:00
Robert Wilhelm e08b8f0f86 vbscript: Support date and time literals.
Date literals, which are enclosed in number signs in vbscript,
will be lexed, pushed throught parser and compiler and
finally converted to VT_Date Variant in interpreter.

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=51503
Signed-off-by: Robert Wilhelm <robert.wilhelm@gmx.net>
Signed-off-by: Jacek Caban <jacek@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit bf5f7a7b7b)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2022-02-06 14:56:33 +01:00
Hans Leidekker fe6c5b9305 winhttp/tests: Add redirect tests.
Signed-off-by: Hans Leidekker <hans@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit ca5850d920)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2022-02-06 14:56:33 +01:00
Hans Leidekker 1d57f812c0 winhttp: Don't remove content-type/length headers in handle_redirect().
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=50272
Signed-off-by: Hans Leidekker <hans@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit badc64b42c)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2022-02-06 14:56:33 +01:00
Hans Leidekker 73e998ab02 winhttp: Fix return value for relative redirects.
Signed-off-by: Hans Leidekker <hans@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit ec46607ee0)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2022-02-06 14:56:33 +01:00
Hans Leidekker ddd57141e1 winhttp: Call drain_content() before clear_response_headers().
Signed-off-by: Hans Leidekker <hans@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 5da1d59241)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2022-02-06 14:56:33 +01:00
Hans Leidekker 90661a5d93 winhttp: Call read_data() at least once in drain_content().
This ensures that response headers are processed even if there's no data to read.

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=50244
Signed-off-by: Hans Leidekker <hans@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 239964ce86)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2022-02-06 14:56:33 +01:00
Hans Leidekker 5e855f33f5 winhttp: Read any data left in the request buffer for websocket connections.
Fixes the case where a websocket server sends an unsolicited frame with the upgrade response.

Signed-off-by: Hans Leidekker <hans@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit f738af16fb)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2022-02-06 14:56:33 +01:00
Hans Leidekker af1b70b7bb winhttp: Pass a socket pointer to send_bytes() and receive_bytes().
Signed-off-by: Hans Leidekker <hans@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 54742a9001)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2022-02-06 14:56:33 +01:00
Bernhard Übelacker d2392af664 attrib: Avoid crash when called without parameter.
If attrib is called without any parameter the variable originalname
is used uninitialized.

Signed-off-by: Bernhard Übelacker <bernhardu@mailbox.org>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 5ec1524326)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-11-24 00:34:41 +01:00
Jan Sikorski cb8fde193b winemac.drv: Omit WM_ENTER/EXITSIZEMOVE on non-interactive window changes.
The motivating example is when a newly created window gets moved off the system
menu bar. A program might not be prepared to handle these messages yet.

Fixes a crash in Lord of the Rings online.

Signed-off-by: Jan Sikorski <jsikorski@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 0d22e8455a)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-11-24 00:33:47 +01:00
Francois Gouget 7a9898344d gdiplus: GdipGetFamilyName() should not crash when given a NULL name.
It used to crash on Windows XP and Vista but does not since Windows 7.

Signed-off-by: Francois Gouget <fgouget@codeweavers.com>
Signed-off-by: Esme Povirk <esme@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit ad663360fa)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-11-24 00:28:23 +01:00
Giovanni Mascellani 8506b2ae18 kernelbase: Fix an incorrect allocation size.
Variable nt_privs has type TOKEN_PRIVILEGES*, not TOKEN_GROUPS*.

This fixes a crash in the Cyberpunk 2077 launcher.

Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 1ca54db1bf)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-11-24 00:26:02 +01:00
Paul Gofman f9f4e8f692 kernelbase: Fix copy size for delete_privs in CreateRestrictedToken().
Fixes 3D Aim Trainer crash on start.

Signed-off-by: Paul Gofman <pgofman@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit d63e0b7084)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-11-24 00:25:22 +01:00
Zebediah Figura 83923e43d5 server: Return STATUS_KEY_DELETED when trying to retrieve the full name of a deleted key.
This fixes a server crash that can be triggered by deleting a key and then
trying to retrieve its name. In that case key->parent is NULL.

Signed-off-by: Zebediah Figura <z.figura12@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 089b2528c2)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-11-24 00:23:43 +01:00
Alexandre Julliard a59337fb7e ntdll: Avoid crash on shutting down partially initialized thread.
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 364099f528)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-11-24 00:22:30 +01:00
Jacek Caban d1d979bf91 include: Use __builtin_offsetof on Clang.
Fixes a number of warning on MSVC target.

Signed-off-by: Jacek Caban <jacek@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit de9982f069)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-11-24 00:00:34 +01:00
Zebediah Figura 2a51b72ec3 quartz: Do not print an incorrect state warning in MediaFilter_GetState() if a filter has been run asynchronously.
This is a valid case in which the filter state may or may not match the graph
state.

Signed-off-by: Zebediah Figura <z.figura12@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 7f1623bc62)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-11-23 23:48:36 +01:00
Gijs Vermeulen 08a3472c54 ntdll: Avoid declaration-after-statement warning.
Signed-off-by: Gijs Vermeulen <gijsvrm@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 836ec1d7ed)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-11-23 23:43:48 +01:00
Andrew Eikum dd412ae81c comctl32: Avoid gcc 11 maybe-uninitialized warning.
dlls/comctl32/monthcal.c:1783:19: warning: ‘htinfo.uHit’ may be used uninitialized [-Wmaybe-uninitialized]

Signed-off-by: Andrew Eikum <aeikum@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit ce8f724740)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-11-23 23:40:57 +01:00
Gerald Pfeifer b363adda05 ntdll: Only use sysinfo function when present.
On some systems <sys/sysinfo.h> may be present while the sysinfo
function may not, or at least not as part of standard libraries,
so check whether the function is actually available before using
it.

This fixes builds on FreeBSD with the devel/libsysinfo present.

Signed-off-by: Gerald Pfeifer <gerald@pfeifer.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 59da79021a)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-11-23 00:09:17 +01:00
Dmitry Timoshkov 97bbaf5285 vcruntime140_1: Fix compilation with clang.
clang -c -o dlls/vcruntime140_1/except_x86_64.cross.o ../wine.src/dlls/vcruntime140_1/except_x86_64.c -Idlls/vcruntime140_1 \
  -I../wine.src/dlls/vcruntime140_1 -Iinclude -I../wine.src/include -I../wine.src/include/msvcrt \
  -D__WINESRC__ -D_UCRT -DWINE_CROSS_PE -Wall -target x86_64-windows -fno-strict-aliasing \
  -Wdeclaration-after-statement -Wempty-body -Wignored-qualifiers -Winit-self -Wno-pragma-pack \
  -Wstrict-prototypes -Wtype-limits -Wvla -Wwrite-strings -Wpointer-arith -Wabsolute-value \
  -Wno-format -Wnonnull -mcx16 -gdwarf-2 -gstrict-dwarf -g -O2
In file included from ../wine.src/dlls/vcruntime140_1/except_x86_64.c:25:
In file included from ../wine.src/include/wine/exception.h:25:
../wine.src/include/winternl.h:4239:82: error: unknown type name 'va_list'
NTSYSAPI NTSTATUS  WINAPI RtlFormatMessage(LPCWSTR,ULONG,BOOLEAN,BOOLEAN,BOOLEAN,__ms_va_list *,LPWSTR,ULONG,ULONG*);

Signed-off-by: Dmitry Timoshkov <dmitry@baikal.ru>
Signed-off-by: Piotr Caban <piotr@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit b0a61ee8b0)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-11-22 23:36:26 +01:00
Andrew Boyarshin 3c83603c8c include: Fix IRequestDictionary IID.
IRequestDictionary had the wrong UUID specified (IResponse one).
Found by using MIDL instead of WIDL to compile Wine headers:
duplicated IID caused compilation error in MIDL.

Signed-off-by: Andrew Boyarshin <andrew.boyarshin@gmail.com>
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 32ec7d7b94)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-11-22 23:35:03 +01:00
Paul Gofman 7ad7ceb1a2 wined3d: Add GPU information for AMD VANGOGH.
Signed-off-by: Paul Gofman <pgofman@codeweavers.com>
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 6b724c3dd8)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-11-22 23:33:45 +01:00
Fabian Maurer d2437cbdce mpr: Fix copy paste error when converting hex char to int.
Spotted by Robert Naumann.

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=51728
Signed-off-by: Fabian Maurer <dark.shadow4@web.de>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 63737942a0)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-11-22 23:25:22 +01:00
Eric Pouech 26c739a4fe winedbg: Fix crash when no process attached in 'info wnd' command.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=49625
Signed-off-by: Eric Pouech <eric.pouech@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 5d8bad570d)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-11-22 23:11:51 +01:00
Zhiyi Zhang f0143c1bc9 uxtheme: Get and set system metrics in 96 DPI.
Fix a bug that font size may be smaller than normal after toggling theming.

For example, the following steps will change the system metrics to incorrect values.
1. Open winecfg, and set DPI to 192. Do not restart winecfg.
2. Change the theme to Light. UXTHEME_BackupSystemMetrics() backs up system metrics in 96 DPI
because the current DPI is still 96.
3. Restart winecfg and turn off theming. UXTHEME_RestoreSystemMetrics() restores system metrics in
192 DPI because the current DPI is 192. So system metrics will be scaled to 1/2 of the original size.

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=37592
Signed-off-by: Zhiyi Zhang <zzhang@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 7290db3e7a)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-11-22 23:09:53 +01:00
Alistair Leslie-Hughes db98059c71 ntoskrnl.exe: Implement PsGetCurrentProcessSessionId.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=36887
Signed-off-by: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 5aec01a7af)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-11-22 23:02:18 +01:00
Fabian Maurer f776c46642 configure: Improve resolv lib test for glibc 2.34.
res_init and res_query don't need lresolv on glibc 2.34.
Added another test for ns_initparse and friends.

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=51635
Signed-off-by: Fabian Maurer <dark.shadow4@web.de>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit a3bbf51377)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-11-22 22:42:36 +01:00
Zhiyi Zhang 493a7f4daa user32: Report a fake monitor when running on an invisible window station.
The visible window station check was accidentally deleted in 95be042.

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=51590
Signed-off-by: Zhiyi Zhang <zzhang@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit f8ce819ab5)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-11-22 22:40:18 +01:00
Zhiyi Zhang 7398ed2977 uxtheme: Use TransparentBlt() for bitmaps with all alpha values being 0xff.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=51553
Signed-off-by: Zhiyi Zhang <zzhang@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 96b7a8a317)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-11-22 22:34:25 +01:00
Nikolay Sivov f1589ee006 d3dx9/effect: Reset output handle for next after last technique in FindNextValidTechnique().
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
Signed-off-by: Matteo Bruni <mbruni@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 60a3e01062)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-11-22 22:21:05 +01:00
Alistair Leslie-Hughes a941df5c12 dpnet: Implement IDirectPlay8Server EnumServiceProviders.
Signed-off-by: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit d4565f1541)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-11-22 22:19:12 +01:00
Alistair Leslie-Hughes 675908b29c services: Check correct permission for QueryServiceConfig2W.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=50412
Signed-off-by: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 4a18232e45)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-11-22 22:15:02 +01:00
Akihiro Sagawa 904ad1e120 user32/listbox: Fix redraw after LB_SETCOUNT message.
3ef790b968 accidentally dropped updating
LBS_DISPLAYCHANGED flag that had been done in LISTBOX_InvalidateItems()
if the count value was changed.
In fact, the newly added test shows LB_SETCOUNT message always causes
WM_DRAWITEM requests regardless of the count value.

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=51591
Signed-off-by: Akihiro Sagawa <sagawa.aki@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 247185ba78)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-10-30 18:05:13 +02:00
Akihiro Sagawa b823fa1a3a user32/tests: Test pending redraw state with owner-drawn list box.
Signed-off-by: Akihiro Sagawa <sagawa.aki@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit a70ed810d5)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-10-30 18:05:13 +02:00
Austin English 7409b10902 virtdisk: Add DetachVirtualDisk stub.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=51535
Signed-off-by: Austin English <austinenglish@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit ccbb0eef7b)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-10-30 18:05:13 +02:00
Francois Gouget bc3524e8e5 oleaut32: Add support for longer currency symbols.
Signed-off-by: Francois Gouget <fgouget@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit fc5e603cd3)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-10-30 18:05:13 +02:00
Francois Gouget e3aa6390dc oleaut32: Fix VarParseNumFromStr()'s handling of currency thousands separators.
They are have no default, are not allowed before the first digit, are
unaffected by the presence / absence of a currency symbol, can be mixed
with regular digit separators, are incompatible with hexadecimal and
octal numbers (as are regular digit separators), and mask trailing
spaces.
Also they don't match regular spaces when set to a non-breaking space.

Signed-off-by: Francois Gouget <fgouget@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 9e4524ffb0)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-10-30 18:05:13 +02:00
Francois Gouget 617015e11a oleaut32: Remove caching from VARIANT_GetLocalisedNumberChars().
GetLocaleInfoW() already caches the registry information and is fast
enough. This also avoids using out-of-date information after a
SetLocaleInfoW() call.

Signed-off-by: Francois Gouget <fgouget@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit d8656b4767)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-10-30 18:05:13 +02:00
Francois Gouget f82b97c778 oleaut32/tests: Add more VarParseNumFromStr() hexadecimal/octal tests.
Signed-off-by: Francois Gouget <fgouget@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit a74e2871ab)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-10-30 18:05:13 +02:00
Francois Gouget 93971ce383 oleaut32/tests: Test VarParseNumFromStr()'s handling of LOCALE_SMON*.
Signed-off-by: Francois Gouget <fgouget@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit fd0a55ce46)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-10-30 18:05:13 +02:00
Francois Gouget c8dc029d41 oleaut32: Fix VarParseNumFromStr()'s support for trailing thousands separator spaces.
If a trailing character is a thousands separator, VarParseNumFromStr()
only processes it if NUMPRS_THOUSANDS was specified; even if that
character is also a space and NUMPRS_TRAILING_WHITE was specified.

Signed-off-by: Francois Gouget <fgouget@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit c2aeb915f4)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-10-30 18:05:13 +02:00
Francois Gouget 014c114a28 oleaut32: VarParseNumFromStr() does not allow leading thousands separators.
Signed-off-by: Francois Gouget <fgouget@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit de70f7289e)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-10-30 18:05:13 +02:00
Francois Gouget 806b738a11 oleaut32/tests: Fix the Swiss franc and Moroccan dirham tests.
Windows <= 8.1 uses an obsolete currency symbol for the Swiss Franc and
Windows 8.1 incorrectly doubled the right-to-left mark in the Moroccan
dirham.

Signed-off-by: Francois Gouget <fgouget@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 5c86b4d201)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-10-30 18:05:13 +02:00
Francois Gouget 3b17256786 oleaut32: Fix a trace containing a null character.
printf("%c Hello\n", 0) works but not TRACE("%c Hello\n", 0) because the
string is formatted before printing.
Work around the issue with wine_dbgstr_w().

Signed-off-by: Francois Gouget <fgouget@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 6763ed84cf)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-10-30 18:05:13 +02:00
Damjan Jovanovic 2240ac5e27 msxml3: Use XSD regex quantifier format S{0, m} instead of S{, m}.
S{,m} is invalid in libxml2 2.9.11 and later, and was never valid
in the XSD specification or any XML implementation tested. We
should only use S{0,m} for our internal XSD schema used in XDR validation.

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=51358
Signed-off-by: Damjan Jovanovic <damjan.jov@gmail.com>
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 53f3cad7fb)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-10-30 18:05:13 +02:00
Damjan Jovanovic 9ece53ed3a msxml3/tests: Add some regex tests.
Signed-off-by: Damjan Jovanovic <damjan.jov@gmail.com>
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit b5f3b8d07f)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-10-30 18:05:13 +02:00
Alex Henrie 60284543da rasapi32: Add RasSetCredentialsA/W stubs.
Based on a patch by Oleg Dubinskiy.

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=49726
Signed-off-by: Alex Henrie <alexhenrie24@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 84d85a3d72)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-10-30 18:05:13 +02:00
Oleg Dubinskiy 10646cd4e0 include: Add RASCREDENTIALSA/W structures.
Signed-off-by: Oleg Dubinskiy <oleg.dubinskij2013@yandex.ua>
Signed-off-by: Alex Henrie <alexhenrie24@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 2d8fa6b4d1)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-10-30 18:05:13 +02:00
Alex Henrie dfe1fa9abc ntoskrnl: Add MmGetPhysicalAddress semi-stub.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=47047
Signed-off-by: Alex Henrie <alexhenrie24@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit c5c9c58974)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-10-30 18:05:13 +02:00
Zhiyi Zhang 72a7c1991c uxtheme: Fix incorrect part IDs in button class map.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=51506
Signed-off-by: Zhiyi Zhang <zzhang@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit ec82a0ebe6)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-10-30 18:05:13 +02:00
Akihiro Sagawa c55a6b6407 midimap: Introduce XP form and prefer it.
Since XP form doesn't support channel mappings, old form is
remained for compatiblity.

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=51505
Signed-off-by: Akihiro Sagawa <sagawa.aki@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit dbf3b3b6bf)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-10-30 18:05:13 +02:00
Jacek Caban 8cc412b90c advapi32: Link to msvcrt.dll.
Some applications expect msvcrt.dll to be pulled by system DLLs. On
Windows, loading advapi32 causes msvcrt.dll to be loaded.

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=51465
Signed-off-by: Jacek Caban <jacek@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 2b3a300cbf)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-10-30 18:05:13 +02:00
Francois Gouget bb652772af oleaut32: Setting sThousand to a non-breaking space also matches regular spaces.
As the test_VarParseNumFromStrMisc() tests show the converse is not
true.
Note also that the " 1 000" test was failing as expected because in
the French locale Wine was not recognizing regular spaces as thousands
separators. Now it does and Wine incorrectly allows them before the
first digit, just like it does for the English tests.

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=51450
Signed-off-by: Francois Gouget <fgouget@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit c50dff867d)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-10-30 18:05:13 +02:00
Francois Gouget bf217a1a47 oleaut32: VarParseNumFromStr() accepts trailing currency symbols.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=51450
Signed-off-by: Francois Gouget <fgouget@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit e02a7e579c)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-10-30 18:05:13 +02:00
Francois Gouget e4ea517b6c oleaut32: Fix VarParseNumFromStr()'s support for two-character currencies.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=51452
Signed-off-by: Francois Gouget <fgouget@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 4e34e7513d)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-10-30 18:05:13 +02:00
Francois Gouget dffceba799 oleaut32/tests: Add more VarParseNumFromStr() tests.
Check how it handles currency signs and spaces before and after the
digits.
Check the combination of thousands separators, spaces and commas. Check
handling of regular vs. non-breaking spaces since the latter are often
used in some locales.
And check what happens in the French locale where spaces and thousands
separators are identical and the currency sign comes after the digits
and, quite often, a space.
Check handling of multi-character currency symbols.

Signed-off-by: Francois Gouget <fgouget@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 54ee0e9bfd)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-10-30 18:05:13 +02:00
Francois Gouget 76d30e2d51 oleaut32/tests: Allow testing VarParseNumFromStr() using Unicode strings.
Signed-off-by: Francois Gouget <fgouget@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 627988565b)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-10-30 18:05:13 +02:00
Piotr Caban 2253901ccf msvcrt: Update round_limb on first limb length change in printf.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=51435
Signed-off-by: Piotr Caban <piotr@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 2ffcf44021)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-10-30 18:05:13 +02:00
Jactry Zeng 89926751ff gdi32: Fix a typo in unix_face_create().
This also fixes test failures in test_lang_names() when on Japanese system.

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=51382
Signed-off-by: Jactry Zeng <jzeng@codeweavers.com>
Signed-off-by: Huw Davies <huw@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit aee7d560ae)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-10-30 18:05:13 +02:00
Zhiyi Zhang 46390286f0 uxtheme: Send WM_THEMECHANGED instead of posting it in SetWindowTheme().
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=51348
Signed-off-by: Zhiyi Zhang <zzhang@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit fe257dde58)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-10-30 18:05:13 +02:00
Zhiyi Zhang 6b501df752 uxtheme/tests: Test that SetWindowTheme() should send WM_THEMECHANGED instead of posting it.
Signed-off-by: Zhiyi Zhang <zzhang@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 064dad2342)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-10-30 18:05:13 +02:00
Henri Verbeet b96d75db4d dxgi: Implement d3d11_swapchain_GetLastPresentCount().
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 6f674ef6f1)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-10-30 18:05:13 +02:00
Henri Verbeet f8d613fdc5 dxgi/tests: Add a test for swapchain present counts.
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 7eadbae52c)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-10-30 18:05:13 +02:00
Francois Gouget 4b3ca9abee ntdll: Fix the spelling of a comment.
Signed-off-by: Francois Gouget <fgouget@free.fr>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 167c7a524f)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-10-30 18:05:13 +02:00
Akihiro Sagawa d3ffdb1740 ntdll: Fix null pointer dereference in RtlDosPathNameToNtPathName_U_WithStatus.
Signed-off-by: Akihiro Sagawa <sagawa.aki@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit c94ac2e061)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-10-30 18:05:13 +02:00
Akihiro Sagawa a917d758b3 ntdll: Validate directory path when the path name ends with a dos device name.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=51291
Signed-off-by: Akihiro Sagawa <sagawa.aki@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 0acd98f135)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-10-27 21:40:02 +02:00
Akihiro Sagawa b301e0285e ntdll/tests: Expand path name tests with path + device name.
Signed-off-by: Akihiro Sagawa <sagawa.aki@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 64c4582a40)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-10-27 21:40:02 +02:00
Brendan McGrath 9de7231fea kernelbase: Don't pass StdHandles with CREATE_NEW_CONSOLE.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=51264
Signed-off-by: Brendan McGrath <brendan@redmandi.com>
Signed-off-by: Jacek Caban <jacek@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 7539dd607b)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-10-27 21:40:02 +02:00
Andrey Gusev 7a6b76f28a msvcr120: Add version.rc file.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=51244
Signed-off-by: Andrey Gusev <andrey.goosev@gmail.com>
Signed-off-by: Piotr Caban <piotr@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 7722915395)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-10-27 21:40:02 +02:00
Roman Pišl 3ba8d6ea05 ntdll: Don't pretend that the whole address space is reserved on non-i386.
This is analogous to 61dcca5dbf.

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=50735
Signed-off-by: Roman Pišl <rpisl@seznam.cz>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 0ec555e58e)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-10-27 21:40:02 +02:00
Damjan Jovanovic 66fe6841b8 msxml3: Return S_FALSE from IXMLDOMNamedNodeMap::nextNode() when there are no attributes.
Currently Wine return S_FALSE when IXMLDOMNamedNodeMap::nextNode()
has run out of attributes to return, but when an XML node has no
attributes at all, it returns S_OK despite setting the nextNode
output parameter to NULL, causing the caller to crash when it
accesses this pointer. Return S_FALSE in this case instead.

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=50603
Signed-off-by: Damjan Jovanovic <damjan.jov@gmail.com>
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 06cd8d3d2e)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-10-27 21:40:02 +02:00
Zhiyi Zhang c7436090e4 uxtheme: Fall back to default class if the specified subclass is not found.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=50113
Signed-off-by: Zhiyi Zhang <zzhang@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 3e9fbda43c)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-10-27 21:40:02 +02:00
Zhiyi Zhang e049b275c5 uxtheme/tests: Test SetWindowTheme() with a non-existent subclass.
Signed-off-by: Zhiyi Zhang <zzhang@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 59f3758ecb)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-10-27 21:40:02 +02:00
Florian Eder bc6346ba85 cmd: Do not change errorlevel when setting environment variables.
Changes CMD to set its errorlevel to 0 only when the value of an environment variable
is set in in non-interactive / batch mode, retains the previous value otherwise.

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=47791
Signed-off-by: Florian Eder <others.meder@gmail.com>
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 617d14bc12)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-10-27 21:40:02 +02:00
Nikolay Sivov f2a45ae5c4 oleaut32: Added ICreateTypeInfo2::DeleteFuncDesc().
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit e3ef9b5426)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-10-27 21:40:02 +02:00
Vijay Kiran Kamuju 4eea9e383a msdrm: Add stub DRMRegisterContent function.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=50595
Signed-off-by: Vijay Kiran Kamuju <infyquest@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit afd5550b07)
Conflicts:
	dlls/msdrm/Makefile.in
	dlls/msdrm/main.c
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-10-27 21:40:02 +02:00
Gijs Vermeulen 718699df40 vcomp: Implement omp_get_num_procs().
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=50041
Signed-off-by: Gijs Vermeulen <gijsvrm@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 616e2284e0)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-10-27 21:40:02 +02:00
Damjan Jovanovic 4fddab4813 server: The owner of a securable object should have all the standard access rights.
Cygwin fork() fails in NtCreateSymbolicLinkObject(). We successfully
create the link but then fail to alloc_handle() with STATUS_ACCESS_DENIED,
because the requested access rights exceed what the owner is allowed.
Allow it more.

Thank you to Dmitry Timoshkov for debugging the security details from
alloc_handle() onwards.

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=48891
Signed-off-by: Damjan Jovanovic <damjan.jov@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 31e984a09d)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-10-27 21:40:02 +02:00
Hiroki Awata 1ecb100289 dsound: Notify DSBPN_OFFSETSTOP earlier.
Some games may not receive the DSBPN_OFFSETSTOP event and get stuck if
CloseHandle is called immediately after IDirectSoundBuffer::Stop.  To
solve this problem, IDirectSoundBuffer::Stop will immediately notify
the DSBPN_OFFSETSTOP event.

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=41292
Signed-off-by: Hiroki Awata <castaneai@by.black>
Signed-off-by: Andrew Eikum <aeikum@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 8116d4e11c)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-10-27 21:40:02 +02:00
Kalen Alwardt 3e134c2b5c ntdll: Export ZwFilterToken().
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=39142
Signed-off-by: Kalen Alwardt <kalenalwardt@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 29e1494c72)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-10-27 21:40:02 +02:00
Rémi Bernon f9bca7ed42 dssenh: Only fill hash buffer when it's provided.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=30244
Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
Signed-off-by: Hans Leidekker <hans@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 9b19a110ea)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-10-27 21:40:02 +02:00
Rémi Bernon e83cd0e70f dssenh: Return NTE_BAD_KEYSET when key cannot be opened.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=30244
Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
Signed-off-by: Hans Leidekker <hans@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit cf770571bf)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-10-27 21:40:02 +02:00
Rémi Bernon 239bb6cc55 dssenh/tests: Add CryptAcquireContextA last error check.
When container key doesn't exist yet.

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=30244
Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
Signed-off-by: Hans Leidekker <hans@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit c5bdc2408f)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-10-27 21:40:02 +02:00
Rémi Bernon 9ef3ca8b2d msvcrt: Set next_token when str is empty in wcstok_s.
Otherwise, when str is empty, an invalid parameter exception is raised.

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=30244
Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
Signed-off-by: Piotr Caban <piotr@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 32bbef5d3e)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-10-27 21:40:02 +02:00
Hans Leidekker 7f1d6a8ee2 wldap32: Rename ldap_connect() to avoid a name conflict.
Fixes the build against OpenLDAP 2.5.

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=51129
Signed-off-by: Hans Leidekker <hans@codeweavers.com>
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-10-27 21:36:32 +02:00
Michael Stefaniuc 3c9afe8f87 Release 6.0.2.
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-10-26 16:38:44 +02:00
Alexandre Julliard 4f158c1ca6 gdiplus/tests: Regenerate ttf files with the official fontforge version.
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 0ec38429f3)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-10-18 20:32:59 +02:00
Alexandre Julliard 1c9679a35f gdi32/tests: Regenerate ttf files with the official fontforge version.
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 8d373a67e1)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-10-18 20:32:59 +02:00
Gijs Vermeulen 4a0a4d150d secur32: Default to building with GnuTLS support on macOS, if present.
Signed-off-by: Gijs Vermeulen <gijsvrm@gmail.com>
Signed-off-by: Hans Leidekker <hans@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 4940d2ada2)
Conflicts:
	dlls/secur32/schannel_gnutls.c
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-10-18 20:32:59 +02:00
Gijs Vermeulen e2e053ea57 winecfg: Disable virtual desktop when using macdrv.
Signed-off-by: Gijs Vermeulen <gijsvrm@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit e2db7ef7f4)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-10-18 20:32:59 +02:00
Alexandre Julliard 4f9701317b explorer: Store the graphics driver basename instead of the full path.
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit d47be63fae)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-10-18 20:32:59 +02:00
Hans Leidekker 2ed9701ab9 winhttp: Use ws.ifelse.io for websocket tests.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=51631
Signed-off-by: Hans Leidekker <hans@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 9f6e39e8b9)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-10-05 21:55:43 +02:00
Zebediah Figura f61a3b7d15 wine.inf: Install the protocol database at etc\protocol.
Unlike Unix, on Windows the file name is not plural.

Signed-off-by: Zebediah Figura <z.figura12@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 03dcb36979)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-10-03 23:03:13 +02:00
Francois Gouget cd5311958c make_unicode: Add support for the 720 codepage (Arabic, Farsi and Urdu).
Signed-off-by: Francois Gouget <fgouget@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit a1bae9f288)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-10-03 22:53:32 +02:00
Anton Baskanov 40b962f9ef fonts: Fix dotaccent glyph position in Small Fonts.
Signed-off-by: Anton Baskanov <baskanov@gmail.com>
Signed-off-by: Huw Davies <huw@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 80ef009fc1)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-10-03 22:47:59 +02:00
Anton Baskanov 7347cbd07a fonts: Fix breve glyph position in 16px MS Sans Serif.
Signed-off-by: Anton Baskanov <baskanov@gmail.com>
Signed-off-by: Huw Davies <huw@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 9ecca23a32)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-10-03 22:46:31 +02:00
Haidong Yu bd11172b7a shell32: Fix a memory leak.
Signed-off-by: Haidong Yu <yuhaidong@uniontech.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 56976159ab)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-10-03 20:55:40 +02:00
Haidong Yu ef54f3c227 shell32: Fix a memory leak.
Signed-off-by: Haidong Yu <yuhaidong@uniontech.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 479b659463)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-10-03 20:54:49 +02:00
Rémi Bernon 531247b84e dinput: Prevent a device interface leak when enumerating.
Wine-Bug: https://bugs.winehq.org//show_bug.cgi?id=36263
Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 52aacd2377)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-10-03 20:53:32 +02:00
Damjan Jovanovic e35da6ed01 shell32: Fix a lock leak.
Signed-off-by: Damjan Jovanovic <damjan.jov@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 401de24b89)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-10-03 20:52:56 +02:00
Torge Matthies 96a1855bb9 winex11.drv: Avoid race condition in X11 error handling.
The err_callback* globals need to be protected from being overwritten
before X11DRV_check_error is called, otherwise no or the wrong error
handler might be called.

Signed-off-by: Torge Matthies <openglfreak@googlemail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 2e4bfa642e)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-10-03 20:43:32 +02:00
Piotr Caban 3b224895b0 winemac.drv: Don't filter non active displays out.
On Windows 10 the DISPLAY_DEVICE_ACTIVE flag is set even if monitor is
in power
saving mode or switched off. Monitors without DISPLAY_DEVICE_ACTIVE are
only reported when display is disabled. This doesn't match with
CGDisplayIsActive function.

Current code causes rendering problems when native .NET is used. When
monitors are updated when in power saving mode (e.g. due to race on
machine wake-up) we might end up with no monitors being enumerated by
EnumDisplayMonitors.

Signed-off-by: Piotr Caban <piotr@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 5400db15ca)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-10-03 20:41:46 +02:00
Brendan Shanks d7e26f2f7b configure: Work around Xcode 12's ld assuming 16KB page sizes.
Starting in Xcode 12, ld rounds page sizes and alignments up to 16KB
for all architectures. Passing '-segalign 0x1000' resets this back to
4KB.

Signed-off-by: Brendan Shanks <bshanks@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 11fd7e8394)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-07-27 00:16:47 +02:00
Matteo Bruni 9af691e74a wined3d: Don't skip FFP vertex pipeline state handlers when STATE_VDECL is dirty.
This fixes the non-default ARB shader backend, broken since
2ddb6b66a7, although the
fundamental issue was there long before that.

Originally the STATE_VDECL handler did some bookkeeping (basically,
computing what is now the stream info data) that's a prerequisite for
running other state handlers. For this reason a somewhat complicated
dance was put in place, with the dependent handlers returning right
away until the STATE_VDECL handler could prepare everything up and the
STATE_VDECL handler in turn explicitly calling these "downstream"
handlers so that they could do their job. With the commit mentioned
above the state dirty flags are cleared after the corresponding
handlers are executed, which means that the relevant handlers are
skipped twice and some stuff is never set up properly.

Stream info is computed by context_apply_draw_state() before going
through the state handler table for a long time now, getting rid of
this obscure handler interdependency. So let's just get rid of the
skipping altogether.

Signed-off-by: Matteo Bruni <mbruni@codeweavers.com>
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit e106bbdd39)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-07-27 00:10:36 +02:00
Austin English 44da7b267a readme: Document Libera Chat migration.
Signed-off-by: Austin English <austinenglish@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit d9a8be2a46)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-07-27 00:08:13 +02:00
Haoyang Chen 328d834ad9 gdi32: Fix a memory leak.
Signed-off-by: Haoyang Chen <chenhaoyang@uniontech.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 4b9c4e4201)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-07-26 22:32:41 +02:00
Owen Rudge fb53228568 winspool: Filter invalid characters when creating the PPD filename.
Fixes potential crash when trying to print if a CUPS printer name
contains an asterisk.

Signed-off-by: Owen Rudge <orudge@codeweavers.com>
Signed-off-by: Huw Davies <huw@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 6b906e8237)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-07-15 00:57:39 +02:00
Paul Gofman 5cf41e251d vcruntime140_1: Support two continuation addresses for catchblock.
MSVC generates that sometimes when there is a goto from catch block.

Fixes a crash in Company of Heroes 2.

Signed-off-by: Paul Gofman <pgofman@codeweavers.com>
Signed-off-by: Piotr Caban <piotr@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 049bd08d8b)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-07-15 00:54:53 +02:00
Zhiyi Zhang d7f35aacea ntoskrnl.exe: Exclude large integer APIs from relay tracing.
Similar to 8d7ec7968d

Signed-off-by: Zhiyi Zhang <zzhang@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit d7a4d757ce)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-07-14 23:50:23 +02:00
Dmitry Timoshkov 8c985b2b66 ntdll: Exclude large integer APIs from relay tracing.
These builtin functions use stdcall calling convention, but compilers
reference them without stdcall declarations.

Otherwise ucrtbase initialization code crashes with +relay enabled when
compiled with clang as a PE build.

Signed-off-by: Dmitry Timoshkov <dmitry@baikal.ru>
Signed-off-by: Jacek Caban <jacek@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 8d7ec7968d)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-07-14 23:43:07 +02:00
Arkadiusz Hiler f6144283a6 kernelbase: Fix GetFileVersionInfo*() crashes with malformed resources.
Some Unity games ship with an encrypted Assembly-CSharp.dll, including
the resources directory, yet the engine still calls GetFileVersionInfoSizeW()
on those files. This may results in a page fault when trying to find the
version resource and takes the whole process down.

The change fixes crashes when launching Home Behind 2 and Crown Trick.

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=50075
Signed-off-by: Arkadiusz Hiler <ahiler@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit e51ae86937)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-07-14 22:58:02 +02:00
Andrew Eikum fbe42005a5 windowscodecs: Avoid types deprecated in libtiff 4.3.
dlls/windowscodecs/libtiff.c:256:5: warning: ‘uint16’ is deprecated [-Wdeprecated-declarations]

Signed-off-by: Andrew Eikum <aeikum@codeweavers.com>
Signed-off-by: Esme Povirk <esme@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 5e3758a70f)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-07-14 22:54:26 +02:00
Jacek Caban f2dad112ac msvcrt: Add sincos to importlib.
Fixes cross compilation with GCC 11, which may optimize a pair of sin(),
cos() calls to a single sincos() call, which is not exported by any
msvcrt version.

Signed-off-by: Jacek Caban <jacek@codeweavers.com>
Signed-off-by: Piotr Caban <piotr@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit f013127647)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-07-13 23:18:53 +02:00
Nguyễn Chính Hữu 08d4d30a12 wined3d: Add GPU information for NVIDIA GT 1030.
Signed-off-by: Nguyễn Chính Hữu <huupoke12@gmail.com>
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 8854fd2b07)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-07-13 23:10:05 +02:00
Brendan Shanks 3ff3988763 wined3d: Add GPU information for Intel UHD Graphics 630.
Signed-off-by: Brendan Shanks <bshanks@codeweavers.com>
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit f074862504)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-07-13 23:09:08 +02:00
Alistair Leslie-Hughes 2f06215a8e gdi32: Don't override FontSubstitutes on a DPI only change.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=36010
Signed-off-by: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
Signed-off-by: Huw Davies <huw@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 7763efa347)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-07-12 22:33:14 +02:00
Nikolay Sivov c8d12b4e05 shcore/stream: Implement generic CopyTo().
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit e7f60e39f6)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-07-10 00:48:49 +02:00
Piotr Caban cdab0e40b9 msvcrt: Improve memmove performance on i386 and x86_64 architectures.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=49663
Signed-off-by: Piotr Caban <piotr@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 38c4904960)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-07-10 00:35:32 +02:00
Esme Povirk a0b7fb69e7 gdiplus: Implement reference counting for private font families.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=50896
Signed-off-by: Esme Povirk <esme@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit a554079860)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-07-10 00:11:39 +02:00
Haoyang Chen bf92d6bedf gdiplus: Avoid filtering of special characters.
Symbols such as ←  should also be displayed.

Signed-off-by: Haoyang Chen <chenhaoyang@uniontech.com>
Signed-off-by: Esme Povirk <esme@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 43e2563f44)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-07-10 00:11:26 +02:00
Gijs Vermeulen ee79875f34 amstream: Handle AMMSF_RENDERALLSTREAMS in IAMMultiMediaStream::OpenFile().
Signed-off-by: Gijs Vermeulen <gijsvrm@gmail.com>
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 3319526fda)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-07-09 22:24:16 +02:00
Zebediah Figura 57ed063ec0 wtsapi32: Implement WTSEnumerateProcessesW().
Based on a patch by Sebastian Lackner.

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=29903
Signed-off-by: Zebediah Figura <z.figura12@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 5f8c7c2563)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-07-09 22:22:19 +02:00
Zebediah Figura ea49fd72f0 include: Introduce winetest_push_context() and winetest_pop_context().
Based on vkd3d's vkd3d_test_set_context(), but adding support for a stack of
context prefixes, to more easily accomodate tests with nested loops.

Signed-off-by: Zebediah Figura <z.figura12@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit af39a1b0bc)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-07-09 22:19:59 +02:00
Zebediah Figura f78df1dd43 include: Factor out winetest_printf().
Signed-off-by: Zebediah Figura <z.figura12@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 2cdf6f0f30)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-07-09 22:19:12 +02:00
Francois Gouget 598a21be9c tests: Add ignore_exceptions().
This lets tests signal that for a while exceptions are expected and
should not be counted as test failures.

Signed-off-by: Francois Gouget <fgouget@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 4ac37c4e24)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-07-09 22:16:51 +02:00
Francois Gouget 0aabd08c53 tests: Trace the filename in winetest_wait_child_process().
We want the filename next to the line number, just like in every other
trace.

Signed-off-by: Francois Gouget <fgouget@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 092130e2aa)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-07-09 22:15:59 +02:00
Louis Lenders 360ce18577 kernel32: Remove entry for BasepDebugDump.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=51117
Signed-off-by: Louis Lenders <xerox.xerox2000x@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 7aba0e541e)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-07-09 21:47:25 +02:00
Louis Lenders 1b64d29849 advapi32: Add stub for LsaEnumerateAccounts.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=50830
Signed-off-by: Louis Lenders <xerox.xerox2000x@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit c74508d225)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-07-09 21:37:28 +02:00
Sebastian Lackner 717e8d5366 ntdll: Return STATUS_INVALID_DEVICE_REQUEST when trying to call NtReadFile on directory.
Signed-off-by: Zebediah Figura <z.figura12@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 43de1407e9)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-07-09 21:36:33 +02:00
Qian Hong 1abbaaa221 atl: Implement AtlAxDialogBox().
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=32749
Signed-off-by: Zebediah Figura <z.figura12@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit f987d8ac3b)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-07-08 21:14:56 +02:00
Piotr Caban 1d23985d64 msvcrt: Fix _unDName crash when demangling class function pointer.
Signed-off-by: Piotr Caban <piotr@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 7a1e7cbeee)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-07-08 00:46:09 +02:00
Piotr Caban 737adb2684 msvcrt/tests: Cleanup datatype demangle tests.
Signed-off-by: Piotr Caban <piotr@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit d91160835a)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-07-08 00:45:56 +02:00
Piotr Caban 53ee588abb msvcrt/tests: Link to malloc/free functions in cpp tests.
Signed-off-by: Piotr Caban <piotr@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit d7cc3d6583)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-07-08 00:45:42 +02:00
Nikolay Sivov 499448fb21 gdi32: Enumerate scalable fonts with zero charset mask as OEM.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=51041
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
Signed-off-by: Huw Davies <huw@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 8241d21ae0)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-07-08 00:43:09 +02:00
Paul Gofman d312b7ac50 ddraw/tests: Also test RT caps for software device.
Signed-off-by: Paul Gofman <pgofman@codeweavers.com>
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 6991d7befa)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-07-08 00:35:56 +02:00
Damjan Jovanovic 94254f4a14 shell32/tests: Fix test failures from ad412b11a7.
Signed-off-by: Damjan Jovanovic <damjan.jov@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit a3295e3831)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-07-08 00:31:49 +02:00
Damjan Jovanovic 26c1f7c83b shell32: Implement IID_IContextMenu in CreateViewObject() methods for shell folders that support it.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=39841
Signed-off-by: Damjan Jovanovic <damjan.jov@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit ad412b11a7)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-07-08 00:30:00 +02:00
Zebediah Figura 5703c14110 msi: Check for a NULL return from deformat_string() when checking for failure.
An empty string is valid, and can occur if e.g. a nonexistent property is
expanded.

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=51091
Signed-off-by: Zebediah Figura <z.figura12@gmail.com>
Signed-off-by: Hans Leidekker <hans@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 814f18ab75)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-07-08 00:18:00 +02:00
Damjan Jovanovic df085a31ff shell32: Use a smaller range of shellview menu IDs in our IContextMenu functions.
The shellview menu IDs are very large, eg. FCIDM_SHVIEW_OPEN is 0x7102,
while applications want menu IDs to fit into a small range, eg. 1-1000 for
Explorer++. This causes our IContextMenu_QueryContextMenu() functions to
leave out most menu options. We should rebase our shellview menu ids
by -0x7000 so they occupy a smaller range.

This gets both Explorer++ and Double Commander to show the correct
right-click menus.

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=24893
Signed-off-by: Damjan Jovanovic <damjan.jov@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 2b6458b757)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-07-08 00:04:23 +02:00
Damjan Jovanovic 3b90fc2314 shell32: The menu wIDs in hmenu were rebased by idCmdFirst.
Signed-off-by: Damjan Jovanovic <damjan.jov@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 91a8b4819e)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-07-08 00:04:23 +02:00
Damjan Jovanovic 46df61a087 comctl32: Send DTN_DATETIMECHANGE when the checkbox changes too.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=19756
Signed-off-by: Damjan Jovanovic <damjan.jov@gmail.com>
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 9b61a64601)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-07-08 00:04:23 +02:00
Gijs Vermeulen ebaafad23e ntdll: Don't fail when trying to remove the value of a non-existant variable in RtlSetEnvironmentVariable().
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=51035
Signed-off-by: Gijs Vermeulen <gijsvrm@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 2f2cdc8bb1)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-07-08 00:04:23 +02:00
Gijs Vermeulen 43120ef411 ntdll/tests: Refactor RtlSetEnvironmentVariable() tests.
Signed-off-by: Gijs Vermeulen <gijsvrm@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 09879590cb)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-07-08 00:04:23 +02:00
Michele Dionisio 5aeb6c71d0 msvcrt: Add __stdio_common_vfprintf_p and __stdio_common_vfwprintf_p.
Signed-off-by: Michele Dionisio <michele.dionisio@gmail.com>
Signed-off-by: Piotr Caban <piotr@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 8ea43f388f)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-07-08 00:04:23 +02:00
David Torok 758ecd13ab ntdll: Add NtCreateThread stub.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=50952
Signed-off-by: David Torok <dt@zeroitlab.com>
Signed-off-by: Gijs Vermeulen <gijsvrm@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 11ae0ade89)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-07-08 00:04:23 +02:00
Dmitry Timoshkov d54b02e281 crypt32: Add support for importing RSA public keys with BCrypt.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=50925
Signed-off-by: Dmitry Timoshkov <dmitry@baikal.ru>
Signed-off-by: Hans Leidekker <hans@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 9d1ae850df)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-07-08 00:04:23 +02:00
Dmitry Timoshkov fa4714e604 crypt32: Implement CryptImportPublicKeyInfoEx2.
Signed-off-by: Dmitry Timoshkov <dmitry@baikal.ru>
Signed-off-by: Hans Leidekker <hans@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit c2c7946680)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-07-08 00:04:23 +02:00
Gijs Vermeulen fe998fb2d3 dbghelp: Implement SymFromNameW().
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=50829
Signed-off-by: Gijs Vermeulen <gijsvrm@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 8d260b40fc)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-07-08 00:04:23 +02:00
Gijs Vermeulen 74d7bd0fdf ntdll: Return STATUS_INFO_LENGTH_MISMATCH when len is too small in NtQueryObject(ObjectBasicInformation).
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=50791
Signed-off-by: Gijs Vermeulen <gijsvrm@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 749f8c25e2)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-07-08 00:04:23 +02:00
Anton Baskanov a0711d16fa amstream: Support the event parameter in IDirectDrawStreamSample::Update.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=50628
Signed-off-by: Anton Baskanov <baskanov@gmail.com>
Signed-off-by: Zebediah Figura <z.figura12@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit b8a646f499)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-07-08 00:04:23 +02:00
Anton Baskanov f16cda7e63 amstream/tests: Add a test for event parameter of IDirectDrawStreamSample::Update.
Signed-off-by: Anton Baskanov <baskanov@gmail.com>
Signed-off-by: Zebediah Figura <z.figura12@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 3088ce35cb)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-07-08 00:04:23 +02:00
Alexandre Julliard 910d7e52e5 wine.inf: Fix the Tcpip database path.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=50318
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit a7a1e2643a)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-07-08 00:04:23 +02:00
Andrey Turkin 1edb71ad07 ieframe: Implement IWebBrowser2::get_LocationName().
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=12457
Signed-off-by: Gijs Vermeulen <gijsvrm@gmail.com>
Signed-off-by: Jacek Caban <jacek@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 92713253ab)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-07-08 00:04:23 +02:00
Alexandre Julliard 6622aed36e ws2_32: Install network database files.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=12076
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 50c40b913a)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-07-08 00:04:23 +02:00
Vijay Kiran Kamuju f636870dd8 dhtmled.ocx: Fake success in IDHTMLEdit::NewDocument.
Signed-off-by: Vijay Kiran Kamuju <infyquest@gmail.com>
Signed-off-by: Jacek Caban <jacek@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit b87f938c4d)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-07-08 00:04:23 +02:00
Vijay Kiran Kamuju b973686abc dhtmled.ocx: Add stub IOleControl interface.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=50916
Signed-off-by: Vijay Kiran Kamuju <infyquest@gmail.com>
Signed-off-by: Jacek Caban <jacek@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 95538bb5d3)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-07-08 00:04:23 +02:00
Lauri Kenttä ae66cb71b4 msvcrt: Handle negative zero, infinity and nan in _ecvt and others.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=50885
Signed-off-by: Lauri Kenttä <lauri.kentta@gmail.com>
Signed-off-by: Piotr Caban <piotr@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 97b420224e)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-07-08 00:04:23 +02:00
Piotr Caban 7dfaf25939 msvcrt: Cleanup _ecvt tests.
Signed-off-by: Piotr Caban <piotr@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 0f7ed56852)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-07-08 00:04:23 +02:00
Louis Lenders 23ac462cff advapi32: Update version resource.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=50854
Signed-off-by: Louis Lenders <xerox.xerox2000x@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 145210af9f)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-07-08 00:04:23 +02:00
Jacek Caban adc1b84adb jscript: Use quiet NaNs in jsval.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=50845
Signed-off-by: Jacek Caban <jacek@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit d9a4392d6b)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-07-08 00:04:23 +02:00
Akihiro Sagawa 08397d2346 gdi32: Fix text metrics used in EnumFonts families.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=50818
Signed-off-by: Akihiro Sagawa <sagawa.aki@gmail.com>
Signed-off-by: Huw Davies <huw@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 837c4f4b87)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-07-08 00:04:23 +02:00
Akihiro Sagawa bc76df8934 gdi32: Move otmEMSquare initialization to freetype_load_font.
Signed-off-by: Akihiro Sagawa <sagawa.aki@gmail.com>
Signed-off-by: Huw Davies <huw@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 8f6f1c8f7a)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-07-08 00:03:31 +02:00
Austin English bdf3307a15 tdh: Add TdhLoadManifestFromBinary stub.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=50725
Signed-off-by: Austin English <austinenglish@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit a9bab3601e)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-06-30 22:26:31 +02:00
Vijay Kiran Kamuju 4705790ee3 dhtmled.ocx: Implement IOleObject::SetExtent and IOleObject::GetExtent functions.
This time without tests as the ocx file is not available from windows 7 &
IE 8

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=50697
Signed-off-by: Vijay Kiran Kamuju <infyquest@gmail.com>
Signed-off-by: Jacek Caban <jacek@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 6ca1a92684)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-06-30 22:23:45 +02:00
Rémi Bernon 4dc5606c35 dinput: Wait for the hook thread to exit when stopping it.
FlatOut2 demo calls FreeLibrary on the dinput8 module more times than
it has loaded it, and the module reference that the internal thread has
is getting decremented before its exit.

Having an internal window to destroy also makes it more likely to crash
as it takes more time to exit calls the window procedure function.

Waiting for the thread to complete when all the dinput instances are
destroyed ensures that the thread isn't alive when the game frees the
DLL, and prevents the thread from crashing.

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=50673
Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit b71cea76ed)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-06-30 22:19:32 +02:00
Jacek Caban 158c49ca48 mshtml: Support DispHTMLHeadElement interface.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=50492
Signed-off-by: Jacek Caban <jacek@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 4efad17a9f)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-06-30 22:15:20 +02:00
Alexandre Julliard 5d5d7f41f5 configure: Fix package name for FAudio.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=50436
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit f126809ec0)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-06-30 22:11:29 +02:00
Arkadiusz Hiler 8180241f02 msvcp140_1: Implement the DLL.
This backs C++17's std::pmr implementation.

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=49954
Signed-off-by: Arkadiusz Hiler <ahiler@codeweavers.com>
Signed-off-by: Piotr Caban <piotr@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 9cbff7e68c)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-06-30 22:09:41 +02:00
Arkadiusz Hiler 95154afde7 msvcp90: Add helpers for creating base class RTTI.
Suggested by Piotr Caban.

Signed-off-by: Arkadiusz Hiler <ahiler@codeweavers.com>
Signed-off-by: Piotr Caban <piotr@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit f3f948a5a3)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-06-30 22:09:18 +02:00
Piotr Caban 1a38fd0a54 msvcp90: Add macro that define type_info vtable.
Signed-off-by: Arkadiusz Hiler <ahiler@codeweavers.com>
Signed-off-by: Piotr Caban <piotr@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 6568a8cb62)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-06-30 22:08:49 +02:00
Jan Sikorski cfec1ccd0d wined3d: Handle different slice pitches in uncompressed texture updates.
Signed-off-by: Jan Sikorski <jsikorski@codeweavers.com>
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit fc29f2a676)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-06-30 21:50:04 +02:00
David White d7827c6745 urlmon: Implement IMoniker_ComposeWith() for url monikers.
Signed-off-by: David White <dwhite@codeweavers.com>
Signed-off-by: Jacek Caban <jacek@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 67e7f6cd56)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-06-30 21:47:03 +02:00
Dmitry Kislyuk 506a20a1da mshtml: Fix NULL offset parent handling in IHTMLElement::get_offsetParent.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=50875
Signed-off-by: Dmitry Kislyuk <dimaki@rocketmail.com>
Signed-off-by: Jacek Caban <jacek@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 35d0fda0f0)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-06-30 21:37:35 +02:00
Hans Leidekker 60fcda90f4 msi: Fix building the fusion filename.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=50809
Signed-off-by: Hans Leidekker <hans@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 46424c6196)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-06-30 01:38:59 +02:00
Louis Lenders 81f705ee5b wbemprox: Add ProductType to win32_operatingsystem class.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=50805
Signed-off-by: Louis Lenders <xerox.xerox2000x@gmail.com>
Signed-off-by: Hans Leidekker <hans@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 733dc15bae)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-06-30 01:37:56 +02:00
Roman Pišl ef574b5e0c kernelbase: Convert DOS to NT path for FileRenameInfo in SetFileInformationByHandle.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=50756
Signed-off-by: Roman Pišl <rpisl@seznam.cz>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 33c6a6cb28)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-06-30 01:03:34 +02:00
Roman Pišl 6260a41277 kernel32/tests: Add test for FileRenameInfo in SetFileInformationByHandle.
Signed-off-by: Roman Pišl <rpisl@seznam.cz>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 0f84d30753)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-06-30 01:03:15 +02:00
Gijs Vermeulen c130d3ad74 kernelbase: Support FileRenameInfo in SetFileInformationByHandle.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=50756
Signed-off-by: Gijs Vermeulen <gijsvrm@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 5c86b9f1dc)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-06-30 01:03:02 +02:00
John Zourlios 678d118c42 kernelbase: Accept LINGUISTIC_IGNOREDIACRITIC & SORT_DIGITSASNUMBERS in CompareStringEx().
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=50362
Signed-off-by: Gijs Vermeulen <gijsvrm@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 0a366f7e4a)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-06-30 00:10:56 +02:00
Gijs Vermeulen 1d3156843b kernelbase: Reject SORT_DIGITSASNUMBERS in CompareStringA().
Signed-off-by: Gijs Vermeulen <gijsvrm@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit ed61ff43f4)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-06-30 00:10:31 +02:00
Hans Leidekker 0b33385f11 ntdll: Fall back to reading /dev/urandom if getrandom() is not supported.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=50168
Signed-off-by: Hans Leidekker <hans@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit e6407c39ba)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-06-30 00:08:17 +02:00
Matteo Bruni b9eb1a9327 wined3d: Handle blits to Vulkan swapchains not matching the D3D swapchain.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=50119
Signed-off-by: Matteo Bruni <mbruni@codeweavers.com>
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit cb45e91b24)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-06-29 23:51:07 +02:00
Louis Lenders c3a9607a3b wtsapi32: Implement WTSQuerySessionInformation(WTSDomainName).
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=47310
Signed-off-by: Gijs Vermeulen <gijsvrm@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit c6f133f635)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-06-29 23:46:54 +02:00
Gijs Vermeulen 5920a034b8 wtsapi32/tests: Test returned username for WTSQuerySessionInformation(WTSUserName).
Signed-off-by: Gijs Vermeulen <gijsvrm@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit e07c658faf)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-06-29 23:46:36 +02:00
Gijs Vermeulen d2d42b9cc5 wtsapi32: Avoid calling GetUserNameW() twice in WTSQuerySessionInformationW(WTSUserName).
Signed-off-by: Gijs Vermeulen <gijsvrm@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 6a822d4708)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-06-29 23:46:23 +02:00
Rémi Bernon fa78f4a2da d3d11: Add initial implementation of CreateDeviceContextState.
Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 846276f3ca)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-06-29 23:42:27 +02:00
Alexandre Julliard 1552a865a3 makefiles: Only allow includes and defines in pkg-config flags.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=50811
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 4f04994ef4)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-06-08 21:43:20 +02:00
Michael Stefaniuc 46e876377f Release 6.0.1.
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-06-07 22:00:25 +02:00
Martin Storsjo be1c8a56a3 msvcrt: Fix reading BOM-less files opened with ccs=unicode.
This fixes a regression in running MSVC 2010 in wine, when reading
.def files (regressed in b0ab1b7602).

Signed-off-by: Martin Storsjo <martin@martin.st>
Signed-off-by: Piotr Caban <piotr@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit fb0fa9aacf)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-05-29 11:27:42 +02:00
Brendan Shanks 5faad354d8 winemac.drv: Handle non-PCI GPUs correctly.
Signed-off-by: Brendan Shanks <bshanks@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 5fbd40520d)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-05-24 21:55:07 +02:00
Brendan Shanks cb9b17fa85 winemac.drv: Fix crash when building against Metal-capable SDK but running on older OS X.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=50790
Signed-off-by: Brendan Shanks <bshanks@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit d52c4eb00c)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-05-24 21:55:07 +02:00
Brendan Shanks aa83195f1a winemac.drv: Use Metal to get a display's GPU info if possible.
Fixes an Apple Silicon issue where CGDisplayIOServicePort() returns
a fake AMD GPU "compatibility" node rather than the real GPU node.

Signed-off-by: Brendan Shanks <bshanks@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit ae319caa3b)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-05-24 21:55:07 +02:00
Jan Sikorski 52f5e431ed winemac.drv: Include depth32+stencil pixel formats in enumeration.
This is especially important for M1 GPUs as they don't support the 24/8 format.

Signed-off-by: Jan Sikorski <jsikorski@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 88220e0ee4)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-05-24 21:55:07 +02:00
Michael Stefaniuc 8d5c8f775e tools: Get the ANNOUNCE bug list from the stable-notes git notes.
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-05-19 22:49:44 +02:00
Zhiyi Zhang f8784c6eb0 user32/tests: Do not change adapters to every available modes.
This reduce the time to run the monitor test from 6 minutes to 25 seconds.

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=50086
Signed-off-by: Zhiyi Zhang <zzhang@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit cad102465d)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-05-19 22:40:59 +02:00
Alexandre Julliard c62e10c0e6 user32/tests: Remove todo from a test that seems to succeed reliably now.
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 0d017b12cf)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-05-19 22:38:30 +02:00
Zhiyi Zhang 91fff979c6 user32/tests: Add optional messages to test sequences.
Fix a possible test failure on Win10 2009.

Signed-off-by: Zhiyi Zhang <zzhang@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit a11ffeec96)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-05-19 22:36:08 +02:00
Matteo Bruni 6cc4bd4c28 wined3d: Correctly handle modifiers on instructions with multiple destination registers.
Signed-off-by: Matteo Bruni <mbruni@codeweavers.com>
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 65b3279bae)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-05-18 21:08:18 +02:00
Floris Renaud af9312c574 po: Update Dutch translation.
Signed-off-by: Floris Renaud <jkfloris@dds.nl>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 24e41be136)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-05-18 00:24:26 +02:00
Floris Renaud 9bc7bbfe6b po: Update Dutch translation.
Signed-off-by: Floris Renaud <jkfloris@dds.nl>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 717dd6cee4)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-05-18 00:24:26 +02:00
Byeongsik Jeon 5cbb615f22 po: Update Korean translation.
Signed-off-by: Byeongsik Jeon <bsjeon@hanmail.net>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 4d483cd855)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-05-18 00:24:26 +02:00
Floris Renaud f39c602aa9 po: Fix Dutch spelling errors.
Signed-off-by: Floris Renaud <jkfloris@dds.nl>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit b36f626e4c)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-05-18 00:24:26 +02:00
Floris Renaud 114a580b2e po: Update Dutch translation.
Signed-off-by: Floris Renaud <jkfloris@dds.nl>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 0174f7072e)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-05-18 00:24:26 +02:00
Alexandre Julliard 6cc71f92a3 make_unicode: Use codepage 949 to add default mappings to codepage 20949.
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 6f68543692)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-05-18 00:24:26 +02:00
Sanghoon Park dbd00086d5 make_unicode: Add support for codepage 20949 (Korean Wansung).
Signed-off-by: Sanghoon Park <esifea1908@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit fd3a640206)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-05-18 00:24:26 +02:00
Floris Renaud 71902db007 documentation: Add Dutch README translation.
Signed-off-by: Floris Renaud <jkfloris@dds.nl>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit f72ef20e88)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-05-18 00:24:26 +02:00
Floris Renaud 27fc09f67c documentation: Change obsolete Debian and Red Hat packages.
xlib6g-dev on Debian and XFree86-devel on Red Hat no longer exist.
Replaced with: xorg-dev (Debian) and libX11-devel (Red Hat)

Signed-off-by: Floris Renaud <jkfloris@dds.nl>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 8c65205d22)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-05-18 00:24:26 +02:00
Brendan Shanks f1a7cae5cb loader: On Mac, reserve an area starting at 4GB to force Rosetta's allocations higher.
On Apple Silicon, Rosetta allocates memory starting at 0x100000000
(the 4GB line) before the preloader runs.
The .NET 3.5 installer and DirectX Jun2010 redistributable both contain
non-relocatable EXEs with that base address, which fail to run.

The workaround is to create an empty linker section at that address,
which is mapped by the kernel before Rosetta runs and forces Rosetta's
allocations higher in memory.
The linker section runs from 0x100000000-0x114000000.
Rosetta's allocations are ~132MB, and should end below 0x120000000.

This is not an exact science: a non-relocatable EXE with base address
between 0x114000000-0x120000000 will fail to run. If one is discovered,
the section size will need to be changed.

Signed-off-by: Brendan Shanks <bshanks@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 307f5d00f1)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-05-18 00:24:26 +02:00
Brendan Shanks 497025d144 loader: On Mac, move the top-down allocations area down to avoid Rosetta regions.
On Apple Silicon, Rosetta's shared cache starts at 0x7ffe00000000 and
the runtime is mapped below that.
Put the top-down allocation area below the runtime with plenty of room
to spare.

Signed-off-by: Brendan Shanks <bshanks@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 720611e28e)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-05-18 00:24:26 +02:00
Alexandre Julliard ea2a235727 start: Avoid duplicate backslashes in command line.
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 1b4b4a9bb5)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-05-18 00:24:26 +02:00
Rémi Bernon 7515889470 winedbg: Don't dereference possibly NULL thread pointer.
Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 6eff0342ad)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-05-18 00:24:26 +02:00
Chao Long 8d2e4ee83a wmic: Add missing aliases.
Signed-off-by: Chao Long <longchao@uniontech.com>
Signed-off-by: Hans Leidekker <hans@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 7dba53a0f2)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-05-18 00:24:26 +02:00
Rémi Bernon 196f033dec plugplay: Broadcast WM_DEVICECHANGE message asynchronously.
It may otherwise trigger a nasty race condition, where:

1) For explorer.exe to register the CLSID_ShellWindows classes, it
   needs RpcSS service to be started,

2) services.exe may start WinePlugPlay service group first, waiting for
   its startup to complete,

3) during startup and early device enumeration, hidclass.sys may call
   IoSetDeviceInterfaceState, which calls plugplay_send_event [1],

4) plugplay_send_event tries to broadcast a WM_DEVICECHANGE message with
   BSF_QUERY, waiting for the individual threads to reply,

5) which times-out because window threads are waiting on explorer.exe
   to create its desktop window and reply to the WM_NULL SendMessage.

This happens more likely as there is threads with message queues
being started, each waiting on the desktop window to reply. Usually
explorer.exe is able to reply to some messages with the implicit
message processing while creating its window, but not all of them.

[1] Not completely sure how, it looks like some RPC too, but before
    RpcSs is started?

Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit f5ca06016d)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-05-18 00:24:26 +02:00
Andrew Sheldon bd7041e39f wined3d: Add GPU information for Radeon RX 6800(XT) / 6900 XT.
Signed-off-by: Andrew Sheldon <asheldon55@gmail.com>
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit d1b2eea421)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-05-18 00:24:26 +02:00
Zebediah Figura 4f24daba64 explorer: Send systray messages with SendNotifyMessage().
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=50441
Signed-off-by: Zebediah Figura <z.figura12@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 7eca09d7e0)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-05-18 00:24:26 +02:00
Nikolay Sivov 9433c600f9 sc: Fix typos in CLI arguments parsing.
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit d3ddc11864)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-05-18 00:24:26 +02:00
Giovanni Mascellani 4b774ec357 dwrite: Do not segfault when there are no typographic features to return.
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com>
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 65f5033702)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-05-18 00:24:26 +02:00
Damjan Jovanovic 087637e861 mmsystem: Win16 DllEntryPoint uses HINSTANCE16, not HINSTANCE.
Signed-off-by: Damjan Jovanovic <damjan.jov@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 7464d1042a)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-05-18 00:24:26 +02:00
Martin Storsjo 0d89678307 include: Don't use __attribute__((pcs("aapcs-vfp"))) when building in PE mode.
Clang doesn't support this attribute for windows targets right now;
the attribute is only needed for selecting a potentially non-default
calling convention on e.g. linux.

Signed-off-by: Martin Storsjo <martin@martin.st>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 52398912f9)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-05-18 00:24:26 +02:00
Paul Gofman 3fab693d00 dbghelp: Fix unwind opcodes on x64.
Signed-off-by: Paul Gofman <pgofman@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 6bcde00566)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-05-18 00:24:26 +02:00
Andrey Gusev 1256e6226f wined3d: Add AMD Radeon RX 5500M.
Signed-off-by: Andrey Gusev <andrey.goosev@gmail.com>
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit c66e0e5723)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-05-18 00:24:26 +02:00
Dmitry Kislyuk d94b4a494b msctf: Quiet a spammy fixme in InputProcessorProfileMgr_GetActiveProfile.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=50744
Signed-off-by: Dmitry Kislyuk <dimaki@rocketmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 0712b6b1a0)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-05-18 00:24:26 +02:00
Gijs Vermeulen c4cf95c6f9 wmvcore: Upgrade to IWMSyncReader2.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=50740
Signed-off-by: Gijs Vermeulen <gijsvrm@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 7fa74fa78e)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-05-18 00:24:26 +02:00
Dmitry Timoshkov b66571e730 server: Set error to STATUS_UNSUCCESSFUL when the server fails to queue APC for a thread.
I've left another case of returning STATUS_PROCESS_IS_TERMINATING since
that's not covered by the tests.

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=50704
Signed-off-by: Dmitry Timoshkov <dmitry@baikal.ru>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 050dc49b38)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-05-18 00:24:26 +02:00
Dmitry Timoshkov 015f3167d8 kernel32/tests: Add a test for calling QueueUserAPC() on a terminated thread.
Signed-off-by: Dmitry Timoshkov <dmitry@baikal.ru>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 816b588e04)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-05-18 00:24:26 +02:00
Bernhard Kölbl 3224e39044 msvcrt: Update source pointer in wcsrtombs in C locale.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=50698
Signed-off-by: Piotr Caban <piotr@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 3dca00f1dd)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-05-18 00:24:26 +02:00
Roman Pišl 780b202907 cmd: Fix handling of brackets in if-set expressions on a single line.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=50642
Signed-off-by: Roman Pišl <rpisl@seznam.cz>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 2d6b0b67d9)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-05-18 00:24:26 +02:00
Roman Pišl 907c5a2135 cmd: Fix handling of nested if-for expressions on a single line.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=50641
Signed-off-by: Roman Pišl <rpisl@seznam.cz>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 6809e0599e)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-05-18 00:24:26 +02:00
Henri Verbeet d0a38a32c7 wined3d: Set the "compareEnable" field of struct VkSamplerCreateInfo to either 0 or 1.
VkBool32 is (unfortunately) specified as 0/1, instead of zero/non-zero. Found
by the validation layers.

Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit f969570c22)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-05-18 00:24:26 +02:00
Matteo Bruni 43e4f4b81e wined3d: Use VK_FORMAT_D24_UNORM_S8_UINT when available.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=50123
Signed-off-by: Matteo Bruni <mbruni@codeweavers.com>
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit e4bc4df09f)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-05-18 00:24:26 +02:00
Bernhard Kölbl 597a3b414e netprofm: Set correct GUIDs for network connections.
Retrieve the network connection's GUID from the interface index.

Signed-off-by: Bernhard Kölbl <besentv@gmail.com>
Signed-off-by: Hans Leidekker <hans@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 4393438ab3)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-05-18 00:24:26 +02:00
Alistair Leslie-Hughes 3d74e4b563 msado15: Implement Dispatch functions in _Connection.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=16676
Signed-off-by: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
Signed-off-by: Hans Leidekker <hans@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 079a963a27)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-05-18 00:24:26 +02:00
Alexandre Julliard aff5e8fb75 ntdll: Avoid sign conversion warnings in Thumb-2 relocation processing.
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit d89b304eb7)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-05-18 00:24:26 +02:00
Jacek Caban 3591388c75 oleaut32: Use C locale in VARIANT_BstrFromReal.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=50672
Signed-off-by: Jacek Caban <jacek@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 22a1485c08)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-05-18 00:24:26 +02:00
Roman Pišl 1f09409052 ntdll: Don't set error status if volume serial number is missing.
Fixes regression from b14eee69c7.

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=50781
Signed-off-by: Roman Pišl <rpisl@seznam.cz>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit dabba3cc86)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-05-18 00:24:26 +02:00
Vijay Kiran Kamuju b403116243 dhtmled.ocx: Implement IOleObject::GetMiscStatus function.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=50620
Signed-off-by: Vijay Kiran Kamuju <infyquest@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit d2c2987bce)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-05-18 00:24:26 +02:00
Jacek Caban a4ac7faab9 conhost: Avoid assumption about the exact Unix cursor position after writing to the last column.
Spotted by Roman Pišl.

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=50581
Signed-off-by: Jacek Caban <jacek@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 9e97f3513e)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-05-18 00:24:26 +02:00
Alistair Leslie-Hughes f4d30930a6 odbccp32: Implement SQLWriteDSNToIni/W.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=50150
Signed-off-by: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit ea3096bdab)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-05-18 00:24:26 +02:00
Henri Verbeet e6fab0bcba wined3d: Introduce a backup path for swapchain presents using GDI.
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 70418f69dd)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-05-18 00:24:26 +02:00
Zhiyi Zhang 1fdf148c58 user32: Send a WM_ACTIVATE message after restoring a minimized top level window.
The WmShowRestoreMinimizedOverlappedSeq message sequence in tests
clearly show that there is a WM_ACTIVATE message at the end of
ShowWindow() calls after restoring a minimized window, and it's
not from SetFocus().

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=47507
Signed-off-by: Zhiyi Zhang <zzhang@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 3898ad408b)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-05-18 00:24:26 +02:00
Akihiro Sagawa 0dc595d4e1 krnl386.exe: Cap GetFreeSpace value to 2GB.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=46962
Signed-off-by: Akihiro Sagawa <sagawa.aki@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit eca2bfd071)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-05-18 00:24:26 +02:00
Michael Müller dc85e95017 ntdll: Implement NtQuerySystemInformation(SystemExtendedHandleInformation).
Signed-off-by: Zebediah Figura <z.figura12@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 835f5fff71)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-05-18 00:24:25 +02:00
Gijs Vermeulen c3674b30f2 msvcirt: Implement remainder of fstream class.
Signed-off-by: Piotr Caban <piotr@codeweavers.com>
Signed-off-by: Gijs Vermeulen <gijsvrm@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 4981785f0f)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-05-18 00:24:25 +02:00
Bernhard Reiter f40379a9d1 imagehlp: Partially implement BindImageEx().
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=3591
Signed-off-by: Zebediah Figura <z.figura12@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit d129a89d22)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-05-18 00:24:25 +02:00
Zebediah Figura fd59214adf imagehlp/tests: Rewrite test_bind_image_ex() using a DLL resource.
Signed-off-by: Zebediah Figura <z.figura12@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 4782b08f31)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-05-18 00:24:25 +02:00
Zebediah Figura a0452ee0bc imagehlp/tests: Link directly to imagehlp and psapi.
Signed-off-by: Zebediah Figura <z.figura12@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 670913af21)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-05-18 00:24:25 +02:00
Hans Leidekker f7c5cb04ba wbemprox: Fix Windows 8/8.1 caption.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=50610
Signed-off-by: Hans Leidekker <hans@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit bdba6037d0)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-05-18 00:24:25 +02:00
Roman Pišl 88a189f964 conhost: Improve notification when resizing window.
Signed-off-by: Roman Pišl <rpisl@seznam.cz>
Signed-off-by: Jacek Caban <jacek@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 2ca86d3b59)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-05-18 00:24:25 +02:00
Roman Pišl 9dff1027d5 conhost: Fix copy-paste error when setting windows size.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=50602
Signed-off-by: Roman Pišl <rpisl@seznam.cz>
Signed-off-by: Jacek Caban <jacek@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 361b4c381e)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-05-18 00:24:25 +02:00
Austin English d81c2f2fa7 ntoskrnl.exe: Add KdDisableDebugger/KdEnableDebugger stubs.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=50599
Signed-off-by: Austin English <austinenglish@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit e8cb99466b)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-05-18 00:24:25 +02:00
Hans Leidekker 18ab8254e9 wbemprox: Report the real OS version.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=50580
Signed-off-by: Hans Leidekker <hans@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit ba06f7a541)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-05-18 00:24:25 +02:00
Henri Verbeet dff027f211 wined3d: Allow resource copies between block-compatible formats.
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 02385a4042)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-05-18 00:24:25 +02:00
Henri Verbeet c760f6b9de d3d11/tests: Add format compatibility tests for DXGI_FORMAT_R9G9B9E5_SHAREDEXP.
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 70c09cd89d)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-05-18 00:24:25 +02:00
Henri Verbeet 1eead2aaca wined3d: Create the backbuffer rendertarget view only after calling adapter_init_3d().
Otherwise we may not be able to acquire a context to create the view. In
practice, this is only an issue for d3d9 and earlier in combination with the
Vulkan backend.

Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit b9a440d15d)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-05-18 00:24:25 +02:00
Zebediah Figura 02850d83bf winex11: Send systray messages with SendNotifyMessage().
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=50441
Signed-off-by: Zebediah Figura <z.figura12@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 5c09d815f8)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-05-18 00:24:25 +02:00
Zebediah Figura 2e1ba07a11 winemac: Send systray messages with SendNotifyMessage().
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=50441
Signed-off-by: Zebediah Figura <z.figura12@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 46c4facab7)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-05-18 00:24:25 +02:00
Piotr Caban ec8c5545c3 concrt140: Add arm exports.
Signed-off-by: Piotr Caban <piotr@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 2201ca08fb)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-05-18 00:24:25 +02:00
Piotr Caban b1b8412f96 msvcr110: Copy utf16 strings in _Gettnames.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=50409
Signed-off-by: Piotr Caban <piotr@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit b3fcb0f2c8)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-05-18 00:24:25 +02:00
Piotr Caban 66e06267c0 ucrtbase: Fix _Syserror_map behavior on unknown error.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=50407
Signed-off-by: Piotr Caban <piotr@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit b54ab691a7)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-05-18 00:24:25 +02:00
Piotr Caban dcecdf6a46 msvcp90: Add _Wcsxfrm implementation.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=50401
Signed-off-by: Piotr Caban <piotr@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 3657c8b829)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-05-18 00:24:25 +02:00
Alexandre Julliard 600f8462ac msvcp: Fix some spec file discrepancies.
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 2012d7ab6a)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-05-18 00:24:25 +02:00
Christian Costa e4976c0c98 d3dx9: Return D3DFMT_A8R8G8B8 in D3DXGetImageInfoFromFileInMemory for 32 bpp BMP with alpha.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=48563
Signed-off-by: Zebediah Figura <z.figura12@gmail.com>
Signed-off-by: Matteo Bruni <mbruni@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 8f6c832b31)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-05-18 00:24:25 +02:00
Nikolay Sivov 00fb915af4 oleaut32: Handle preformatted strings in VarFormatCurrency().
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=46709
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit e26d6da8a9)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-05-18 00:24:25 +02:00
Nikolay Sivov 70a22fcb6e oleaut32/tests: Remove workarounds in VarFormat* tests.
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit f1abfc6933)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-05-18 00:24:25 +02:00
Jacek Caban e34899aea3 kernelbase: Support FileEndOfFileInfo in SetFileInformationByHandle.
Signed-off-by: Jacek Caban <jacek@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 1d36532d22)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-05-18 00:24:25 +02:00
Jan Sikorski 6f3608d81a wined3d: Align vertex attribute offsets to their size, if smaller than 4.
This should not change behaviour for d3d9 and earlier, where all formats
have sizes that are multiples of 4.

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=43422
Signed-off-by: Jan Sikorski <jsikorski@codeweavers.com>
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 81dfece45c)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-05-18 00:24:25 +02:00
Nikolay Sivov 1b44efb59e explorerframe: Do not block clicks on the item button.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=28786
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 7ac196aa0c)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-05-18 00:24:25 +02:00
Zebediah Figura 82b079cae4 ntdll: Treat '>' the same as '?' in match_filename().
They differ in strange ways, as the tests show, but the basic behaviour of '>' is similar to '?'.

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=22635
Signed-off-by: Zebediah Figura <z.figura12@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 690a069918)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-05-18 00:24:25 +02:00
Akihiro Sagawa e6819b0f43 winmm: Get rid of TIME_MS format support in waveOutGetPosition().
SofTalk (Japanese text-to-speech software) depends on this.

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=50515
Signed-off-by: Akihiro Sagawa <sagawa.aki@gmail.com>
Signed-off-by: Andrew Eikum <aeikum@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 37f3a07831)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-05-18 00:24:25 +02:00
Akihiro Sagawa c84fb8ad77 winmm/tests: Expect TIME_BYTES format for TIME_MS request.
Signed-off-by: Akihiro Sagawa <sagawa.aki@gmail.com>
Signed-off-by: Andrew Eikum <aeikum@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit aa56ee08f6)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-05-18 00:24:25 +02:00
Vijay Kiran Kamuju dd026b0775 uiautomationcore: Add stub UiaRegisterProviderCallback function.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=50508
Signed-off-by: Vijay Kiran Kamuju <infyquest@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 8f0349f25b)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-05-18 00:24:25 +02:00
Nikolay Sivov 783e043e78 d2d1: Pass zeros as text layout size for inverted rectangles in DrawText().
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 9521c6a1eb)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-05-18 00:24:25 +02:00
Haoyang Chen 8f6c45192d d2d1: Fix text position in DrawText().
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit f37c83452e)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-05-18 00:24:25 +02:00
Zebediah Figura ae93bdd8fa gdi32: Do not compare face file names in insert_face_in_family_list() if either is NULL.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=50486
Signed-off-by: Zebediah Figura <z.figura12@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 96fdbabc72)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-05-18 00:24:25 +02:00
Henri Verbeet dbfed2e2f6 wined3d: Use glFinish() for synchronisation when cleaning up a destroyed context in wined3d_context_gl_cleanup().
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=50485
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 3cc8147594)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-05-18 00:24:25 +02:00
Nikolay Sivov da2955cdb7 dcomp: Add DCompositionCreateDevice() stub.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=50459
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 8eabf58dee)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-05-18 00:24:25 +02:00
Henri Verbeet 198c0579be wined3d: Always include any depth/stencil attachment in the Vulkan framebuffer.
Analogous to the GL backend. The alternative would be to potentially
invalidate STATE_FRAMEBUFFER when changing the depth/stencil state object,
which doesn't seem worth it.

Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit a3f829bbb8)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-05-18 00:24:24 +02:00
Henri Verbeet 53bbcc789e wined3d: Implement NULL constant buffer views for the Vulkan backend.
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 50a90dcb32)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-05-18 00:24:24 +02:00
Henri Verbeet 129baec9ba wined3d: Add some barriers between resource usage on different bind points.
A typical case would be between using a texture as render target and using it
as a shader resource.

Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 82a9e80063)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-05-18 00:24:24 +02:00
Henri Verbeet 84d4d9195d wined3d: Properly convert Vulkan sample count format information.
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit e796da7a5e)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-05-18 00:24:24 +02:00
Hans Leidekker 74d58e6e27 wbemprox: Implement Win32_NetworkAdapter.ServiceName.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=50256
Signed-off-by: Hans Leidekker <hans@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 4c5dee872b)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-05-18 00:24:24 +02:00
Hans Leidekker feed1f0efb wbemprox: Handle escaped backslashes in LIKE queries.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=50256
Signed-off-by: Hans Leidekker <hans@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit d4032d69f6)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-05-18 00:24:24 +02:00
Hans Leidekker 11b0d87c17 wbemprox/tests: Add tests for Win32_NetworkAdapter/Configuration.
Signed-off-by: Hans Leidekker <hans@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit e8aa254f34)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-04-07 20:08:38 +02:00
Hans Leidekker a06928cfdd wbemprox: Implement Win32_NetworkAdapter.GUID.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=50256
Signed-off-by: Hans Leidekker <hans@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit ebff7de0c9)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-04-07 20:07:27 +02:00
Nikolay Sivov d104f03785 dcomp: Add DCompositionCreateDevice2().
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=50357
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit c9a0006e4f)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-04-06 22:49:47 +02:00
Henri Verbeet c13940de05 ddraw: Use BitBlt() for exclusive mode frontbuffer updates if the swapchain window is not in the foreground.
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 4ce1d7f93a)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-04-06 21:38:06 +02:00
Dmitry Timoshkov 5bb151ebab wbemprox: Flesh out a bit SystemRestore::Enable() implementation.
Signed-off-by: Dmitry Timoshkov <dmitry@baikal.ru>
Signed-off-by: Hans Leidekker <hans@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit d2baf148a1)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-04-06 20:25:11 +02:00
Dmitry Timoshkov 35fb240695 wbemprox: Add class SystemRestore stub implementation.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=50033
Signed-off-by: Dmitry Timoshkov <dmitry@baikal.ru>
Signed-off-by: Hans Leidekker <hans@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit e0cb4d5093)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-04-06 20:24:48 +02:00
Hans Leidekker dd59c1a45b winhttp: Avoid a crash when the connection is closed while handling a redirect.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=48870
Signed-off-by: Hans Leidekker <hans@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 83afd177b3)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-04-06 20:20:36 +02:00
Henri Verbeet 15f4d9c60e wined3d: Implement the "precise" flag in the GLSL shader backend.
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 7a54209d4b)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-04-06 20:18:02 +02:00
Alistair Leslie-Hughes 50fdd5e2b5 dsound: IDirectSoundBuffer8 GetStatus return DSBSTATUS_LOCSOFTWARE for deferred buffers.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=21014
Signed-off-by: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
Signed-off-by: Andrew Eikum <aeikum@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
(cherry picked from commit 2e8bd2682a)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
2021-03-23 21:42:21 +01:00
404 changed files with 13595 additions and 4838 deletions

614
ANNOUNCE
View File

@ -1,25 +1,12 @@
The Wine team is proud to announce that the stable release Wine 6.0
is now available.
The Wine maintenance release 6.0.4 is now available.
This release represents a year of development effort and over 8,300
individual changes. It contains a large number of improvements that
are listed in the release notes below. The areas of major changes are:
- Core modules in PE format.
- Vulkan backend for WineD3D.
- DirectShow and Media Foundation support.
- Text console redesign.
This release is dedicated to the memory of Ken Thomases, who passed
away just before Christmas at the age of 51. Ken was an incredibly
brilliant developer, and the mastermind behind the macOS support in
Wine. We all miss his skills, his patience, and his dark sense of
humor.
What's new in this release:
- Various bug fixes
The source is available from the following locations:
https://dl.winehq.org/wine/source/6.0/wine-6.0.tar.xz
http://mirrors.ibiblio.org/wine/source/6.0/wine-6.0.tar.xz
https://dl.winehq.org/wine/source/6.0/wine-6.0.4.tar.xz
http://mirrors.ibiblio.org/wine/source/6.0/wine-6.0.4.tar.xz
Binary packages for various distributions will be available from:
@ -35,454 +22,161 @@ AUTHORS in the distribution for the complete list.
----------------------------------------------------------------
What's new in Wine 6.0
======================
*** PE modules
- The core DLLs, including NTDLL, KERNEL32, GDI32, USER32, etc. are
built in PE format. This should help a number of copy protection
schemes that check that the DLL files on disk match the in-memory
contents.
- There is a new mechanism to associate a Unix library with a PE
module, to make it possible to call Unix libraries from PE for the
functions that can't be handled with Win32 APIs.
These libraries are found by replacing the PE module file extension
with .so, for instance ntdll.dll -> ntdll.so. They have to be
located next to the PE file on disk.
Bugs fixed in 6.0.4 (total 42):
12732 Nota Bene crashes on install
26350 Dungeons demo (OGRE) fails to load its plugins (LoadLibraryEx with LOAD_WITH_ALTERED_SEARCH_PATH and relative path)
32183 Cannot open console device read only, then read from it to get input
39699 EDT for Windows installer crashes inside wine`s hhctrl.ocx
41098 Descent 3 (GOG version) has problem when running with OpenGL renderer (Nvidia proprietary drivers)
42030 winedbg: Internal crash at 0x9f58fd40
44202 undname.c fails to parse symbols with rvalue-reference semantics '&&'
47287 Accessible Event Watcher Tool 'accevent.exe' from Windows 10 SDK (10.0.17763.x) crashes on unimplemented function oleacc.dll.AccessibleObjectFromEvent
48631 Multiple games display text as squares (Death to Spies: Moment of Truth, Shadow Warrior, Resident Evil 4 HD)
48950 NVDA needs oleacc.AccessibleObjectFromPoint implementation for mouse tracking
50370 Gothic 1 doesn't start correctly when screen resolution of the game matches display resolution
50526 ConEmu wineconsole Ctrl+m has different behavior
50714 YooSee CMS client 10.0.0.53 crashes after login since Wine 5.12 (ntdll built as PE)
51163 WinOffice Pro 5.3 stops after splashscreen, needs WMI class SoftwareLicensingProduct
51195 Lara Croft and the Temple of Osiris doesn't launch
51220 version:info - In Wine the GetFileVersionInfoEx() checks fail in non-English locales
51396 cl.exe 64bit fails with internal compiler error, needs support for separated code segments in vcruntime140_1
51598 cmd.exe crashes on "if exist" without arguments
51821 EVE Online Client Crashes Due to differences in how Wine and Windows handle LdrGetDllPath with dwFlags 0x8 and relative path
51860 Missing include for uid_t on musl-based systems
51864 VeraCrypt Installer for 1.24-Update7 (Win8+) fails with HRESULT 0x800288BD
51911 vbscript does not handle strings in if clauses
51938 Safe Exam Browser needs "DNSDomain" from Win32_NetworkAdapterConfiguration
51959 Missing procedure GetDayLightFlag
51968 Winaero WEI Tool: Crash due to C:\windows\performance\winsat\datastore missing
51978 Autodesk Fusion 360 crashes on unimplemented function msvcp140.dll.?table@?$ctype@D@std@@QEBAPEBFXZ
51983 foobar2000 v1.5.1+ crashes on startup with Wine v6.6+ with Windows version set to "Windows 10"
52076 Wrong icons placement when using a theme
52082 Ace Ventura (CD-ROM) crashes on start
52102 outSPOKEN 3.0 demo crashes on unimplemented function krnl386.exe16.GetLPErrMode
52141 NetAPI detection in configure is broken
52173 Kodi crashes on unimplemented function wsdapi.dll.WSDCreateDiscoveryProvider
52200 Yamizome Liberator (demo): In-game video isn't played.
52220 TMIDI Player, Cherry: Playback with multiple MIDI ports is broken
52224 inetmib1:main test times out in linux
52298 Opening PPT with Freeoffice Presentations crashes on unimplemented function ole32.dll.OleConvertIStorageToOLESTREAMEx
52327 Wrong WM_CONTEXTMENU message default processing
52349 Vortex Mod Manager Starts but Infinitely Loads
52378 Python WMI module: AttributeError: wbemErrInvalidQuery
52494 shell32 progman_dde tests crash if run immediately after prefix creation
52583 ApiSetView does not display export ordinals correctly
52626 MahjongSoul needs unimplemented function combase.dll.RoSetErrorReportingFlags
----------------------------------------------------------------
Changes since 6.0.3:
Akihiro Sagawa (1):
quartz: Fix a race in IMediaFilter::Pause().
Alex Henrie (2):
krnl386: Add GetLPErrMode stub.
explorer: Only try to destroy the IShellWindows object if it exists.
Alexandre Julliard (3):
configure: Fix the netapi check.
krnl386.exe: Page-align the GlobalAlloc() size when the selector limit is in pages.
user.exe: Make sure that the thunk selector doesn't get freed.
Bernhard Kölbl (1):
oleaut32: Allow the registration of 64bit typelibs from a 32bit context.
Bernhard Übelacker (2):
hhctrl.ocx: Handle only the number of bytes given in html_fragment_len.
inetmib1: Fix endianess issue with dwLocalAddr and dwLocalPort.
Christian Costa (1):
d3dx9: Also check for a valid alpha channel for TGA images.
Connor McAdams (2):
oleacc: Implement AccessibleObjectFromEvent.
winex11.drv: Add mutable pixel format awareness.
Derek Lesho (1):
kernelbase: Fix parameter order of FindResourceExW call for non-localized path.
Doug Lyons (1):
msvcrt: Do not acquire fd lock in msvcrt_create_io_inherit_block.
Eric Pouech (2):
winedbg: Fix command line arguments parsing.
cmd: Don't crash on 'if exist' without parameter.
Gabriel Ivăncescu (3):
comctl32: Redraw children when the combo box is dropped down.
user32: Redraw children when the combo box is dropped down.
ddraw: Use WINED3D_SWAPCHAIN_NO_WINDOW_CHANGES only if window is not in foreground.
Gerald Pfeifer (1):
configure: Diagnose if NetAPI is not present.
Hugh McMaster (1):
conhost: Process Ctrl-M key input.
Huw D. M. Davies (1):
user32: Set WM_CONTEXTMENU's wparam to the child window's handle.
Ismael Luceno (1):
server: Fix missing include for uid_t.
Jacek Caban (1):
ntdll: Fix handling \\.\CON path in RtlDosPathNameToNtPathName.
Jacek Konieczny (1):
winealsa.drv: Use separate port for each output device.
Louis Lenders (5):
wbemprox: Add empty DNSDomain to Win32_NetworkAdapterConfiguration.
combase: Add stub for RoOriginateError.
wsdapi: Add stub for WSDCreateDiscoveryProvider.
wbemprox: Add some properties of SoftwareLicensingProduct class.
ole32: Add stub for OleConvertIStorageToOLESTREAMEx.
Loïc Rebmeister (1):
loader: Create performance\winsat\datastore on prefix creation.
Matteo Bruni (1):
combase: Add RoSetErrorReportingFlags() stub.
Nick Fox (2):
kernel32: Add tests for LdrGetDllPath with LOAD_WITH_ALTERED_SEARCH_PATH.
ntdll: Fix LdrGetDllPath with LOAD_WITH_ALTERED_SEARCH_PATH without a path.
Nikolay Sivov (3):
d3d11: Always initialize out view pointer in CreateRenderTargetView().
include: Add WbemErrorEnum error codes.
comctl32/listview: Initialize subitem text buffer before drawing each subitem.
- Winelib modules no longer link against libwine.so, or require it at
run-time. This is a backwards incompatible change, meaning that
modules built with Wine 6.0 won't run on older Wine versions.
Olivier F. R. Dierick (1):
taskschd: Set count to zero in regtasks_get_Count stub.
- The libwine library is no longer used, but it's still provided to
support running Winelib modules built against older versions. It is
deprecated however, and will be removed in a future Wine
release. Applications that explicitly call libwine functions will
need to be changed to call equivalent Win32 or Unix APIs instead.
As a consequence, the wine/library.h header has also been removed.
Piotr Caban (5):
msvcp100: Export ctype<char>::table function.
oleacc: Add AccessibleObjectFromPoint implementation.
msvcrt: Don't use GetDaylightFlag function in _ftime64.
vcruntime140_1: Add support for exception separated code segments.
ucrtbase: Add support for r-value demangling in unDName.
- PE modules can be built with their debug information split to a
separate file, to reduce the size of the files installed into the
Wine prefix.
Robert Wilhelm (1):
vbscript: Support VT_BSTR in stack_pop_bool.
Rémi Bernon (1):
ntdll: Use the unrolled memset from msvcrt.
*** Direct3D
Thomas Faber (1):
msvcrt/tests: Show that spawn does not require locking of fds.
- An experimental Vulkan renderer for WineD3D is implemented. This
requires the vkd3d-shader library in order to translate Direct3D
shaders to SPIR-V shaders. In this release, shader support in the
Vulkan renderer is limited to shader model 4 and 5 shaders. In
practice, that limits its usefulness to Direct3D 10 and 11
applications. The Vulkan renderer can be enabled by setting the
Direct3D "renderer" registry setting to "vulkan".
- The following Direct3D 11 features are implemented:
- Per render-target ("independent") blend states.
- Dual-source blending.
- Multi-sample anti-aliasing sample masks.
- Several more capability queries.
- Support for Direct3D 9 alpha-to-coverage multi-sampling is
implemented.
- When the EXT_framebuffer_multisample_blit_scaled OpenGL extension is
available, scaled multi-sample resolve operations can happen as a
single operation.
- When the ARB_buffer_storage OpenGL extension is available, it will
be used to allocate OpenGL buffer objects. This can result in minor
performance improvements with some application and driver
combinations.
- The Direct3D graphics card database recognizes more graphics cards,
and the reported driver versions have been updated.
- New or modified HKEY_CURRENT_USER\Software\Wine\Direct3D registry keys:
- "renderer" (REG_SZ)
The backend API to target. This existing setting has an additional
valid value in this release: "vulkan". Possible values are now
"gl" (default) for OpenGL, "gdi" or "no3d" for GDI, and "vulkan"
for Vulkan.
- "csmt" (REG_DWORD)
Enable or disable multi-threaded command stream features. This
existing setting has an additional valid bit-field value in this
release. Valid bit-fields in this release are:
- 0x1 Enable the multi-threaded command stream feature.
- 0x2 Enable serialization between multiple command streams in the
same application. This feature is primarily useful for
applications using multiple Direct3D instances from
different threads, in combination with OpenGL drivers that
do not properly support multi-threaded access themselves. As
of this release, this is known to affect Microsoft Office
2013 and later versions in combination with the Mesa-based
Nouveau driver.
Note that this setting is a bit-field; in order to enable both
features above, set this to 0x3.
- Removed HKEY_CURRENT_USER\Software\Wine\Direct3D registry key:
- "DirectDrawRenderer"
This setting was previously deprecated in favor of the "renderer"
setting, and has been removed in this release.
*** D3DX
- Drawing text using the ID3DXFont interface is implemented.
- The ID3D12ShaderReflection shader reflection interface is
implemented.
- The D3DX10GetImageInfoFromMemory() and related image information
query functions are implemented.
*** Graphics
- Drawing arcs, ellipses and rounded rectangles using the Direct2D API
is implemented.
- The standard sRGB color profile is installed into the prefix, for
applications that expect to load it directly.
- The Null display driver can be used as a proper display driver, for
cases when a user interface is not needed.
- WindowsCodecs supports decoding images in DDS (DirectDraw Surface)
and JPEG-XR formats, as well as encoding images to GIF format.
- The Vulkan driver creates the JSON manifest and registry entry used
by the official Vulkan loader.
- The Vulkan driver supports up to version 1.2.162 of the Vulkan spec.
- There are a number of improvements in GdiPlus, including support for
widening lines, more hatch styles, and more record types in
metafiles.
*** Audio / video
- The Media Foundation framework is more complete, including:
- Initial Media Session implementation for state changes and data
flow.
- Initial Streaming Audio Renderer (SAR) pipeline component
implementation.
- Initial Video Renderer implementation, a pipeline component
hosting EVR mixer and presenter.
- Initial Topology Loader implementation.
- Various fixes for the Source Reader.
- Initial Media Engine implementation.
- Asynchronous queues functionality is moved to rtworkq.dll.
- The AMStream (ActiveMovie Multimedia Streaming) library is more
fully implemented, including support for streaming and sample
management.
- The Video Mixing Renderer supports the following features:
- Windowless and renderless mode.
- Automatic stretching and resizing of the video to match the window
size.
- Hardware-accelerated color space conversion of YUV formats, if
supported by the underlying Direct3D implementation.
- Preservation of video aspect ratio via letterboxing.
- The Video Mixing Renderer is used as the default video renderer if
supported by the underlying Direct3D implementation, replacing the
GDI video renderer.
- The DirectShow File Writer filter is implemented.
- The DirectX Media Object (DMO) Wrapper filter is implemented. DMOs
can be automatically enumerated and plugged into the filter graph.
- The video capture filter supports reporting more information about
video formats, including supported sizes and frame rates.
- More Media Detector APIs are implemented.
- The GStreamer wrapper filter supports video and audio format
conversion within the GStreamer pipeline. This obviates the need for
extra transform filters, and accordingly the GStreamer-based YUV to
ARGB converter, audio converter, and mp3 decoder have been
removed. Any video can be output in any of several RGB and YUV
formats, allowing for better performance in some cases.
- The Enhanced Video Renderer (EVR) contains an initial default mixer
and presenter implementation using DXVA2 API.
- The XACT3 (Cross-platform Audio Creation) engine library and
interfaces are implemented through FAudio.
*** Text and fonts
- Text console support is reimplemented, using the architecture of
recent Windows versions, which is closer to the Unix way of doing
things. In particular:
- Pseudo consoles are implemented (equivalent to Unix pseudo TTYs).
- All console handling is done in the ConHost process. WineConsole
is now only a thin wrapper around ConHost.
- ConHost handles VT escape sequences, meaning that the Unix Curses
library is no longer needed.
- Default shaping features are enabled for all scripts in
DirectWrite. All types of GSUB/GPOS lookups are supported.
- In DirectWrite, CMAP data is read directly from the font without
global cache or a need to create FreeType objects, for improved
performance.
- The font initialization in GDI32 avoids loading fonts through
FreeType when possible, for faster startup times. The font registry
cache is also more efficient.
- The Uniscribe support in the USP10 library is moved into GDI32, as
per recent Windows versions.
- An initial version of the Webdings font is implemented, with only a
few glyphs at this point.
*** Input devices
- Raw input devices and messages are implemented, and used by
DirectInput instead of less efficient low-level hooks.
- An initial USB kernel driver is implemented, based on the LibUSB
library, to provide access to USB devices.
- Mouse position history is implemented, for games that want more
precise mouse positions.
- SDL controller mappings can be set through the
'SDL_GAMECONTROLLERCONFIG' environment variable.
- Plug & Play device notifications are implemented.
*** Desktop integration
- Display settings are retrieved through XRandR 1.4 if available. This
also provides support for multiple display orientations.
- There is a consistent view of the graphics adapters across the X11,
OpenGL and Vulkan APIs.
- The desktop work area layout is supported on multi-monitor setups
using the _GTK_WORKAREAS property.
*** Internationalization
- Unicode character tables are based on version 13.0.0 of the Unicode
Standard.
- Unicode normalization is fully standard-compliant, including support
for Hangul, supplementary character planes, and IDN normalization.
- Codepage and other Unicode tables are stored in external NLS files
compatible with Windows. This makes it possible to test with the
native files to track down character mapping issues.
- Codepage mapping tables are generated from Microsoft's Open
Specification data for better compatibility.
- Unicode linguistic case mappings for languages like Turkish are
implemented.
- Codepage 708 (Arabic ASMO) is supported.
*** Kernel
- Windows version compatibility mode is implemented, to only report
the newest Windows versions to applications that have declared that
they support them.
- INI file mappings are implemented, to redirect .ini file entries to
registry keys.
- Many more NT kernel objects and functions are implemented, to
support anti-cheat systems that load kernel drivers.
- A NetIO.sys kernel driver is implemented, to support copy protection
drivers that want to access the network.
- AVX registers are supported in register contexts and exception
handling on x86 platforms.
- The Kernel User Shared Data block contains up-to-date timestamps, to
avoid system calls when retrieving the current time counter.
*** C Runtime
- The C runtime import libraries provide the necessary runtime support
so that PE modules no longer depend on the MinGW runtime.
- The Wine modules are all built against the new UCRT runtime.
- Winegcc uses the new UCRT runtime by default, unless an older C
runtime library is explicitly imported.
- The C runtime supports Windows locales that use the UTF-8 codepage.
- A number of C runtime math functions are implemented internally
based on code from the Musl C library, to avoid depending on the
system math library.
- Floating point formatting is reimplemented in the C runtime to avoid
depending on the system printf function.
*** Internet and networking
- The Gecko engine is updated to version 2.47.2.
- The WebSocket API is implemented.
- JScript and VBScript report the correct location for errors in
scripts.
- There are various improvements to the LDAP and Active Directory
Service support.
- There is an initial implementation of the NDIS network driver.
- The OLE data link dialog supports configuring the ODBC data
connection.
*** Cryptography
- The BCrypt library supports additional algorithms, including DSA
keys and the 3DES cipher.
- The DSSENH (Digital Signatures) Cryptographic Provider is
implemented, and enabled by default.
*** Alternative platforms
- Support for exception handling and stack unwinding on ARM platforms
(both 32-bit and 64-bit) should be on par with the x86
architectures.
- There is initial support for ARM64 on macOS, for the new Apple
Silicon.
- Support for the obsolete 32-bit PowerPC architecture is removed. It
had been broken for some time already.
- Case-insensitive filesystem optimizations are enabled on FreeBSD.
*** Builtin applications
- WineCfg supports querying and modifying the configured Windows
version through the command line with a new /v option.
- The Shell Folders configuration in WineCfg also supports the
Downloads and Templates folders.
- The removable drive autodetection has been removed in WineCfg, now
that the dbus dynamic device support is stable.
- The FSUTIL tool supports a 'hardlink' command to create hard links.
- The FIND tool supports searching multiple files, in addition to
standard input.
- The WHOAMI tool is implemented to display the current username.
*** Development tools
- Winegcc supports generating PDB files when building PE DLLs, for
compatibility with Windows debuggers.
- DbgHelp supports GNU-style debug information also in PE files.
- Winegcc can generate an import library directly when building a DLL,
with the '-Wl,--out-implib' option.
- The various build tools also look for include and library files in
paths relative to the tool binary, to allow relocatable Winelib
installations.
- The Resource Compiler (wrc) and Message Compiler (wmc) use the
external NLS files for codepage conversions. If necessary, the path
to the external files can be specified with the '--nls-dir' option.
- There are various improvements in the gdb proxy mode in WineDbg,
including support for hardware watchpoints, and for loading symbols
from PE modules.
- The Message Compiler (wmc) handles the Unicode BOM to detect the
input file format.
- The Resource Compiler (wrc) has a '--utf8' option to specify UTF-8
input, as an alternative to putting #pragma codepage inside the
file.
- The IDL compiler (widl) supports a WinRT mode, and various
constructs specific to that mode.
- The IDL compiler (widl) supports custom attributes in type
libraries.
*** Build infrastructure
- Makefiles are no longer recursive; a single Makefile is generated to
build the entire tree, with correct dependencies between modules.
- Automake-style silent build rules are supported. They are disabled
by default, but can be enabled by passing the '--enable-silent-rules'
option to configure.
- The new LLVM-MinGW compiler is supported for PE cross-compilation.
- Building with the Clang compiler in MSVC mode is supported.
- A '-syscall' entry point flag is supported in spec files, to
generate NT-style system call entry points.
*** Miscellaneous
- The Mono engine is updated to version 5.1.1, containing the open
sourced parts of the WPF framework, and initial replacements for
some of the closed source parts.
- Most modules have been converted to use wide-character string
constants like L"abc" instead of explicit arrays, for more readable
code.
- Many of the less common timezones (for various remote islands) are
supported.
- Listviews and image buttons are supported in MSI installers.
- There is initial support for the Print Ticket API.
*** New external dependencies
- The LibUSB library is used to implement the USB driver.
- The VkD3D-Shader library is used to translate Direct3D shaders to
SPIR-V shaders for the WineD3D Vulkan renderer.
- The Curses, GLU, and Zlib libraries are no longer used.
Zebediah Figura (1):
ntdll/tests: Add more tests for RtlDosPathNameToNtPathName_U().
Zhiyi Zhang (1):
comctl32/button: Support image list margin for buttons with BS_CENTER or BS_VCENTER.
--
Alexandre Julliard
julliard@winehq.org
Michael Stefaniuc
mstefani@winehq.org

17
AUTHORS
View File

@ -112,6 +112,7 @@ Andrej Znidarsic
Andre Malafaya Baptista
Andrew Bogott
Andrew Borodin
Andrew Boyarshin
Andrew Bulhak
Andrew Church
Andrew Cook
@ -194,6 +195,7 @@ Bernd Fuhrmann
Bernd Herd
Bernd Paysan
Bernd Schmidt
Bernhard Kölbl
Bernhard Loos
Bernhard Reiter
Bernhard Rosenkränzer
@ -395,6 +397,7 @@ David Quintana
David Smith
David Torok
David Welch
David White
David Woodhouse
Davin McCall
Dean M Greer
@ -425,6 +428,7 @@ Don Kelly
Donna Whisnant
Donn Miller
Douglas Ridgway
Doug Lyons
Doug Paul
Drew Ronneberg
Dridi Boukelmoune
@ -505,11 +509,13 @@ Filip Frąckiewicz
Filip Navara
Finlo Boyde
Flávio J. Saraiva
Florian Eder
Florian Goth
Florian Köberle
Florian Pelz
Florian Tobias Schandinat
Florian Will
Floris Renaud
Fons Botman
Francesco Di Punzio
Francesco Noferi
@ -624,6 +630,7 @@ Hilko Bengen
Hin-Tak Leung
Hippocrates Sendoukas
Hirofumi Katayama
Hiroki Awata
Hiroshi Inoue
Hiroshi Miura
Hiroshi Tanabe
@ -657,6 +664,7 @@ Ingo Schneider
Isabella Bosia
Isira Seneviratne
Ismael Barros
Ismael Luceno
İsmail Dönmez
Itai Nahshon
Ivan de Saedeleer
@ -824,6 +832,7 @@ John Sheu
John Thomson
John Voltz
John Zero
John Zourlios
Jonas Maebe
Jonas Wielicki
Jonathan Buzzard
@ -891,6 +900,7 @@ Kai Krakow
Kai Morich
Kai Tietz
Kaj Kaloinen
Kalen Alwardt
Kalevi J Hautaniemi
Kamil Pošvic
Kanit Therdsteerasukdi
@ -994,6 +1004,7 @@ Lionel Ulmer
Liu Spider
Loïc Hoguin
Loïc Maury
Loïc Rebmeister
Louis Lenders
Louis Philippe Gagnon
L. Rahyen
@ -1150,6 +1161,7 @@ Michal Pasternak
Michal Suchanek
Michał Wiernowolski
Michał Ziętek
Michele Dionisio
Michiel van Loon
Miguel de Icaza
Mihail Ivanchev
@ -1198,9 +1210,11 @@ Neil Olver
Neil Skrypuch
Nemeth Peter
Nerijus Baliunas
Nguyễn Chính Hữu
Nicholas Niro
Nick Bowler
Nick Burns
Nick Fox
Nick Holloway
Nickolay V. Shmyrev
Niclas Karlsson
@ -1230,6 +1244,7 @@ Ofir Petruska
Olaf Flebbe
Oldřich Jedlička
Oleg Bosis
Oleg Dubinskiy
Oleg Korda
Oleg Krylov
Oleg Prokhorov
@ -1473,6 +1488,7 @@ Samuele Guerrini
Samuel Lidén Borell
Sander van Leeuwen
Sandijs Ribaks
Sanghoon Park
Santosh Siddheshwar
Sasha Slijepcevic
Sato Kazuyuki
@ -1577,6 +1593,7 @@ Sylvain Petreolle
Sylvain St-Germain
Tapio Kautto
Tatyana Fokina
Ted Lyngmo
Ted Percival
Thanasis Papoutsidakis
Theodore Dubois

4
README
View File

@ -75,7 +75,7 @@ Supported file systems:
Basic requirements:
You need to have the X11 development include files installed
(called xlib6g-dev in Debian and XFree86-devel in Red Hat).
(called xorg-dev in Debian and libX11-devel in Red Hat).
Of course you also need "make" (most likely GNU make).
@ -159,7 +159,7 @@ Bugs: Report bugs to Wine Bugzilla at https://bugs.winehq.org
Please search the bugzilla database to check whether your
problem is already known or fixed before posting a bug report.
IRC: Online help is available at channel #WineHQ on irc.freenode.net.
IRC: Online help is available at channel #WineHQ on irc.libera.chat.
Git: The current Wine development tree is available through Git.
Go to https://www.winehq.org/git for more information.

View File

@ -1 +1 @@
Wine version 6.0
Wine version 6.0.4

60
configure vendored
View File

@ -1,6 +1,6 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
# Generated by GNU Autoconf 2.69 for Wine 6.0.
# Generated by GNU Autoconf 2.69 for Wine 6.0.4.
#
# Report bugs to <wine-devel@winehq.org>.
#
@ -580,8 +580,8 @@ MAKEFLAGS=
# Identity of this package.
PACKAGE_NAME='Wine'
PACKAGE_TARNAME='wine'
PACKAGE_VERSION='6.0'
PACKAGE_STRING='Wine 6.0'
PACKAGE_VERSION='6.0.4'
PACKAGE_STRING='Wine 6.0.4'
PACKAGE_BUGREPORT='wine-devel@winehq.org'
PACKAGE_URL='https://www.winehq.org'
@ -2492,7 +2492,7 @@ if test "$ac_init_help" = "long"; then
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
\`configure' configures Wine 6.0 to adapt to many kinds of systems.
\`configure' configures Wine 6.0.4 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@ -2562,7 +2562,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
short | recursive ) echo "Configuration of Wine 6.0:";;
short | recursive ) echo "Configuration of Wine 6.0.4:";;
esac
cat <<\_ACEOF
@ -2711,8 +2711,8 @@ Some influential environment variables:
SDL2_CFLAGS C compiler flags for sdl2, overriding pkg-config
SDL2_LIBS Linker flags for sdl2, overriding pkg-config
FAUDIO_CFLAGS
C compiler flags for faudio, overriding pkg-config
FAUDIO_LIBS Linker flags for faudio, overriding pkg-config
C compiler flags for FAudio, overriding pkg-config
FAUDIO_LIBS Linker flags for FAudio, overriding pkg-config
CAPI20_CFLAGS
C compiler flags for capi20, overriding pkg-config
CAPI20_LIBS Linker flags for capi20, overriding pkg-config
@ -2816,7 +2816,7 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
Wine configure 6.0
Wine configure 6.0.4
generated by GNU Autoconf 2.69
Copyright (C) 2012 Free Software Foundation, Inc.
@ -3500,7 +3500,7 @@ cat >config.log <<_ACEOF
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
It was created by Wine $as_me 6.0, which was
It was created by Wine $as_me 6.0.4, which was
generated by GNU Autoconf 2.69. Invocation command line was
$ $0 $@
@ -8719,10 +8719,10 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
SYSTEMCONFIGURATION_LIBS="-framework SystemConfiguration"
WINELOADER_LDFLAGS="-Wl,-pie,-pagezero_size,0x1000,-sectcreate,__TEXT,__info_plist,loader/wine_info.plist"
WINELOADER_LDFLAGS="-Wl,-pie,-segalign,0x1000,-pagezero_size,0x1000,-sectcreate,__TEXT,__info_plist,loader/wine_info.plist"
wine_can_build_preloader=yes
WINEPRELOADER_LDFLAGS="-nostartfiles -nodefaultlibs -e _start -ldylib1.o -Wl,-image_base,0x7d400000,-pagezero_size,0x1000,-sectcreate,__TEXT,__info_plist,loader/wine_info.plist"
WINEPRELOADER_LDFLAGS="-nostartfiles -nodefaultlibs -e _start -ldylib1.o -Wl,-image_base,0x7d400000,-segalign,0x1000,-pagezero_size,0x1000,-sectcreate,__TEXT,__info_plist,loader/wine_info.plist,-segaddr,WINE_4GB_RESERVE,0x100000000"
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports -Wl,-no_new_main -e _main" >&5
$as_echo_n "checking whether the compiler supports -Wl,-no_new_main -e _main... " >&6; }
if ${ac_cv_cflags__Wl__no_new_main__e__main+:} false; then :
@ -14015,7 +14015,7 @@ else
int
main ()
{
if (!(_res.options & RES_INIT)) res_init(); res_query("foo",ns_c_in,0,0,0)
if (!(_res.options & RES_INIT)) res_init(); res_query("foo",ns_c_in,0,0,0); ns_initparse(0,0,0)
;
return 0;
}
@ -14491,16 +14491,7 @@ $as_echo "$as_me:${as_lineno-$LINENO}: gstreamer-1.0 gstreamer-video-1.0 gstream
$as_echo "$as_me:${as_lineno-$LINENO}: gstreamer-1.0 gstreamer-video-1.0 gstreamer-audio-1.0 libs: $GSTREAMER_LIBS" >&5
ac_save_CPPFLAGS=$CPPFLAGS
CPPFLAGS="$CPPFLAGS $GSTREAMER_CFLAGS"
ac_gst_incl=""
for i in $GSTREAMER_CFLAGS
do
case "$i" in
-I*) ac_gst_incl="$ac_gst_incl $i";;
esac
done
GSTREAMER_CFLAGS=$ac_gst_incl
CPPFLAGS="$ac_save_CPPFLAGS $GSTREAMER_CFLAGS"
ac_fn_c_check_header_mongrel "$LINENO" "gst/gst.h" "ac_cv_header_gst_gst_h" "$ac_includes_default"
ac_fn_c_check_header_mongrel "$LINENO" "gst/gst.h" "ac_cv_header_gst_gst_h" "$ac_includes_default"
if test "x$ac_cv_header_gst_gst_h" = xyes; then :
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether gint64 defined by gst/gst.h is indeed 64-bit" >&5
$as_echo_n "checking whether gint64 defined by gst/gst.h is indeed 64-bit... " >&6; }
@ -15016,19 +15007,19 @@ if test "x$with_faudio" != "xno"
then
if ${FAUDIO_CFLAGS:+false} :; then :
if ${PKG_CONFIG+:} false; then :
FAUDIO_CFLAGS=`$PKG_CONFIG --cflags faudio 2>/dev/null`
FAUDIO_CFLAGS=`$PKG_CONFIG --cflags FAudio 2>/dev/null`
fi
fi
if ${FAUDIO_LIBS:+false} :; then :
if ${PKG_CONFIG+:} false; then :
FAUDIO_LIBS=`$PKG_CONFIG --libs faudio 2>/dev/null`
FAUDIO_LIBS=`$PKG_CONFIG --libs FAudio 2>/dev/null`
fi
fi
FAUDIO_LIBS=${FAUDIO_LIBS:-"-lFAudio"}
$as_echo "$as_me:${as_lineno-$LINENO}: faudio cflags: $FAUDIO_CFLAGS" >&5
$as_echo "$as_me:${as_lineno-$LINENO}: faudio libs: $FAUDIO_LIBS" >&5
$as_echo "$as_me:${as_lineno-$LINENO}: FAudio cflags: $FAUDIO_CFLAGS" >&5
$as_echo "$as_me:${as_lineno-$LINENO}: FAudio libs: $FAUDIO_LIBS" >&5
ac_save_CPPFLAGS=$CPPFLAGS
CPPFLAGS="$CPPFLAGS $FAUDIO_CFLAGS"
for ac_header in FAudio.h
@ -16469,6 +16460,17 @@ fi
CPPFLAGS=$ac_save_CPPFLAGS
fi
if test "x$ac_cv_lib_soname_netapi" = "x"
then :
case "x$with_netapi" in
x) as_fn_append wine_notices "|libnetapi not found, Samba NetAPI won't be supported." ;;
xno) ;;
*) as_fn_error $? "libnetapi not found, Samba NetAPI won't be supported.
This is an error since --with-netapi was requested." "$LINENO" 5 ;;
esac
enable_netapi=${enable_netapi:-no}
fi
if test "x$enable_winealsa_drv$enable_winecoreaudio_drv$enable_winepulse_drv$enable_wineoss_drv$enable_wineandroid_drv" = xnonononono -a \
"x$with_alsa$with_coreaudio$with_oss$with_pulse" != xnononono
@ -17769,6 +17771,7 @@ for ac_func in \
setprogname \
sigprocmask \
symlink \
sysinfo \
tcdrain \
thr_kill2
@ -20534,6 +20537,7 @@ wine_fn_config_makefile dlls/msvcp120_app enable_msvcp120_app
wine_fn_config_makefile dlls/msvcp140 enable_msvcp140
wine_fn_config_makefile dlls/msvcp140/tests enable_tests
wine_fn_config_makefile dlls/msvcp140_1 enable_msvcp140_1
wine_fn_config_makefile dlls/msvcp140_1/tests enable_tests
wine_fn_config_makefile dlls/msvcp60 enable_msvcp60
wine_fn_config_makefile dlls/msvcp60/tests enable_tests
wine_fn_config_makefile dlls/msvcp70 enable_msvcp70
@ -21681,7 +21685,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
This file was extended by Wine $as_me 6.0, which was
This file was extended by Wine $as_me 6.0.4, which was
generated by GNU Autoconf 2.69. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@ -21752,7 +21756,7 @@ _ACEOF
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
ac_cs_version="\\
Wine config.status 6.0
Wine config.status 6.0.4
configured by $0, generated by GNU Autoconf 2.69,
with options \\"\$ac_cs_config\\"

View File

@ -742,10 +742,10 @@ case $host_os in
AC_SUBST(APPKIT_LIBS,"-framework AppKit")
AC_SUBST(SYSTEMCONFIGURATION_LIBS,"-framework SystemConfiguration")
WINELOADER_LDFLAGS="-Wl,-pie,-pagezero_size,0x1000,-sectcreate,__TEXT,__info_plist,loader/wine_info.plist"
WINELOADER_LDFLAGS="-Wl,-pie,-segalign,0x1000,-pagezero_size,0x1000,-sectcreate,__TEXT,__info_plist,loader/wine_info.plist"
wine_can_build_preloader=yes
WINEPRELOADER_LDFLAGS="-nostartfiles -nodefaultlibs -e _start -ldylib1.o -Wl,-image_base,0x7d400000,-pagezero_size,0x1000,-sectcreate,__TEXT,__info_plist,loader/wine_info.plist"
WINEPRELOADER_LDFLAGS="-nostartfiles -nodefaultlibs -e _start -ldylib1.o -Wl,-image_base,0x7d400000,-segalign,0x1000,-pagezero_size,0x1000,-sectcreate,__TEXT,__info_plist,loader/wine_info.plist,-segaddr,WINE_4GB_RESERVE,0x100000000"
WINE_TRY_CFLAGS([-Wl,-no_new_main -e _main],
[WINEPRELOADER_LDFLAGS="-Wl,-no_new_main $WINEPRELOADER_LDFLAGS"
WINE_TRY_CFLAGS([-Wl,-no_new_main -e _main -nostartfiles -nodefaultlibs],,
@ -1482,7 +1482,7 @@ then
AC_LINK_IFELSE([AC_LANG_PROGRAM([[#ifdef HAVE_NETINET_IN_H
#include <netinet/in.h>
#endif
#include <resolv.h>]],[[if (!(_res.options & RES_INIT)) res_init(); res_query("foo",ns_c_in,0,0,0)]])],
#include <resolv.h>]],[[if (!(_res.options & RES_INIT)) res_init(); res_query("foo",ns_c_in,0,0,0); ns_initparse(0,0,0)]])],
[ac_cv_have_resolv=${lib:-"none required"}],[ac_cv_have_resolv="not found"])
test "x$ac_cv_have_resolv" = "xnot found" || break
done
@ -1588,16 +1588,7 @@ dnl **** Check for gstreamer ****
if test "x$with_gstreamer" != "xno"
then
WINE_PACKAGE_FLAGS(GSTREAMER,[gstreamer-1.0 gstreamer-video-1.0 gstreamer-audio-1.0],,,,
[ac_gst_incl=""
for i in $GSTREAMER_CFLAGS
do
case "$i" in
-I*) ac_gst_incl="$ac_gst_incl $i";;
esac
done
GSTREAMER_CFLAGS=$ac_gst_incl
CPPFLAGS="$ac_save_CPPFLAGS $GSTREAMER_CFLAGS"
AC_CHECK_HEADER([gst/gst.h],
[AC_CHECK_HEADER([gst/gst.h],
[AC_MSG_CHECKING([whether gint64 defined by gst/gst.h is indeed 64-bit])
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <gst/gst.h>]],
[[static int a[sizeof(gint64) > 4 ? 1 : -1]; if (a[0]) return 0;]])],
@ -1704,7 +1695,7 @@ WINE_NOTICE_WITH(sdl,[test "x$ac_cv_lib_soname_SDL2" = "x"],
dnl **** Check for FAudio ****
if test "x$with_faudio" != "xno"
then
WINE_PACKAGE_FLAGS(FAUDIO,[faudio],[-lFAudio],,,
WINE_PACKAGE_FLAGS(FAUDIO,[FAudio],[-lFAudio],,,
[AC_CHECK_HEADERS([FAudio.h],
[WINE_CHECK_SONAME(FAudio,FAudioCreate,,,[$FAUDIO_LIBS],[[libFAudio*]])])
WINE_CHECK_LIB_FUNCS([FAudio_CommitOperationSet \
@ -1939,6 +1930,10 @@ then
WINE_PACKAGE_FLAGS(NETAPI,[netapi],,,,
[WINE_CHECK_SONAME(netapi,libnetapi_init,,[AC_DEFINE_UNQUOTED(SONAME_LIBNETAPI,["libnetapi.$LIBEXT"])],[$NETAPI_LIBS])])
fi
WINE_NOTICE_WITH(netapi,[test "x$ac_cv_lib_soname_netapi" = "x"],
[libnetapi not found, Samba NetAPI won't be supported.],
[enable_netapi])
dnl **** Check for any sound system ****
if test "x$enable_winealsa_drv$enable_winecoreaudio_drv$enable_winepulse_drv$enable_wineoss_drv$enable_wineandroid_drv" = xnonononono -a \
@ -2169,6 +2164,7 @@ AC_CHECK_FUNCS(\
setprogname \
sigprocmask \
symlink \
sysinfo \
tcdrain \
thr_kill2
)
@ -3456,6 +3452,7 @@ WINE_CONFIG_MAKEFILE(dlls/msvcp120_app)
WINE_CONFIG_MAKEFILE(dlls/msvcp140)
WINE_CONFIG_MAKEFILE(dlls/msvcp140/tests)
WINE_CONFIG_MAKEFILE(dlls/msvcp140_1)
WINE_CONFIG_MAKEFILE(dlls/msvcp140_1/tests)
WINE_CONFIG_MAKEFILE(dlls/msvcp60)
WINE_CONFIG_MAKEFILE(dlls/msvcp60/tests)
WINE_CONFIG_MAKEFILE(dlls/msvcp70)

View File

@ -1,7 +1,7 @@
EXTRADEFS = -D_ADVAPI32_
MODULE = advapi32.dll
IMPORTLIB = advapi32
IMPORTS = kernelbase sechost
IMPORTS = kernelbase sechost msvcrt
DELAYIMPORTS = rpcrt4
EXTRADLLFLAGS = -mno-cygwin

View File

@ -452,7 +452,7 @@
@ stub LsaDelete
@ stdcall LsaDeleteTrustedDomain(ptr ptr)
@ stdcall LsaEnumerateAccountRights(ptr ptr ptr ptr)
@ stub LsaEnumerateAccounts
@ stdcall LsaEnumerateAccounts(ptr ptr ptr long ptr)
@ stdcall LsaEnumerateAccountsWithUserRight(ptr ptr ptr ptr)
@ stub LsaEnumeratePrivileges
@ stub LsaEnumeratePrivilegesOfAccount

View File

@ -236,6 +236,22 @@ NTSTATUS WINAPI LsaEnumerateAccountRights(
return STATUS_OBJECT_NAME_NOT_FOUND;
}
/******************************************************************************
* LsaEnumerateAccounts [ADVAPI32.@]
*
*/
NTSTATUS WINAPI LsaEnumerateAccounts(
LSA_HANDLE policy,
PLSA_ENUMERATION_HANDLE context,
PVOID *buffer,
ULONG maxlen,
PULONG count)
{
FIXME("(%p,%p,%p,%d,%p) stub\n", policy, context, buffer, maxlen, count);
if (count) *count = 0;
return STATUS_NO_MORE_ENTRIES;
}
/******************************************************************************
* LsaEnumerateAccountsWithUserRight [ADVAPI32.@]
*

View File

@ -1083,10 +1083,25 @@ todo_wine {
SetLastError(0xdeadbeef);
rc = AccessCheck(sd, token, DELETE, &mapping, &priv_set, &priv_set_len, &granted, &status);
ok(rc, "AccessCheck error %d\n", GetLastError());
todo_wine {
ok(status == 1, "expected 1, got %d\n", status);
ok(granted == DELETE, "expected DELETE, got %#x\n", granted);
}
granted = 0xdeadbeef;
status = 0xdeadbeef;
SetLastError(0xdeadbeef);
rc = AccessCheck(sd, token, WRITE_OWNER, &mapping, &priv_set, &priv_set_len, &granted, &status);
ok(rc, "AccessCheck error %d\n", GetLastError());
ok(status == 1, "expected 1, got %d\n", status);
ok(granted == WRITE_OWNER, "expected WRITE_OWNER, got %#x\n", granted);
granted = 0xdeadbeef;
status = 0xdeadbeef;
SetLastError(0xdeadbeef);
rc = AccessCheck(sd, token, SYNCHRONIZE, &mapping, &priv_set, &priv_set_len, &granted, &status);
ok(rc, "AccessCheck error %d\n", GetLastError());
ok(status == 1, "expected 1, got %d\n", status);
ok(granted == SYNCHRONIZE, "expected SYNCHRONIZE, got %#x\n", granted);
granted = 0xdeadbeef;
status = 0xdeadbeef;
SetLastError(0xdeadbeef);

View File

@ -18,9 +18,9 @@
#define WINE_FILEDESCRIPTION_STR "Wine advapi32 dll"
#define WINE_FILENAME_STR "advapi32.dll"
#define WINE_FILEVERSION 5,1,2600,2180
#define WINE_FILEVERSION_STR "5.1.2600.2180"
#define WINE_PRODUCTVERSION 5,1,2600,2180
#define WINE_PRODUCTVERSION_STR "5.1.2600.2180"
#define WINE_FILEVERSION 10,0,10240,16384
#define WINE_FILEVERSION_STR "10.0.10240.16384"
#define WINE_PRODUCTVERSION 10,0,10240,16384
#define WINE_PRODUCTVERSION_STR "10.0.10240.16384"
#include "wine/wine_common_ver.rc"

View File

@ -77,6 +77,7 @@ struct ddraw_sample
STREAM_TIME end_time;
BOOL continuous_update;
CONDITION_VARIABLE update_cv;
HANDLE external_event;
struct list entry;
HRESULT update_hr;
@ -91,6 +92,8 @@ static void remove_queued_update(struct ddraw_sample *sample)
sample->busy = FALSE;
list_remove(&sample->entry);
WakeConditionVariable(&sample->update_cv);
if (sample->external_event)
SetEvent(sample->external_event);
}
static void flush_update_queue(struct ddraw_stream *stream, HRESULT update_hr)
@ -1583,12 +1586,6 @@ static HRESULT WINAPI ddraw_sample_Update(IDirectDrawStreamSample *iface,
return E_NOTIMPL;
}
if (event)
{
FIXME("Event parameter support is not implemented!\n");
return E_NOTIMPL;
}
EnterCriticalSection(&sample->parent->cs);
if (sample->parent->state != State_Running)
@ -1612,10 +1609,11 @@ static HRESULT WINAPI ddraw_sample_Update(IDirectDrawStreamSample *iface,
sample->update_hr = MS_S_NOUPDATE;
sample->busy = TRUE;
sample->external_event = event;
list_add_tail(&sample->parent->update_queue, &sample->entry);
WakeConditionVariable(&sample->parent->update_queued_cv);
if (flags & SSUPDATE_ASYNC)
if ((flags & SSUPDATE_ASYNC) || event)
{
LeaveCriticalSection(&sample->parent->cs);
return MS_S_PENDING;

View File

@ -466,9 +466,12 @@ static HRESULT WINAPI multimedia_stream_OpenFile(IAMMultiMediaStream *iface,
if (SUCCEEDED(ret = IGraphBuilder_QueryInterface(This->graph, &IID_IFilterGraph2, (void **)&graph)))
{
ret = IFilterGraph2_RenderEx(graph, This->ipin, AM_RENDEREX_RENDERTOEXISTINGRENDERERS, NULL);
DWORD renderflags = (flags & AMMSF_RENDERALLSTREAMS) ? 0 : AM_RENDEREX_RENDERTOEXISTINGRENDERERS;
ret = IFilterGraph2_RenderEx(graph, This->ipin, renderflags, NULL);
if (ret == VFW_E_CANNOT_RENDER) ret = VFW_E_CANNOT_CONNECT;
else if (ret == VFW_S_PARTIAL_RENDER) ret = S_OK;
IFilterGraph2_Release(graph);
}
else

View File

@ -450,6 +450,50 @@ static void test_openfile(const WCHAR *test_avi_path)
ref = IAMMultiMediaStream_Release(mmstream);
ok(!ref, "Got outstanding refcount %d.\n", ref);
mmstream = create_ammultimediastream();
hr = IAMMultiMediaStream_GetFilterGraph(mmstream, &graph);
ok(hr == S_OK, "Got hr %#x.\n", hr);
ok(!graph, "Expected NULL graph.\n");
hr = IAMMultiMediaStream_GetFilter(mmstream, &filter);
ok(!!filter, "Expected non-NULL filter.\n");
ok(hr == S_OK, "Got hr %#x.\n", hr);
check_interface(filter, &IID_IMediaSeeking, FALSE);
hr = IAMMultiMediaStream_OpenFile(mmstream, test_avi_path, AMMSF_RENDERALLSTREAMS);
ok(hr == S_OK, "Got hr %#x.\n", hr);
check_interface(filter, &IID_IMediaSeeking, FALSE);
hr = IAMMultiMediaStream_GetFilterGraph(mmstream, &graph);
ok(hr == S_OK, "Got hr %#x.\n", hr);
ok(!!graph, "Expected non-NULL graph.\n");
hr = IGraphBuilder_QueryInterface(graph, &IID_IMediaFilter, (void **)&media_filter);
ok(hr == S_OK, "Got hr %#x.\n", hr);
hr = IAMMultiMediaStream_SetState(mmstream, STREAMSTATE_RUN);
ok(hr == S_OK, "Got hr %#x.\n", hr);
clock = NULL;
IMediaFilter_GetSyncSource(media_filter, &clock);
ok(!!clock, "Expected non-NULL clock.\n");
hr = IAMMultiMediaStream_SetState(mmstream, STREAMSTATE_STOP);
ok(hr == S_OK, "Got hr %#x.\n", hr);
ref = IAMMultiMediaStream_Release(mmstream);
ok(!ref, "Got outstanding refcount %d.\n", ref);
IMediaFilter_Release(media_filter);
ref = IGraphBuilder_Release(graph);
ok(!ref, "Got outstanding refcount %d.\n", ref);
ref = IMediaStreamFilter_Release(filter);
ok(!ref, "Got outstanding refcount %d.\n", ref);
ref = IReferenceClock_Release(clock);
ok(!ref, "Got outstanding refcount %d.\n", ref);
mmstream = create_ammultimediastream();
hr = IAMMultiMediaStream_GetFilterGraph(mmstream, &graph);
ok(hr == S_OK, "Got hr %#x.\n", hr);
@ -7795,6 +7839,19 @@ static void test_ddrawstreamsample_update(void)
hr = IAMMultiMediaStream_SetState(mmstream, STREAMSTATE_RUN);
ok(hr == S_OK, "Got hr %#x.\n", hr);
hr = IDirectDrawStreamSample_Update(stream_sample, 0, event, NULL, 0);
ok(hr == MS_S_PENDING, "Got hr %#x.\n", hr);
ok(WaitForSingleObject(event, 0) == WAIT_TIMEOUT, "Event should not be signaled.\n");
media_sample = ammediastream_allocate_sample(&source, test_data, sizeof(test_data));
hr = IMemInputPin_Receive(source.source.pMemInputPin, media_sample);
ok(hr == S_OK, "Got hr %#x.\n", hr);
ref = IMediaSample_Release(media_sample);
ok(!ref, "Got outstanding refcount %d.\n", ref);
ok(WaitForSingleObject(event, 0) == 0, "Event should be signaled.\n");
hr = IDirectDrawStreamSample_Update(stream_sample, SSUPDATE_ASYNC, NULL, NULL, 0);
ok(hr == MS_S_PENDING, "Got hr %#x.\n", hr);
EXPECT_REF(stream_sample, 1);

View File

@ -2,7 +2,7 @@
@ stub RoCaptureErrorContext
@ stub RoFailFastWithErrorContext
@ stub RoGetErrorReportingFlags
@ stub RoOriginateError
@ stdcall RoOriginateError(long ptr) combase.RoOriginateError
@ stub RoOriginateErrorW
@ stub RoResolveRestrictedErrorInfoReference
@ stub RoSetErrorReportingFlags

View File

@ -7,7 +7,7 @@
@ stub RoGetMatchingRestrictedErrorInfo
@ stub RoInspectCapturedStackBackTrace
@ stub RoInspectThreadErrorInfo
@ stub RoOriginateError
@ stdcall RoOriginateError(long ptr) combase.RoOriginateError
@ stub RoOriginateErrorW
@ stdcall RoOriginateLanguageException(long ptr ptr) combase.RoOriginateLanguageException
@ stub RoReportFailedDelegate

View File

@ -147,11 +147,11 @@
@ cdecl _o___std_type_info_destroy_list(ptr) ucrtbase._o___std_type_info_destroy_list
@ cdecl _o___std_type_info_name(ptr ptr) ucrtbase._o___std_type_info_name
@ cdecl _o___stdio_common_vfprintf(int64 ptr str ptr ptr) ucrtbase._o___stdio_common_vfprintf
@ stub _o___stdio_common_vfprintf_p
@ cdecl _o___stdio_common_vfprintf_p(int64 ptr str ptr ptr) ucrtbase._o___stdio_common_vfprintf_p
@ cdecl _o___stdio_common_vfprintf_s(int64 ptr str ptr ptr) ucrtbase._o___stdio_common_vfprintf_s
@ cdecl _o___stdio_common_vfscanf(int64 ptr str ptr ptr) ucrtbase._o___stdio_common_vfscanf
@ cdecl _o___stdio_common_vfwprintf(int64 ptr wstr ptr ptr) ucrtbase._o___stdio_common_vfwprintf
@ stub _o___stdio_common_vfwprintf_p
@ cdecl _o___stdio_common_vfwprintf_p(int64 ptr wstr ptr ptr) ucrtbase._o___stdio_common_vfwprintf_p
@ cdecl _o___stdio_common_vfwprintf_s(int64 ptr wstr ptr ptr) ucrtbase._o___stdio_common_vfwprintf_s
@ cdecl _o___stdio_common_vfwscanf(int64 ptr wstr ptr ptr) ucrtbase._o___stdio_common_vfwscanf
@ cdecl _o___stdio_common_vsnprintf_s(int64 ptr long long str ptr ptr) ucrtbase._o___stdio_common_vsnprintf_s

View File

@ -2,11 +2,11 @@
@ cdecl __p__commode() ucrtbase.__p__commode
@ cdecl __p__fmode() ucrtbase.__p__fmode
@ cdecl __stdio_common_vfprintf(int64 ptr str ptr ptr) ucrtbase.__stdio_common_vfprintf
@ stub __stdio_common_vfprintf_p
@ cdecl __stdio_common_vfprintf_p(int64 ptr str ptr ptr) ucrtbase.__stdio_common_vfprintf_p
@ cdecl __stdio_common_vfprintf_s(int64 ptr str ptr ptr) ucrtbase.__stdio_common_vfprintf_s
@ cdecl __stdio_common_vfscanf(int64 ptr str ptr ptr) ucrtbase.__stdio_common_vfscanf
@ cdecl __stdio_common_vfwprintf(int64 ptr wstr ptr ptr) ucrtbase.__stdio_common_vfwprintf
@ stub __stdio_common_vfwprintf_p
@ cdecl __stdio_common_vfwprintf_p(int64 ptr wstr ptr ptr) ucrtbase.__stdio_common_vfwprintf_p
@ cdecl __stdio_common_vfwprintf_s(int64 ptr wstr ptr ptr) ucrtbase.__stdio_common_vfwprintf_s
@ cdecl __stdio_common_vfwscanf(int64 ptr wstr ptr ptr) ucrtbase.__stdio_common_vfwscanf
@ cdecl __stdio_common_vsnprintf_s(int64 ptr long long str ptr ptr) ucrtbase.__stdio_common_vsnprintf_s

View File

@ -1404,22 +1404,52 @@ HRESULT WINAPI AtlAxGetControl(HWND hWnd, IUnknown **pUnk)
* AtlAxDialogBoxW [atl100.35]
*
*/
INT_PTR WINAPI AtlAxDialogBoxW(HINSTANCE hInstance, LPCWSTR lpTemplateName, HWND hWndParent, DLGPROC lpDialogProc,
LPARAM dwInitParam)
INT_PTR WINAPI AtlAxDialogBoxW(HINSTANCE instance, const WCHAR *name,
HWND owner, DLGPROC proc, LPARAM param)
{
FIXME("(%p %s %p %p %lx)\n", hInstance, debugstr_w(lpTemplateName), hWndParent, lpDialogProc, dwInitParam);
return 0;
HRSRC resource;
HGLOBAL global;
DLGTEMPLATE *template;
INT_PTR ret;
TRACE("instance %p, name %s, owner %p, proc %p, param %#Ix\n",
instance, debugstr_w(name), owner, proc, param);
if (!(resource = FindResourceW(instance, name, (const WCHAR *)RT_DIALOG)))
return 0;
if (!(global = LoadResource(instance, resource)))
return 0;
if (!(template = AX_ConvertDialogTemplate(LockResource(global))))
return 0;
ret = DialogBoxIndirectParamW(instance, template, owner, proc, param);
HeapFree(GetProcessHeap(), 0, template);
return ret;
}
/***********************************************************************
* AtlAxDialogBoxA [atl100.36]
*
*/
INT_PTR WINAPI AtlAxDialogBoxA(HINSTANCE hInstance, LPCSTR lpTemplateName, HWND hWndParent, DLGPROC lpDialogProc,
LPARAM dwInitParam)
INT_PTR WINAPI AtlAxDialogBoxA(HINSTANCE instance, const char *name,
HWND owner, DLGPROC proc, LPARAM param)
{
FIXME("(%p %s %p %p %lx)\n", hInstance, debugstr_a(lpTemplateName), hWndParent, lpDialogProc, dwInitParam);
return 0;
WCHAR *nameW;
int len;
INT_PTR ret;
if (IS_INTRESOURCE(name))
return AtlAxDialogBoxW(instance, (const WCHAR *)name, owner, proc, param);
len = MultiByteToWideChar(CP_ACP, 0, name, -1, NULL, 0);
if (!(nameW = malloc(len * sizeof(WCHAR))))
return 0;
MultiByteToWideChar(CP_ACP, 0, name, -1, nameW, len);
ret = AtlAxDialogBoxW(instance, nameW, owner, proc, param);
free(nameW);
return ret;
}
/***********************************************************************

View File

@ -301,7 +301,7 @@
@ stdcall RoInitialize(long)
@ stub RoInspectCapturedStackBackTrace
@ stub RoInspectThreadErrorInfo
@ stub RoOriginateError
@ stdcall RoOriginateError(long ptr)
@ stub RoOriginateErrorW
@ stdcall RoOriginateLanguageException(long ptr ptr)
@ stub RoParameterizedTypeExtraGetTypeSignature
@ -312,7 +312,7 @@
@ stub RoReportUnhandledError
@ stub RoResolveRestrictedErrorInfoReference
@ stub RoRevokeActivationFactories
@ stub RoSetErrorReportingFlags
@ stdcall RoSetErrorReportingFlags(long)
@ stub RoTransformError
@ stub RoTransformErrorW
@ stdcall RoUninitialize()

View File

@ -290,6 +290,24 @@ BOOL WINAPI RoOriginateLanguageException(HRESULT error, HSTRING message, IUnknow
return FALSE;
}
/***********************************************************************
* RoOriginateError (combase.@)
*/
BOOL WINAPI RoOriginateError(HRESULT error, HSTRING message)
{
FIXME("(%x %s) stub\n", error, debugstr_hstring(message));
return FALSE;
}
/***********************************************************************
* RoSetErrorReportingFlags (combase.@)
*/
HRESULT WINAPI RoSetErrorReportingFlags(UINT32 flags)
{
FIXME("(%08x): stub\n", flags);
return S_OK;
}
/***********************************************************************
* CleanupTlsOleState (combase.@)
*/

View File

@ -1125,7 +1125,10 @@ static void BUTTON_PositionRect(LONG style, const RECT *outerRect, RECT *innerRe
switch (style & BS_CENTER)
{
case BS_CENTER:
innerRect->left = outerRect->left + (outerRect->right - outerRect->left - width) / 2;
/* The left and right margins are added to the inner rectangle to get a new rectangle. Then
* the new rectangle is adjusted to be in the horizontal center */
innerRect->left = outerRect->left + (outerRect->right - outerRect->left - width
+ margin->left - margin->right) / 2;
innerRect->right = innerRect->left + width;
break;
case BS_RIGHT:
@ -1151,7 +1154,10 @@ static void BUTTON_PositionRect(LONG style, const RECT *outerRect, RECT *innerRe
break;
case BS_VCENTER:
default:
innerRect->top = outerRect->top + (outerRect->bottom - outerRect->top - height) / 2;
/* The top and bottom margins are added to the inner rectangle to get a new rectangle. Then
* the new rectangle is adjusted to be in the vertical center */
innerRect->top = outerRect->top + (outerRect->bottom - outerRect->top - height
+ margin->top - margin->bottom) / 2;
innerRect->bottom = innerRect->top + height;
break;
}

View File

@ -1001,8 +1001,7 @@ static void CBDropDown( LPHEADCOMBO lphc )
if( !(lphc->wState & CBF_NOREDRAW) )
RedrawWindow( lphc->self, NULL, 0, RDW_INVALIDATE |
RDW_ERASE | RDW_UPDATENOW | RDW_NOCHILDREN );
RedrawWindow( lphc->self, NULL, 0, RDW_INVALIDATE | RDW_ERASE | RDW_UPDATENOW );
EnableWindow( lphc->hWndLBox, TRUE );
if (GetCapture() != lphc->self)

View File

@ -1033,6 +1033,7 @@ DATETIME_Button_Command (DATETIME_INFO *infoPtr, WPARAM wParam, LPARAM lParam)
DWORD state = SendMessageW((HWND)lParam, BM_GETCHECK, 0, 0);
infoPtr->dateValid = (state == BST_CHECKED);
InvalidateRect(infoPtr->hwndSelf, NULL, TRUE);
DATETIME_SendDateTimeChangeNotify(infoPtr);
}
return 0;
}

View File

@ -4798,6 +4798,7 @@ static BOOL LISTVIEW_DrawItem(LISTVIEW_INFO *infoPtr, HDC hdc, INT nItem, ITERAT
lvItem.lParam = 0;
lvItem.cchTextMax = DISP_TEXT_SIZE;
lvItem.pszText = szDispText;
szDispText[0] = 0;
if (!LISTVIEW_GetItemW(infoPtr, &lvItem)) return FALSE;
if (infoPtr->dwLvExStyle & LVS_EX_FULLROWSELECT)
lvItem.state = LISTVIEW_GetItemState(infoPtr, nItem, LVIS_SELECTED);

View File

@ -1799,6 +1799,7 @@ MONTHCAL_HitTest(const MONTHCAL_INFO *infoPtr, MCHITTESTINFO *lpht)
if(!lpht || lpht->cbSize < MCHITTESTINFO_V1_SIZE) return -1;
htinfo.st = st_null;
htinfo.uHit = 0;
/* we should preserve passed fields if hit area doesn't need them */
if (lpht->cbSize == sizeof(MCHITTESTINFO))

View File

@ -1,219 +1,327 @@
@ cdecl -arch=arm ??0?$_SpinWait@$00@details@Concurrency@@QAA@P6AXXZ@Z(ptr ptr) msvcr120.??0?$_SpinWait@$00@details@Concurrency@@QAA@P6AXXZ@Z
@ thiscall -arch=i386 ??0?$_SpinWait@$00@details@Concurrency@@QAE@P6AXXZ@Z(ptr ptr) msvcr120.??0?$_SpinWait@$00@details@Concurrency@@QAE@P6AXXZ@Z
@ cdecl -arch=win64 ??0?$_SpinWait@$00@details@Concurrency@@QEAA@P6AXXZ@Z(ptr ptr) msvcr120.??0?$_SpinWait@$00@details@Concurrency@@QEAA@P6AXXZ@Z
@ cdecl -arch=arm ??0?$_SpinWait@$0A@@details@Concurrency@@QAA@P6AXXZ@Z(ptr ptr) msvcr120.??0?$_SpinWait@$0A@@details@Concurrency@@QAA@P6AXXZ@Z
@ thiscall -arch=i386 ??0?$_SpinWait@$0A@@details@Concurrency@@QAE@P6AXXZ@Z(ptr ptr) msvcr120.??0?$_SpinWait@$0A@@details@Concurrency@@QAE@P6AXXZ@Z
@ cdecl -arch=win64 ??0?$_SpinWait@$0A@@details@Concurrency@@QEAA@P6AXXZ@Z(ptr ptr) msvcr120.??0?$_SpinWait@$0A@@details@Concurrency@@QEAA@P6AXXZ@Z
@ varargs -arch=win32 ??0SchedulerPolicy@Concurrency@@QAA@IZZ(ptr long) msvcr120.??0SchedulerPolicy@Concurrency@@QAA@IZZ
@ cdecl -arch=win64 ??0SchedulerPolicy@Concurrency@@QEAA@AEBV01@@Z(ptr ptr) msvcr120.??0SchedulerPolicy@Concurrency@@QEAA@AEBV01@@Z
@ cdecl -arch=arm ??0SchedulerPolicy@Concurrency@@QAA@ABV01@@Z(ptr ptr) msvcr120.??0SchedulerPolicy@Concurrency@@QAA@ABV01@@Z
@ thiscall -arch=i386 ??0SchedulerPolicy@Concurrency@@QAE@ABV01@@Z(ptr ptr) msvcr120.??0SchedulerPolicy@Concurrency@@QAE@ABV01@@Z
@ cdecl -arch=win64 ??0SchedulerPolicy@Concurrency@@QEAA@XZ(ptr) msvcr120.??0SchedulerPolicy@Concurrency@@QEAA@XZ
@ cdecl -arch=arm ??0SchedulerPolicy@Concurrency@@QAA@XZ(ptr) msvcr120.??0SchedulerPolicy@Concurrency@@QAA@XZ
@ thiscall -arch=i386 ??0SchedulerPolicy@Concurrency@@QAE@XZ(ptr) msvcr120.??0SchedulerPolicy@Concurrency@@QAE@XZ
@ varargs -arch=win64 ??0SchedulerPolicy@Concurrency@@QEAA@_KZZ(ptr long) msvcr120.??0SchedulerPolicy@Concurrency@@QEAA@_KZZ
@ stub -arch=arm ??0_Cancellation_beacon@details@Concurrency@@QAA@XZ
@ stub -arch=i386 ??0_Cancellation_beacon@details@Concurrency@@QAE@XZ
@ stub -arch=win64 ??0_Cancellation_beacon@details@Concurrency@@QEAA@XZ
@ stub -arch=arm ??0_Concurrent_queue_base_v4@details@Concurrency@@IAA@I@Z
@ thiscall -arch=i386 ??0_Concurrent_queue_base_v4@details@Concurrency@@IAE@I@Z(ptr long) msvcp120.??0_Concurrent_queue_base_v4@details@Concurrency@@IAE@I@Z
@ cdecl -arch=win64 ??0_Concurrent_queue_base_v4@details@Concurrency@@IEAA@_K@Z(ptr long) msvcp120.??0_Concurrent_queue_base_v4@details@Concurrency@@IEAA@_K@Z
@ stub -arch=arm ??0_Concurrent_queue_iterator_base_v4@details@Concurrency@@IAA@ABV_Concurrent_queue_base_v4@12@@Z
@ stub -arch=i386 ??0_Concurrent_queue_iterator_base_v4@details@Concurrency@@IAE@ABV_Concurrent_queue_base_v4@12@@Z
@ stub -arch=win64 ??0_Concurrent_queue_iterator_base_v4@details@Concurrency@@IEAA@AEBV_Concurrent_queue_base_v4@12@@Z
@ cdecl -arch=arm ??0_Condition_variable@details@Concurrency@@QAA@XZ(ptr) msvcr120.??0_Condition_variable@details@Concurrency@@QAA@XZ
@ thiscall -arch=i386 ??0_Condition_variable@details@Concurrency@@QAE@XZ(ptr) msvcr120.??0_Condition_variable@details@Concurrency@@QAE@XZ
@ cdecl -arch=win64 ??0_Condition_variable@details@Concurrency@@QEAA@XZ(ptr) msvcr120.??0_Condition_variable@details@Concurrency@@QEAA@XZ
@ stub -arch=arm ??0_Context@details@Concurrency@@QAA@PAVContext@2@@Z
@ stub -arch=i386 ??0_Context@details@Concurrency@@QAE@PAVContext@2@@Z
@ stub -arch=win64 ??0_Context@details@Concurrency@@QEAA@PEAVContext@2@@Z
@ cdecl -arch=arm ??0_NonReentrantBlockingLock@details@Concurrency@@QAA@XZ(ptr) msvcr120.??0_NonReentrantBlockingLock@details@Concurrency@@QAA@XZ
@ thiscall -arch=i386 ??0_NonReentrantBlockingLock@details@Concurrency@@QAE@XZ(ptr) msvcr120.??0_NonReentrantBlockingLock@details@Concurrency@@QAE@XZ
@ cdecl -arch=win64 ??0_NonReentrantBlockingLock@details@Concurrency@@QEAA@XZ(ptr) msvcr120.??0_NonReentrantBlockingLock@details@Concurrency@@QEAA@XZ
@ cdecl -arch=arm ??0_NonReentrantPPLLock@details@Concurrency@@QAA@XZ(ptr) msvcr120.??0_NonReentrantPPLLock@details@Concurrency@@QAA@XZ
@ thiscall -arch=i386 ??0_NonReentrantPPLLock@details@Concurrency@@QAE@XZ(ptr) msvcr120.??0_NonReentrantPPLLock@details@Concurrency@@QAE@XZ
@ cdecl -arch=win64 ??0_NonReentrantPPLLock@details@Concurrency@@QEAA@XZ(ptr) msvcr120.??0_NonReentrantPPLLock@details@Concurrency@@QEAA@XZ
@ stub -arch=arm ??0_ReaderWriterLock@details@Concurrency@@QAA@XZ
@ stub -arch=i386 ??0_ReaderWriterLock@details@Concurrency@@QAE@XZ
@ stub -arch=win64 ??0_ReaderWriterLock@details@Concurrency@@QEAA@XZ
@ cdecl -arch=arm ??0_ReentrantBlockingLock@details@Concurrency@@QAA@XZ(ptr) msvcr120.??0_ReentrantBlockingLock@details@Concurrency@@QAA@XZ
@ thiscall -arch=i386 ??0_ReentrantBlockingLock@details@Concurrency@@QAE@XZ(ptr) msvcr120.??0_ReentrantBlockingLock@details@Concurrency@@QAE@XZ
@ cdecl -arch=win64 ??0_ReentrantBlockingLock@details@Concurrency@@QEAA@XZ(ptr) msvcr120.??0_ReentrantBlockingLock@details@Concurrency@@QEAA@XZ
@ stub -arch=arm ??0_ReentrantLock@details@Concurrency@@QAA@XZ
@ stub -arch=i386 ??0_ReentrantLock@details@Concurrency@@QAE@XZ
@ stub -arch=win64 ??0_ReentrantLock@details@Concurrency@@QEAA@XZ
@ cdecl -arch=arm ??0_ReentrantPPLLock@details@Concurrency@@QAA@XZ(ptr) msvcr120.??0_ReentrantPPLLock@details@Concurrency@@QAA@XZ
@ thiscall -arch=i386 ??0_ReentrantPPLLock@details@Concurrency@@QAE@XZ(ptr) msvcr120.??0_ReentrantPPLLock@details@Concurrency@@QAE@XZ
@ cdecl -arch=win64 ??0_ReentrantPPLLock@details@Concurrency@@QEAA@XZ(ptr) msvcr120.??0_ReentrantPPLLock@details@Concurrency@@QEAA@XZ
@ stub -arch=arm ??0_Runtime_object@details@Concurrency@@QAA@H@Z
@ thiscall -arch=i386 ??0_Runtime_object@details@Concurrency@@QAE@H@Z(ptr long) msvcp120.??0_Runtime_object@details@Concurrency@@QAE@H@Z
@ cdecl -arch=win64 ??0_Runtime_object@details@Concurrency@@QEAA@H@Z(ptr long) msvcp120.??0_Runtime_object@details@Concurrency@@QEAA@H@Z
@ stub -arch=arm ??0_Runtime_object@details@Concurrency@@QAA@XZ
@ thiscall -arch=i386 ??0_Runtime_object@details@Concurrency@@QAE@XZ(ptr) msvcp120.??0_Runtime_object@details@Concurrency@@QAE@XZ
@ cdecl -arch=win64 ??0_Runtime_object@details@Concurrency@@QEAA@XZ(ptr) msvcp120.??0_Runtime_object@details@Concurrency@@QEAA@XZ
@ cdecl -arch=arm ??0_Scheduler@details@Concurrency@@QAA@PAVScheduler@2@@Z(ptr ptr) msvcr120.??0_Scheduler@details@Concurrency@@QAA@PAVScheduler@2@@Z
@ thiscall -arch=i386 ??0_Scheduler@details@Concurrency@@QAE@PAVScheduler@2@@Z(ptr ptr) msvcr120.??0_Scheduler@details@Concurrency@@QAE@PAVScheduler@2@@Z
@ cdecl -arch=win64 ??0_Scheduler@details@Concurrency@@QEAA@PEAVScheduler@2@@Z(ptr ptr) msvcr120.??0_Scheduler@details@Concurrency@@QEAA@PEAVScheduler@2@@Z
@ cdecl -arch=arm ??0_Scoped_lock@_NonReentrantPPLLock@details@Concurrency@@QAA@AAV123@@Z(ptr ptr) msvcr120.??0_Scoped_lock@_NonReentrantPPLLock@details@Concurrency@@QAA@AAV123@@Z
@ thiscall -arch=i386 ??0_Scoped_lock@_NonReentrantPPLLock@details@Concurrency@@QAE@AAV123@@Z(ptr ptr) msvcr120.??0_Scoped_lock@_NonReentrantPPLLock@details@Concurrency@@QAE@AAV123@@Z
@ cdecl -arch=win64 ??0_Scoped_lock@_NonReentrantPPLLock@details@Concurrency@@QEAA@AEAV123@@Z(ptr ptr) msvcr120.??0_Scoped_lock@_NonReentrantPPLLock@details@Concurrency@@QEAA@AEAV123@@Z
@ cdecl -arch=arm ??0_Scoped_lock@_ReentrantPPLLock@details@Concurrency@@QAA@AAV123@@Z(ptr ptr) msvcr120.??0_Scoped_lock@_ReentrantPPLLock@details@Concurrency@@QAA@AAV123@@Z
@ thiscall -arch=i386 ??0_Scoped_lock@_ReentrantPPLLock@details@Concurrency@@QAE@AAV123@@Z(ptr ptr) msvcr120.??0_Scoped_lock@_ReentrantPPLLock@details@Concurrency@@QAE@AAV123@@Z
@ cdecl -arch=win64 ??0_Scoped_lock@_ReentrantPPLLock@details@Concurrency@@QEAA@AEAV123@@Z(ptr ptr) msvcr120.??0_Scoped_lock@_ReentrantPPLLock@details@Concurrency@@QEAA@AEAV123@@Z
@ stub -arch=arm ??0_SpinLock@details@Concurrency@@QAA@ACJ@Z
@ stub -arch=i386 ??0_SpinLock@details@Concurrency@@QAE@ACJ@Z
@ stub -arch=win64 ??0_SpinLock@details@Concurrency@@QEAA@AECJ@Z
@ stub -arch=arm ??0_StructuredTaskCollection@details@Concurrency@@QAA@PAV_CancellationTokenState@12@@Z
@ stub -arch=i386 ??0_StructuredTaskCollection@details@Concurrency@@QAE@PAV_CancellationTokenState@12@@Z
@ stub -arch=win64 ??0_StructuredTaskCollection@details@Concurrency@@QEAA@PEAV_CancellationTokenState@12@@Z
@ stub -arch=arm ??0_TaskCollection@details@Concurrency@@QAA@PAV_CancellationTokenState@12@@Z
@ stub -arch=i386 ??0_TaskCollection@details@Concurrency@@QAE@PAV_CancellationTokenState@12@@Z
@ stub -arch=win64 ??0_TaskCollection@details@Concurrency@@QEAA@PEAV_CancellationTokenState@12@@Z
@ stub -arch=arm ??0_TaskCollection@details@Concurrency@@QAA@XZ
@ stub -arch=i386 ??0_TaskCollection@details@Concurrency@@QAE@XZ
@ stub -arch=win64 ??0_TaskCollection@details@Concurrency@@QEAA@XZ
@ stub -arch=arm ??0_Timer@details@Concurrency@@IAA@I_N@Z
@ stub -arch=i386 ??0_Timer@details@Concurrency@@IAE@I_N@Z
@ stub -arch=win64 ??0_Timer@details@Concurrency@@IEAA@I_N@Z
@ stub -arch=arm ??0agent@Concurrency@@QAA@AAVScheduleGroup@1@@Z
@ stub -arch=i386 ??0agent@Concurrency@@QAE@AAVScheduleGroup@1@@Z
@ stub -arch=win64 ??0agent@Concurrency@@QEAA@AEAVScheduleGroup@1@@Z
@ stub -arch=arm ??0agent@Concurrency@@QAA@AAVScheduler@1@@Z
@ stub -arch=i386 ??0agent@Concurrency@@QAE@AAVScheduler@1@@Z
@ stub -arch=win64 ??0agent@Concurrency@@QEAA@AEAVScheduler@1@@Z
@ stub -arch=arm ??0agent@Concurrency@@QAA@XZ
@ stub -arch=i386 ??0agent@Concurrency@@QAE@XZ
@ stub -arch=win64 ??0agent@Concurrency@@QEAA@XZ
@ stub -arch=arm ??0bad_target@Concurrency@@QAA@PBD@Z
@ stub -arch=i386 ??0bad_target@Concurrency@@QAE@PBD@Z
@ stub -arch=win64 ??0bad_target@Concurrency@@QEAA@PEBD@Z
@ stub -arch=arm ??0bad_target@Concurrency@@QAA@XZ
@ stub -arch=i386 ??0bad_target@Concurrency@@QAE@XZ
@ stub -arch=win64 ??0bad_target@Concurrency@@QEAA@XZ
@ stub -arch=arm ??0context_self_unblock@Concurrency@@QAA@PBD@Z
@ stub -arch=i386 ??0context_self_unblock@Concurrency@@QAE@PBD@Z
@ stub -arch=win64 ??0context_self_unblock@Concurrency@@QEAA@PEBD@Z
@ stub -arch=arm ??0context_self_unblock@Concurrency@@QAA@XZ
@ stub -arch=i386 ??0context_self_unblock@Concurrency@@QAE@XZ
@ stub -arch=win64 ??0context_self_unblock@Concurrency@@QEAA@XZ
@ stub -arch=arm ??0context_unblock_unbalanced@Concurrency@@QAA@PBD@Z
@ stub -arch=i386 ??0context_unblock_unbalanced@Concurrency@@QAE@PBD@Z
@ stub -arch=win64 ??0context_unblock_unbalanced@Concurrency@@QEAA@PEBD@Z
@ stub -arch=arm ??0context_unblock_unbalanced@Concurrency@@QAA@XZ
@ stub -arch=i386 ??0context_unblock_unbalanced@Concurrency@@QAE@XZ
@ stub -arch=win64 ??0context_unblock_unbalanced@Concurrency@@QEAA@XZ
@ cdecl -arch=arm ??0critical_section@Concurrency@@QAA@XZ(ptr) msvcr120.??0critical_section@Concurrency@@QAA@XZ
@ thiscall -arch=i386 ??0critical_section@Concurrency@@QAE@XZ(ptr) msvcr120.??0critical_section@Concurrency@@QAE@XZ
@ cdecl -arch=win64 ??0critical_section@Concurrency@@QEAA@XZ(ptr) msvcr120.??0critical_section@Concurrency@@QEAA@XZ
@ stub -arch=arm ??0default_scheduler_exists@Concurrency@@QAA@PBD@Z
@ stub -arch=i386 ??0default_scheduler_exists@Concurrency@@QAE@PBD@Z
@ stub -arch=win64 ??0default_scheduler_exists@Concurrency@@QEAA@PEBD@Z
@ stub -arch=arm ??0default_scheduler_exists@Concurrency@@QAA@XZ
@ stub -arch=i386 ??0default_scheduler_exists@Concurrency@@QAE@XZ
@ stub -arch=win64 ??0default_scheduler_exists@Concurrency@@QEAA@XZ
@ thiscall -arch=win32 ??0event@Concurrency@@QAE@XZ(ptr) msvcr120.??0event@Concurrency@@QAE@XZ
@ cdecl -arch=arm ??0event@Concurrency@@QAA@XZ(ptr) msvcr120.??0event@Concurrency@@QAA@XZ
@ thiscall -arch=i386 ??0event@Concurrency@@QAE@XZ(ptr) msvcr120.??0event@Concurrency@@QAE@XZ
@ cdecl -arch=win64 ??0event@Concurrency@@QEAA@XZ(ptr) msvcr120.??0event@Concurrency@@QEAA@XZ
@ cdecl -arch=arm ??0improper_lock@Concurrency@@QAA@PBD@Z(ptr str) msvcr120.??0improper_lock@Concurrency@@QAA@PBD@Z
@ thiscall -arch=i386 ??0improper_lock@Concurrency@@QAE@PBD@Z(ptr str) msvcr120.??0improper_lock@Concurrency@@QAE@PBD@Z
@ cdecl -arch=win64 ??0improper_lock@Concurrency@@QEAA@PEBD@Z(ptr str) msvcr120.??0improper_lock@Concurrency@@QEAA@PEBD@Z
@ cdecl -arch=arm ??0improper_lock@Concurrency@@QAA@XZ(ptr) msvcr120.??0improper_lock@Concurrency@@QAA@XZ
@ thiscall -arch=i386 ??0improper_lock@Concurrency@@QAE@XZ(ptr) msvcr120.??0improper_lock@Concurrency@@QAE@XZ
@ cdecl -arch=win64 ??0improper_lock@Concurrency@@QEAA@XZ(ptr) msvcr120.??0improper_lock@Concurrency@@QEAA@XZ
@ cdecl -arch=arm ??0improper_scheduler_attach@Concurrency@@QAA@PBD@Z(ptr str) msvcr120.??0improper_scheduler_attach@Concurrency@@QAA@PBD@Z
@ thiscall -arch=i386 ??0improper_scheduler_attach@Concurrency@@QAE@PBD@Z(ptr str) msvcr120.??0improper_scheduler_attach@Concurrency@@QAE@PBD@Z
@ cdecl -arch=win64 ??0improper_scheduler_attach@Concurrency@@QEAA@PEBD@Z(ptr str) msvcr120.??0improper_scheduler_attach@Concurrency@@QEAA@PEBD@Z
@ cdecl -arch=arm ??0improper_scheduler_attach@Concurrency@@QAA@XZ(ptr) msvcr120.??0improper_scheduler_attach@Concurrency@@QAA@XZ
@ thiscall -arch=i386 ??0improper_scheduler_attach@Concurrency@@QAE@XZ(ptr) msvcr120.??0improper_scheduler_attach@Concurrency@@QAE@XZ
@ cdecl -arch=win64 ??0improper_scheduler_attach@Concurrency@@QEAA@XZ(ptr) msvcr120.??0improper_scheduler_attach@Concurrency@@QEAA@XZ
@ cdecl -arch=arm ??0improper_scheduler_detach@Concurrency@@QAA@PBD@Z(ptr str) msvcr120.??0improper_scheduler_detach@Concurrency@@QAA@PBD@Z
@ thiscall -arch=i386 ??0improper_scheduler_detach@Concurrency@@QAE@PBD@Z(ptr str) msvcr120.??0improper_scheduler_detach@Concurrency@@QAE@PBD@Z
@ cdecl -arch=win64 ??0improper_scheduler_detach@Concurrency@@QEAA@PEBD@Z(ptr str) msvcr120.??0improper_scheduler_detach@Concurrency@@QEAA@PEBD@Z
@ cdecl -arch=arm ??0improper_scheduler_detach@Concurrency@@QAA@XZ(ptr) msvcr120.??0improper_scheduler_detach@Concurrency@@QAA@XZ
@ thiscall -arch=i386 ??0improper_scheduler_detach@Concurrency@@QAE@XZ(ptr) msvcr120.??0improper_scheduler_detach@Concurrency@@QAE@XZ
@ cdecl -arch=win64 ??0improper_scheduler_detach@Concurrency@@QEAA@XZ(ptr) msvcr120.??0improper_scheduler_detach@Concurrency@@QEAA@XZ
@ stub -arch=arm ??0improper_scheduler_reference@Concurrency@@QAA@PBD@Z
@ stub -arch=i386 ??0improper_scheduler_reference@Concurrency@@QAE@PBD@Z
@ stub -arch=win64 ??0improper_scheduler_reference@Concurrency@@QEAA@PEBD@Z
@ stub -arch=arm ??0improper_scheduler_reference@Concurrency@@QAA@XZ
@ stub -arch=i386 ??0improper_scheduler_reference@Concurrency@@QAE@XZ
@ stub -arch=win64 ??0improper_scheduler_reference@Concurrency@@QEAA@XZ
@ stub -arch=arm ??0invalid_link_target@Concurrency@@QAA@PBD@Z
@ stub -arch=i386 ??0invalid_link_target@Concurrency@@QAE@PBD@Z
@ stub -arch=win64 ??0invalid_link_target@Concurrency@@QEAA@PEBD@Z
@ stub -arch=arm ??0invalid_link_target@Concurrency@@QAA@XZ
@ stub -arch=i386 ??0invalid_link_target@Concurrency@@QAE@XZ
@ stub -arch=win64 ??0invalid_link_target@Concurrency@@QEAA@XZ
@ stub -arch=arm ??0invalid_multiple_scheduling@Concurrency@@QAA@PBD@Z
@ stub -arch=i386 ??0invalid_multiple_scheduling@Concurrency@@QAE@PBD@Z
@ stub -arch=win64 ??0invalid_multiple_scheduling@Concurrency@@QEAA@PEBD@Z
@ stub -arch=arm ??0invalid_multiple_scheduling@Concurrency@@QAA@XZ
@ stub -arch=i386 ??0invalid_multiple_scheduling@Concurrency@@QAE@XZ
@ stub -arch=win64 ??0invalid_multiple_scheduling@Concurrency@@QEAA@XZ
@ stub -arch=arm ??0invalid_oversubscribe_operation@Concurrency@@QAA@PBD@Z
@ stub -arch=i386 ??0invalid_oversubscribe_operation@Concurrency@@QAE@PBD@Z
@ stub -arch=win64 ??0invalid_oversubscribe_operation@Concurrency@@QEAA@PEBD@Z
@ stub -arch=arm ??0invalid_oversubscribe_operation@Concurrency@@QAA@XZ
@ stub -arch=i386 ??0invalid_oversubscribe_operation@Concurrency@@QAE@XZ
@ stub -arch=win64 ??0invalid_oversubscribe_operation@Concurrency@@QEAA@XZ
@ cdecl -arch=arm ??0invalid_scheduler_policy_key@Concurrency@@QAA@PBD@Z(ptr str) msvcr120.??0invalid_scheduler_policy_key@Concurrency@@QAA@PBD@Z
@ thiscall -arch=i386 ??0invalid_scheduler_policy_key@Concurrency@@QAE@PBD@Z(ptr str) msvcr120.??0invalid_scheduler_policy_key@Concurrency@@QAE@PBD@Z
@ cdecl -arch=win64 ??0invalid_scheduler_policy_key@Concurrency@@QEAA@PEBD@Z(ptr str) msvcr120.??0invalid_scheduler_policy_key@Concurrency@@QEAA@PEBD@Z
@ cdecl -arch=arm ??0invalid_scheduler_policy_key@Concurrency@@QAA@XZ(ptr) msvcr120.??0invalid_scheduler_policy_key@Concurrency@@QAA@XZ
@ thiscall -arch=i386 ??0invalid_scheduler_policy_key@Concurrency@@QAE@XZ(ptr) msvcr120.??0invalid_scheduler_policy_key@Concurrency@@QAE@XZ
@ cdecl -arch=win64 ??0invalid_scheduler_policy_key@Concurrency@@QEAA@XZ(ptr) msvcr120.??0invalid_scheduler_policy_key@Concurrency@@QEAA@XZ
@ cdecl -arch=arm ??0invalid_scheduler_policy_thread_specification@Concurrency@@QAA@PBD@Z(ptr str) msvcr120.??0invalid_scheduler_policy_thread_specification@Concurrency@@QAA@PBD@Z
@ thiscall -arch=i386 ??0invalid_scheduler_policy_thread_specification@Concurrency@@QAE@PBD@Z(ptr str) msvcr120.??0invalid_scheduler_policy_thread_specification@Concurrency@@QAE@PBD@Z
@ cdecl -arch=win64 ??0invalid_scheduler_policy_thread_specification@Concurrency@@QEAA@PEBD@Z(ptr str) msvcr120.??0invalid_scheduler_policy_thread_specification@Concurrency@@QEAA@PEBD@Z
@ cdecl -arch=arm ??0invalid_scheduler_policy_thread_specification@Concurrency@@QAA@XZ(ptr) msvcr120.??0invalid_scheduler_policy_thread_specification@Concurrency@@QAA@XZ
@ thiscall -arch=i386 ??0invalid_scheduler_policy_thread_specification@Concurrency@@QAE@XZ(ptr) msvcr120.??0invalid_scheduler_policy_thread_specification@Concurrency@@QAE@XZ
@ cdecl -arch=win64 ??0invalid_scheduler_policy_thread_specification@Concurrency@@QEAA@XZ(ptr) msvcr120.??0invalid_scheduler_policy_thread_specification@Concurrency@@QEAA@XZ
@ cdecl -arch=arm ??0invalid_scheduler_policy_value@Concurrency@@QAA@PBD@Z(ptr str) msvcr120.??0invalid_scheduler_policy_value@Concurrency@@QAA@PBD@Z
@ thiscall -arch=i386 ??0invalid_scheduler_policy_value@Concurrency@@QAE@PBD@Z(ptr str) msvcr120.??0invalid_scheduler_policy_value@Concurrency@@QAE@PBD@Z
@ cdecl -arch=win64 ??0invalid_scheduler_policy_value@Concurrency@@QEAA@PEBD@Z(ptr str) msvcr120.??0invalid_scheduler_policy_value@Concurrency@@QEAA@PEBD@Z
@ cdecl -arch=arm ??0invalid_scheduler_policy_value@Concurrency@@QAA@XZ(ptr) msvcr120.??0invalid_scheduler_policy_value@Concurrency@@QAA@XZ
@ thiscall -arch=i386 ??0invalid_scheduler_policy_value@Concurrency@@QAE@XZ(ptr) msvcr120.??0invalid_scheduler_policy_value@Concurrency@@QAE@XZ
@ cdecl -arch=win64 ??0invalid_scheduler_policy_value@Concurrency@@QEAA@XZ(ptr) msvcr120.??0invalid_scheduler_policy_value@Concurrency@@QEAA@XZ
@ stub -arch=win32 ??0message_not_found@Concurrency@@QAE@PBD@Z
@ stub -arch=arm ??0message_not_found@Concurrency@@QAA@PBD@Z
@ stub -arch=i386 ??0message_not_found@Concurrency@@QAE@PBD@Z
@ stub -arch=win64 ??0message_not_found@Concurrency@@QEAA@PEBD@Z
@ stub -arch=win32 ??0message_not_found@Concurrency@@QAE@XZ
@ stub -arch=arm ??0message_not_found@Concurrency@@QAA@XZ
@ stub -arch=i386 ??0message_not_found@Concurrency@@QAE@XZ
@ stub -arch=win64 ??0message_not_found@Concurrency@@QEAA@XZ
@ stub -arch=win32 ??0missing_wait@Concurrency@@QAE@PBD@Z
@ stub -arch=arm ??0missing_wait@Concurrency@@QAA@PBD@Z
@ stub -arch=i386 ??0missing_wait@Concurrency@@QAE@PBD@Z
@ stub -arch=win64 ??0missing_wait@Concurrency@@QEAA@PEBD@Z
@ stub -arch=win32 ??0missing_wait@Concurrency@@QAE@XZ
@ stub -arch=arm ??0missing_wait@Concurrency@@QAA@XZ
@ stub -arch=i386 ??0missing_wait@Concurrency@@QAE@XZ
@ stub -arch=win64 ??0missing_wait@Concurrency@@QEAA@XZ
@ stub -arch=win32 ??0nested_scheduler_missing_detach@Concurrency@@QAE@PBD@Z
@ stub -arch=arm ??0nested_scheduler_missing_detach@Concurrency@@QAA@PBD@Z
@ stub -arch=i386 ??0nested_scheduler_missing_detach@Concurrency@@QAE@PBD@Z
@ stub -arch=win64 ??0nested_scheduler_missing_detach@Concurrency@@QEAA@PEBD@Z
@ stub -arch=win32 ??0nested_scheduler_missing_detach@Concurrency@@QAE@XZ
@ stub -arch=arm ??0nested_scheduler_missing_detach@Concurrency@@QAA@XZ
@ stub -arch=i386 ??0nested_scheduler_missing_detach@Concurrency@@QAE@XZ
@ stub -arch=win64 ??0nested_scheduler_missing_detach@Concurrency@@QEAA@XZ
@ stub -arch=win32 ??0operation_timed_out@Concurrency@@QAE@PBD@Z
@ stub -arch=arm ??0operation_timed_out@Concurrency@@QAA@PBD@Z
@ stub -arch=i386 ??0operation_timed_out@Concurrency@@QAE@PBD@Z
@ stub -arch=win64 ??0operation_timed_out@Concurrency@@QEAA@PEBD@Z
@ stub -arch=win32 ??0operation_timed_out@Concurrency@@QAE@XZ
@ stub -arch=arm ??0operation_timed_out@Concurrency@@QAA@XZ
@ stub -arch=i386 ??0operation_timed_out@Concurrency@@QAE@XZ
@ stub -arch=win64 ??0operation_timed_out@Concurrency@@QEAA@XZ
@ thiscall -arch=win32 ??0reader_writer_lock@Concurrency@@QAE@XZ(ptr) msvcr120.??0reader_writer_lock@Concurrency@@QAE@XZ
@ cdecl -arch=arm ??0reader_writer_lock@Concurrency@@QAA@XZ(ptr) msvcr120.??0reader_writer_lock@Concurrency@@QAA@XZ
@ thiscall -arch=i386 ??0reader_writer_lock@Concurrency@@QAE@XZ(ptr) msvcr120.??0reader_writer_lock@Concurrency@@QAE@XZ
@ cdecl -arch=win64 ??0reader_writer_lock@Concurrency@@QEAA@XZ(ptr) msvcr120.??0reader_writer_lock@Concurrency@@QEAA@XZ
@ stub -arch=win32 ??0scheduler_not_attached@Concurrency@@QAE@PBD@Z
@ stub -arch=arm ??0scheduler_not_attached@Concurrency@@QAA@PBD@Z
@ stub -arch=i386 ??0scheduler_not_attached@Concurrency@@QAE@PBD@Z
@ stub -arch=win64 ??0scheduler_not_attached@Concurrency@@QEAA@PEBD@Z
@ stub -arch=win32 ??0scheduler_not_attached@Concurrency@@QAE@XZ
@ stub -arch=arm ??0scheduler_not_attached@Concurrency@@QAA@XZ
@ stub -arch=i386 ??0scheduler_not_attached@Concurrency@@QAE@XZ
@ stub -arch=win64 ??0scheduler_not_attached@Concurrency@@QEAA@XZ
@ cdecl -arch=arm ??0scheduler_resource_allocation_error@Concurrency@@QAA@J@Z(ptr long) msvcr120.??0scheduler_resource_allocation_error@Concurrency@@QAA@J@Z
@ thiscall -arch=i386 ??0scheduler_resource_allocation_error@Concurrency@@QAE@J@Z(ptr long) msvcr120.??0scheduler_resource_allocation_error@Concurrency@@QAE@J@Z
@ cdecl -arch=win64 ??0scheduler_resource_allocation_error@Concurrency@@QEAA@J@Z(ptr long) msvcr120.??0scheduler_resource_allocation_error@Concurrency@@QEAA@J@Z
@ cdecl -arch=arm ??0scheduler_resource_allocation_error@Concurrency@@QAA@PBDJ@Z(ptr str long) msvcr120.??0scheduler_resource_allocation_error@Concurrency@@QAA@PBDJ@Z
@ thiscall -arch=i386 ??0scheduler_resource_allocation_error@Concurrency@@QAE@PBDJ@Z(ptr str long) msvcr120.??0scheduler_resource_allocation_error@Concurrency@@QAE@PBDJ@Z
@ cdecl -arch=win64 ??0scheduler_resource_allocation_error@Concurrency@@QEAA@PEBDJ@Z(ptr str long) msvcr120.??0scheduler_resource_allocation_error@Concurrency@@QEAA@PEBDJ@Z
@ stub -arch=win32 ??0scheduler_worker_creation_error@Concurrency@@QAE@J@Z
@ stub -arch=arm ??0scheduler_worker_creation_error@Concurrency@@QAA@J@Z
@ stub -arch=i386 ??0scheduler_worker_creation_error@Concurrency@@QAE@J@Z
@ stub -arch=win64 ??0scheduler_worker_creation_error@Concurrency@@QEAA@J@Z
@ stub -arch=win32 ??0scheduler_worker_creation_error@Concurrency@@QAE@PBDJ@Z
@ stub -arch=arm ??0scheduler_worker_creation_error@Concurrency@@QAA@PBDJ@Z
@ stub -arch=i386 ??0scheduler_worker_creation_error@Concurrency@@QAE@PBDJ@Z
@ stub -arch=win64 ??0scheduler_worker_creation_error@Concurrency@@QEAA@PEBDJ@Z
@ cdecl -arch=arm ??0scoped_lock@critical_section@Concurrency@@QAA@AAV12@@Z(ptr ptr) msvcr120.??0scoped_lock@critical_section@Concurrency@@QAA@AAV12@@Z
@ thiscall -arch=i386 ??0scoped_lock@critical_section@Concurrency@@QAE@AAV12@@Z(ptr ptr) msvcr120.??0scoped_lock@critical_section@Concurrency@@QAE@AAV12@@Z
@ cdecl -arch=win64 ??0scoped_lock@critical_section@Concurrency@@QEAA@AEAV12@@Z(ptr ptr) msvcr120.??0scoped_lock@critical_section@Concurrency@@QEAA@AEAV12@@Z
@ cdecl -arch=arm ??0scoped_lock@reader_writer_lock@Concurrency@@QAA@AAV12@@Z(ptr ptr) msvcr120.??0scoped_lock@reader_writer_lock@Concurrency@@QAA@AAV12@@Z
@ thiscall -arch=i386 ??0scoped_lock@reader_writer_lock@Concurrency@@QAE@AAV12@@Z(ptr ptr) msvcr120.??0scoped_lock@reader_writer_lock@Concurrency@@QAE@AAV12@@Z
@ cdecl -arch=win64 ??0scoped_lock@reader_writer_lock@Concurrency@@QEAA@AEAV12@@Z(ptr ptr) msvcr120.??0scoped_lock@reader_writer_lock@Concurrency@@QEAA@AEAV12@@Z
@ cdecl -arch=arm ??0scoped_lock_read@reader_writer_lock@Concurrency@@QAA@AAV12@@Z(ptr ptr) msvcr120.??0scoped_lock_read@reader_writer_lock@Concurrency@@QAA@AAV12@@Z
@ thiscall -arch=i386 ??0scoped_lock_read@reader_writer_lock@Concurrency@@QAE@AAV12@@Z(ptr ptr) msvcr120.??0scoped_lock_read@reader_writer_lock@Concurrency@@QAE@AAV12@@Z
@ cdecl -arch=win64 ??0scoped_lock_read@reader_writer_lock@Concurrency@@QEAA@AEAV12@@Z(ptr ptr) msvcr120.??0scoped_lock_read@reader_writer_lock@Concurrency@@QEAA@AEAV12@@Z
@ stub -arch=arm ??0unsupported_os@Concurrency@@QAA@PBD@Z
@ stub -arch=i386 ??0unsupported_os@Concurrency@@QAE@PBD@Z
@ stub -arch=win64 ??0unsupported_os@Concurrency@@QEAA@PEBD@Z
@ stub -arch=arm ??0unsupported_os@Concurrency@@QAA@XZ
@ stub -arch=i386 ??0unsupported_os@Concurrency@@QAE@XZ
@ stub -arch=win64 ??0unsupported_os@Concurrency@@QEAA@XZ
@ cdecl -arch=arm ??1SchedulerPolicy@Concurrency@@QAA@XZ(ptr) msvcr120.??1SchedulerPolicy@Concurrency@@QAA@XZ
@ thiscall -arch=i386 ??1SchedulerPolicy@Concurrency@@QAE@XZ(ptr) msvcr120.??1SchedulerPolicy@Concurrency@@QAE@XZ
@ cdecl -arch=win64 ??1SchedulerPolicy@Concurrency@@QEAA@XZ(ptr) msvcr120.??1SchedulerPolicy@Concurrency@@QEAA@XZ
@ stub -arch=arm ??1_Cancellation_beacon@details@Concurrency@@QAA@XZ
@ stub -arch=i386 ??1_Cancellation_beacon@details@Concurrency@@QAE@XZ
@ stub -arch=win64 ??1_Cancellation_beacon@details@Concurrency@@QEAA@XZ
@ stub -arch=arm ??1_Concurrent_queue_base_v4@details@Concurrency@@MAA@XZ
@ thiscall -arch=i386 ??1_Concurrent_queue_base_v4@details@Concurrency@@MAE@XZ(ptr) msvcp120.??1_Concurrent_queue_base_v4@details@Concurrency@@MAE@XZ
@ cdecl -arch=win64 ??1_Concurrent_queue_base_v4@details@Concurrency@@MEAA@XZ(ptr) msvcp120.??1_Concurrent_queue_base_v4@details@Concurrency@@MEAA@XZ
@ stub -arch=arm ??1_Concurrent_queue_iterator_base_v4@details@Concurrency@@IAA@XZ
@ stub -arch=i386 ??1_Concurrent_queue_iterator_base_v4@details@Concurrency@@IAE@XZ
@ stub -arch=win64 ??1_Concurrent_queue_iterator_base_v4@details@Concurrency@@IEAA@XZ
@ stub -arch=arm ??1_Concurrent_vector_base_v4@details@Concurrency@@IAA@XZ
@ thiscall -arch=i386 ??1_Concurrent_vector_base_v4@details@Concurrency@@IAE@XZ(ptr) msvcp120.??1_Concurrent_vector_base_v4@details@Concurrency@@IAE@XZ
@ cdecl -arch=win64 ??1_Concurrent_vector_base_v4@details@Concurrency@@IEAA@XZ(ptr) msvcp120.??1_Concurrent_vector_base_v4@details@Concurrency@@IEAA@XZ
@ cdecl -arch=arm ??1_Condition_variable@details@Concurrency@@QAA@XZ(ptr) msvcr120.??1_Condition_variable@details@Concurrency@@QAA@XZ
@ thiscall -arch=i386 ??1_Condition_variable@details@Concurrency@@QAE@XZ(ptr) msvcr120.??1_Condition_variable@details@Concurrency@@QAE@XZ
@ cdecl -arch=win64 ??1_Condition_variable@details@Concurrency@@QEAA@XZ(ptr) msvcr120.??1_Condition_variable@details@Concurrency@@QEAA@XZ
@ cdecl -arch=arm ??1_NonReentrantBlockingLock@details@Concurrency@@QAA@XZ(ptr) msvcr120.??1_NonReentrantBlockingLock@details@Concurrency@@QAA@XZ
@ thiscall -arch=i386 ??1_NonReentrantBlockingLock@details@Concurrency@@QAE@XZ(ptr) msvcr120.??1_NonReentrantBlockingLock@details@Concurrency@@QAE@XZ
@ cdecl -arch=win64 ??1_NonReentrantBlockingLock@details@Concurrency@@QEAA@XZ(ptr) msvcr120.??1_NonReentrantBlockingLock@details@Concurrency@@QEAA@XZ
@ cdecl -arch=arm ??1_ReentrantBlockingLock@details@Concurrency@@QAA@XZ(ptr) msvcr120.??1_ReentrantBlockingLock@details@Concurrency@@QAA@XZ
@ thiscall -arch=i386 ??1_ReentrantBlockingLock@details@Concurrency@@QAE@XZ(ptr) msvcr120.??1_ReentrantBlockingLock@details@Concurrency@@QAE@XZ
@ cdecl -arch=win64 ??1_ReentrantBlockingLock@details@Concurrency@@QEAA@XZ(ptr) msvcr120.??1_ReentrantBlockingLock@details@Concurrency@@QEAA@XZ
@ cdecl -arch=arm ??1_Scoped_lock@_NonReentrantPPLLock@details@Concurrency@@QAA@XZ(ptr) msvcr120.??1_Scoped_lock@_NonReentrantPPLLock@details@Concurrency@@QAA@XZ
@ thiscall -arch=i386 ??1_Scoped_lock@_NonReentrantPPLLock@details@Concurrency@@QAE@XZ(ptr) msvcr120.??1_Scoped_lock@_NonReentrantPPLLock@details@Concurrency@@QAE@XZ
@ cdecl -arch=win64 ??1_Scoped_lock@_NonReentrantPPLLock@details@Concurrency@@QEAA@XZ(ptr) msvcr120.??1_Scoped_lock@_NonReentrantPPLLock@details@Concurrency@@QEAA@XZ
@ cdecl -arch=arm ??1_Scoped_lock@_ReentrantPPLLock@details@Concurrency@@QAA@XZ(ptr) msvcr120.??1_Scoped_lock@_ReentrantPPLLock@details@Concurrency@@QAA@XZ
@ thiscall -arch=i386 ??1_Scoped_lock@_ReentrantPPLLock@details@Concurrency@@QAE@XZ(ptr) msvcr120.??1_Scoped_lock@_ReentrantPPLLock@details@Concurrency@@QAE@XZ
@ cdecl -arch=win64 ??1_Scoped_lock@_ReentrantPPLLock@details@Concurrency@@QEAA@XZ(ptr) msvcr120.??1_Scoped_lock@_ReentrantPPLLock@details@Concurrency@@QEAA@XZ
@ stub -arch=arm ??1_SpinLock@details@Concurrency@@QAA@XZ
@ stub -arch=i386 ??1_SpinLock@details@Concurrency@@QAE@XZ
@ stub -arch=win64 ??1_SpinLock@details@Concurrency@@QEAA@XZ
@ stub -arch=arm ??1_StructuredTaskCollection@details@Concurrency@@QAA@XZ
@ stub -arch=i386 ??1_StructuredTaskCollection@details@Concurrency@@QAE@XZ
@ stub -arch=win64 ??1_StructuredTaskCollection@details@Concurrency@@QEAA@XZ
@ stub -arch=arm ??1_TaskCollection@details@Concurrency@@QAA@XZ
@ stub -arch=i386 ??1_TaskCollection@details@Concurrency@@QAE@XZ
@ stub -arch=win64 ??1_TaskCollection@details@Concurrency@@QEAA@XZ
@ stub -arch=arm ??1_Timer@details@Concurrency@@MAA@XZ
@ stub -arch=i386 ??1_Timer@details@Concurrency@@MAE@XZ
@ stub -arch=win64 ??1_Timer@details@Concurrency@@MEAA@XZ
@ stub -arch=arm ??1agent@Concurrency@@UAA@XZ
@ stub -arch=i386 ??1agent@Concurrency@@UAE@XZ
@ stub -arch=win64 ??1agent@Concurrency@@UEAA@XZ
@ cdecl -arch=arm ??1critical_section@Concurrency@@QAA@XZ(ptr) msvcr120.??1critical_section@Concurrency@@QAA@XZ
@ thiscall -arch=i386 ??1critical_section@Concurrency@@QAE@XZ(ptr) msvcr120.??1critical_section@Concurrency@@QAE@XZ
@ cdecl -arch=win64 ??1critical_section@Concurrency@@QEAA@XZ(ptr) msvcr120.??1critical_section@Concurrency@@QEAA@XZ
@ thiscall -arch=win32 ??1event@Concurrency@@QAE@XZ(ptr) msvcr120.??1event@Concurrency@@QAE@XZ
@ cdecl -arch=arm ??1event@Concurrency@@QAA@XZ(ptr) msvcr120.??1event@Concurrency@@QAA@XZ
@ thiscall -arch=i386 ??1event@Concurrency@@QAE@XZ(ptr) msvcr120.??1event@Concurrency@@QAE@XZ
@ cdecl -arch=win64 ??1event@Concurrency@@QEAA@XZ(ptr) msvcr120.??1event@Concurrency@@QEAA@XZ
@ thiscall -arch=win32 ??1reader_writer_lock@Concurrency@@QAE@XZ(ptr) msvcr120.??1reader_writer_lock@Concurrency@@QAE@XZ
@ cdecl -arch=arm ??1reader_writer_lock@Concurrency@@QAA@XZ(ptr) msvcr120.??1reader_writer_lock@Concurrency@@QAA@XZ
@ thiscall -arch=i386 ??1reader_writer_lock@Concurrency@@QAE@XZ(ptr) msvcr120.??1reader_writer_lock@Concurrency@@QAE@XZ
@ cdecl -arch=win64 ??1reader_writer_lock@Concurrency@@QEAA@XZ(ptr) msvcr120.??1reader_writer_lock@Concurrency@@QEAA@XZ
@ cdecl -arch=arm ??1scoped_lock@critical_section@Concurrency@@QAA@XZ(ptr) msvcr120.??1scoped_lock@critical_section@Concurrency@@QAA@XZ
@ thiscall -arch=i386 ??1scoped_lock@critical_section@Concurrency@@QAE@XZ(ptr) msvcr120.??1scoped_lock@critical_section@Concurrency@@QAE@XZ
@ cdecl -arch=win64 ??1scoped_lock@critical_section@Concurrency@@QEAA@XZ(ptr) msvcr120.??1scoped_lock@critical_section@Concurrency@@QEAA@XZ
@ cdecl -arch=arm ??1scoped_lock@reader_writer_lock@Concurrency@@QAA@XZ(ptr) msvcr120.??1scoped_lock@reader_writer_lock@Concurrency@@QAA@XZ
@ thiscall -arch=i386 ??1scoped_lock@reader_writer_lock@Concurrency@@QAE@XZ(ptr) msvcr120.??1scoped_lock@reader_writer_lock@Concurrency@@QAE@XZ
@ cdecl -arch=win64 ??1scoped_lock@reader_writer_lock@Concurrency@@QEAA@XZ(ptr) msvcr120.??1scoped_lock@reader_writer_lock@Concurrency@@QEAA@XZ
@ cdecl -arch=arm ??1scoped_lock_read@reader_writer_lock@Concurrency@@QAA@XZ(ptr) msvcr120.??1scoped_lock_read@reader_writer_lock@Concurrency@@QAA@XZ
@ thiscall -arch=i386 ??1scoped_lock_read@reader_writer_lock@Concurrency@@QAE@XZ(ptr) msvcr120.??1scoped_lock_read@reader_writer_lock@Concurrency@@QAE@XZ
@ cdecl -arch=win64 ??1scoped_lock_read@reader_writer_lock@Concurrency@@QEAA@XZ(ptr) msvcr120.??1scoped_lock_read@reader_writer_lock@Concurrency@@QEAA@XZ
@ stub -arch=arm ??4?$_SpinWait@$00@details@Concurrency@@QAAAAV012@$$QAV012@@Z
@ stub -arch=i386 ??4?$_SpinWait@$00@details@Concurrency@@QAEAAV012@$$QAV012@@Z
@ stub -arch=win64 ??4?$_SpinWait@$00@details@Concurrency@@QEAAAEAV012@$$QEAV012@@Z
@ stub -arch=arm ??4?$_SpinWait@$00@details@Concurrency@@QAAAAV012@ABV012@@Z
@ stub -arch=i386 ??4?$_SpinWait@$00@details@Concurrency@@QAEAAV012@ABV012@@Z
@ stub -arch=win64 ??4?$_SpinWait@$00@details@Concurrency@@QEAAAEAV012@AEBV012@@Z
@ stub -arch=arm ??4?$_SpinWait@$0A@@details@Concurrency@@QAAAAV012@$$QAV012@@Z
@ stub -arch=i386 ??4?$_SpinWait@$0A@@details@Concurrency@@QAEAAV012@$$QAV012@@Z
@ stub -arch=win64 ??4?$_SpinWait@$0A@@details@Concurrency@@QEAAAEAV012@$$QEAV012@@Z
@ stub -arch=arm ??4?$_SpinWait@$0A@@details@Concurrency@@QAAAAV012@ABV012@@Z
@ stub -arch=i386 ??4?$_SpinWait@$0A@@details@Concurrency@@QAEAAV012@ABV012@@Z
@ stub -arch=win64 ??4?$_SpinWait@$0A@@details@Concurrency@@QEAAAEAV012@AEBV012@@Z
@ cdecl -arch=arm ??4SchedulerPolicy@Concurrency@@QAAAAV01@ABV01@@Z(ptr ptr) msvcr120.??4SchedulerPolicy@Concurrency@@QAAAAV01@ABV01@@Z
@ thiscall -arch=i386 ??4SchedulerPolicy@Concurrency@@QAEAAV01@ABV01@@Z(ptr ptr) msvcr120.??4SchedulerPolicy@Concurrency@@QAEAAV01@ABV01@@Z
@ cdecl -arch=win64 ??4SchedulerPolicy@Concurrency@@QEAAAEAV01@AEBV01@@Z(ptr ptr) msvcr120.??4SchedulerPolicy@Concurrency@@QEAAAEAV01@AEBV01@@Z
@ cdecl -arch=arm ??_F?$_SpinWait@$00@details@Concurrency@@QAAXXZ(ptr) msvcr120.??_F?$_SpinWait@$00@details@Concurrency@@QAAXXZ
@ thiscall -arch=i386 ??_F?$_SpinWait@$00@details@Concurrency@@QAEXXZ(ptr) msvcr120.??_F?$_SpinWait@$00@details@Concurrency@@QAEXXZ
@ cdecl -arch=win64 ??_F?$_SpinWait@$00@details@Concurrency@@QEAAXXZ(ptr) msvcr120.??_F?$_SpinWait@$00@details@Concurrency@@QEAAXXZ
@ cdecl -arch=arm ??_F?$_SpinWait@$0A@@details@Concurrency@@QAAXXZ(ptr) msvcr120.??_F?$_SpinWait@$0A@@details@Concurrency@@QAAXXZ
@ thiscall -arch=i386 ??_F?$_SpinWait@$0A@@details@Concurrency@@QAEXXZ(ptr) msvcr120.??_F?$_SpinWait@$0A@@details@Concurrency@@QAEXXZ
@ cdecl -arch=win64 ??_F?$_SpinWait@$0A@@details@Concurrency@@QEAAXXZ(ptr) msvcr120.??_F?$_SpinWait@$0A@@details@Concurrency@@QEAAXXZ
@ stub -arch=arm ??_F_Context@details@Concurrency@@QAAXXZ
@ stub -arch=i386 ??_F_Context@details@Concurrency@@QAEXXZ
@ stub -arch=win64 ??_F_Context@details@Concurrency@@QEAAXXZ
@ cdecl -arch=arm ??_F_Scheduler@details@Concurrency@@QAAXXZ(ptr) msvcr120.??_F_Scheduler@details@Concurrency@@QAAXXZ
@ thiscall -arch=i386 ??_F_Scheduler@details@Concurrency@@QAEXXZ(ptr) msvcr120.??_F_Scheduler@details@Concurrency@@QAEXXZ
@ cdecl -arch=win64 ??_F_Scheduler@details@Concurrency@@QEAAXXZ(ptr) msvcr120.??_F_Scheduler@details@Concurrency@@QEAAXXZ
# extern ?AgentEventGuid@Concurrency@@3U_GUID@@B
@ -247,6 +355,7 @@
@ cdecl ?GetNumberOfVirtualProcessors@CurrentScheduler@Concurrency@@SAIXZ() msvcr120.?GetNumberOfVirtualProcessors@CurrentScheduler@Concurrency@@SAIXZ
@ stub ?GetOSVersion@Concurrency@@YA?AW4OSVersion@IResourceManager@1@XZ
@ cdecl ?GetPolicy@CurrentScheduler@Concurrency@@SA?AVSchedulerPolicy@2@XZ(ptr) msvcr120.?GetPolicy@CurrentScheduler@Concurrency@@SA?AVSchedulerPolicy@2@XZ
@ cdecl -arch=arm ?GetPolicyValue@SchedulerPolicy@Concurrency@@QBAIW4PolicyElementKey@2@@Z(ptr long) msvcr120.?GetPolicyValue@SchedulerPolicy@Concurrency@@QBAIW4PolicyElementKey@2@@Z
@ thiscall -arch=i386 ?GetPolicyValue@SchedulerPolicy@Concurrency@@QBEIW4PolicyElementKey@2@@Z(ptr long) msvcr120.?GetPolicyValue@SchedulerPolicy@Concurrency@@QBEIW4PolicyElementKey@2@@Z
@ cdecl -arch=win64 ?GetPolicyValue@SchedulerPolicy@Concurrency@@QEBAIW4PolicyElementKey@2@@Z(ptr long) msvcr120.?GetPolicyValue@SchedulerPolicy@Concurrency@@QEBAIW4PolicyElementKey@2@@Z
@ stub ?GetProcessorCount@Concurrency@@YAIXZ
@ -283,56 +392,76 @@
@ cdecl -arch=win32 ?ScheduleTask@CurrentScheduler@Concurrency@@SAXP6AXPAX@Z0AAVlocation@2@@Z(ptr ptr ptr) msvcr120.?ScheduleTask@CurrentScheduler@Concurrency@@SAXP6AXPAX@Z0AAVlocation@2@@Z
@ cdecl -arch=win64 ?ScheduleTask@CurrentScheduler@Concurrency@@SAXP6AXPEAX@Z0AEAVlocation@2@@Z(ptr ptr ptr) msvcr120.?ScheduleTask@CurrentScheduler@Concurrency@@SAXP6AXPEAX@Z0AEAVlocation@2@@Z
# extern ?SchedulerEventGuid@Concurrency@@3U_GUID@@B
@ cdecl -arch=arm ?SetConcurrencyLimits@SchedulerPolicy@Concurrency@@QAAXII@Z(ptr long long) msvcr120.?SetConcurrencyLimits@SchedulerPolicy@Concurrency@@QAAXII@Z
@ thiscall -arch=i386 ?SetConcurrencyLimits@SchedulerPolicy@Concurrency@@QAEXII@Z(ptr long long) msvcr120.?SetConcurrencyLimits@SchedulerPolicy@Concurrency@@QAEXII@Z
@ cdecl -arch=win64 ?SetConcurrencyLimits@SchedulerPolicy@Concurrency@@QEAAXII@Z(ptr long long) msvcr120.?SetConcurrencyLimits@SchedulerPolicy@Concurrency@@QEAAXII@Z
@ cdecl -arch=win32 ?SetDefaultSchedulerPolicy@Scheduler@Concurrency@@SAXABVSchedulerPolicy@2@@Z(ptr) msvcr120.?SetDefaultSchedulerPolicy@Scheduler@Concurrency@@SAXABVSchedulerPolicy@2@@Z
@ cdecl -arch=win64 ?SetDefaultSchedulerPolicy@Scheduler@Concurrency@@SAXAEBVSchedulerPolicy@2@@Z(ptr) msvcr120.?SetDefaultSchedulerPolicy@Scheduler@Concurrency@@SAXAEBVSchedulerPolicy@2@@Z
@ cdecl -arch=arm ?SetPolicyValue@SchedulerPolicy@Concurrency@@QAAIW4PolicyElementKey@2@I@Z(ptr long long) msvcr120.?SetPolicyValue@SchedulerPolicy@Concurrency@@QAAIW4PolicyElementKey@2@I@Z
@ thiscall -arch=i386 ?SetPolicyValue@SchedulerPolicy@Concurrency@@QAEIW4PolicyElementKey@2@I@Z(ptr long long) msvcr120.?SetPolicyValue@SchedulerPolicy@Concurrency@@QAEIW4PolicyElementKey@2@I@Z
@ cdecl -arch=win64 ?SetPolicyValue@SchedulerPolicy@Concurrency@@QEAAIW4PolicyElementKey@2@I@Z(ptr long long) msvcr120.?SetPolicyValue@SchedulerPolicy@Concurrency@@QEAAIW4PolicyElementKey@2@I@Z
# extern ?VirtualProcessorEventGuid@Concurrency@@3U_GUID@@B
@ cdecl ?VirtualProcessorId@Context@Concurrency@@SAIXZ() msvcr120.?VirtualProcessorId@Context@Concurrency@@SAIXZ
@ cdecl ?Yield@Context@Concurrency@@SAXXZ() msvcr120.?Yield@Context@Concurrency@@SAXXZ
@ stub -arch=arm ?_Abort@_StructuredTaskCollection@details@Concurrency@@AAAXXZ
@ stub -arch=i386 ?_Abort@_StructuredTaskCollection@details@Concurrency@@AAEXXZ
@ stub -arch=win64 ?_Abort@_StructuredTaskCollection@details@Concurrency@@AEAAXXZ
@ cdecl -arch=arm ?_Acquire@_NonReentrantBlockingLock@details@Concurrency@@QAAXXZ(ptr) msvcr120.?_Acquire@_NonReentrantBlockingLock@details@Concurrency@@QAAXXZ
@ thiscall -arch=i386 ?_Acquire@_NonReentrantBlockingLock@details@Concurrency@@QAEXXZ(ptr) msvcr120.?_Acquire@_NonReentrantBlockingLock@details@Concurrency@@QAEXXZ
@ cdecl -arch=win64 ?_Acquire@_NonReentrantBlockingLock@details@Concurrency@@QEAAXXZ(ptr) msvcr120.?_Acquire@_NonReentrantBlockingLock@details@Concurrency@@QEAAXXZ
@ cdecl -arch=arm ?_Acquire@_NonReentrantPPLLock@details@Concurrency@@QAAXPAX@Z(ptr ptr) msvcr120.?_Acquire@_NonReentrantPPLLock@details@Concurrency@@QAAXPAX@Z
@ thiscall -arch=i386 ?_Acquire@_NonReentrantPPLLock@details@Concurrency@@QAEXPAX@Z(ptr ptr) msvcr120.?_Acquire@_NonReentrantPPLLock@details@Concurrency@@QAEXPAX@Z
@ cdecl -arch=win64 ?_Acquire@_NonReentrantPPLLock@details@Concurrency@@QEAAXPEAX@Z(ptr ptr) msvcr120.?_Acquire@_NonReentrantPPLLock@details@Concurrency@@QEAAXPEAX@Z
@ cdecl -arch=arm ?_Acquire@_ReentrantBlockingLock@details@Concurrency@@QAAXXZ(ptr) msvcr120.?_Acquire@_ReentrantBlockingLock@details@Concurrency@@QAAXXZ
@ thiscall -arch=i386 ?_Acquire@_ReentrantBlockingLock@details@Concurrency@@QAEXXZ(ptr) msvcr120.?_Acquire@_ReentrantBlockingLock@details@Concurrency@@QAEXXZ
@ cdecl -arch=win64 ?_Acquire@_ReentrantBlockingLock@details@Concurrency@@QEAAXXZ(ptr) msvcr120.?_Acquire@_ReentrantBlockingLock@details@Concurrency@@QEAAXXZ
@ stub -arch=arm ?_Acquire@_ReentrantLock@details@Concurrency@@QAAXXZ
@ stub -arch=i386 ?_Acquire@_ReentrantLock@details@Concurrency@@QAEXXZ
@ stub -arch=win64 ?_Acquire@_ReentrantLock@details@Concurrency@@QEAAXXZ
@ cdecl -arch=arm ?_Acquire@_ReentrantPPLLock@details@Concurrency@@QAAXPAX@Z(ptr ptr) msvcr120.?_Acquire@_ReentrantPPLLock@details@Concurrency@@QAAXPAX@Z
@ thiscall -arch=i386 ?_Acquire@_ReentrantPPLLock@details@Concurrency@@QAEXPAX@Z(ptr ptr) msvcr120.?_Acquire@_ReentrantPPLLock@details@Concurrency@@QAEXPAX@Z
@ cdecl -arch=win64 ?_Acquire@_ReentrantPPLLock@details@Concurrency@@QEAAXPEAX@Z(ptr ptr) msvcr120.?_Acquire@_ReentrantPPLLock@details@Concurrency@@QEAAXPEAX@Z
@ stub -arch=arm ?_AcquireRead@_ReaderWriterLock@details@Concurrency@@QAAXXZ
@ stub -arch=i386 ?_AcquireRead@_ReaderWriterLock@details@Concurrency@@QAEXXZ
@ stub -arch=win64 ?_AcquireRead@_ReaderWriterLock@details@Concurrency@@QEAAXXZ
@ stub -arch=arm ?_AcquireWrite@_ReaderWriterLock@details@Concurrency@@QAAXXZ
@ stub -arch=i386 ?_AcquireWrite@_ReaderWriterLock@details@Concurrency@@QAEXXZ
@ stub -arch=win64 ?_AcquireWrite@_ReaderWriterLock@details@Concurrency@@QEAAXXZ
@ stub -arch=arm ?_Advance@_Concurrent_queue_iterator_base_v4@details@Concurrency@@IAAXXZ
@ stub -arch=i386 ?_Advance@_Concurrent_queue_iterator_base_v4@details@Concurrency@@IAEXXZ
@ stub -arch=win64 ?_Advance@_Concurrent_queue_iterator_base_v4@details@Concurrency@@IEAAXXZ
@ stub -arch=arm ?_Assign@_Concurrent_queue_iterator_base_v4@details@Concurrency@@IAAXABV123@@Z
@ stub -arch=i386 ?_Assign@_Concurrent_queue_iterator_base_v4@details@Concurrency@@IAEXABV123@@Z
@ stub -arch=win64 ?_Assign@_Concurrent_queue_iterator_base_v4@details@Concurrency@@IEAAXAEBV123@@Z
# extern ?_Byte_reverse_table@details@Concurrency@@3QBEB
@ stub -arch=arm ?_Cancel@_StructuredTaskCollection@details@Concurrency@@QAAXXZ
@ stub -arch=i386 ?_Cancel@_StructuredTaskCollection@details@Concurrency@@QAEXXZ
@ stub -arch=win64 ?_Cancel@_StructuredTaskCollection@details@Concurrency@@QEAAXXZ
@ stub -arch=arm ?_Cancel@_TaskCollection@details@Concurrency@@QAAXXZ
@ stub -arch=i386 ?_Cancel@_TaskCollection@details@Concurrency@@QAEXXZ
@ stub -arch=win64 ?_Cancel@_TaskCollection@details@Concurrency@@QEAAXXZ
@ stub -arch=arm ?_CheckTaskCollection@_UnrealizedChore@details@Concurrency@@IAAXXZ
@ stub -arch=i386 ?_CheckTaskCollection@_UnrealizedChore@details@Concurrency@@IAEXXZ
@ stub -arch=win64 ?_CheckTaskCollection@_UnrealizedChore@details@Concurrency@@IEAAXXZ
@ stub -arch=arm ?_CleanupToken@_StructuredTaskCollection@details@Concurrency@@AAAXXZ
@ stub -arch=i386 ?_CleanupToken@_StructuredTaskCollection@details@Concurrency@@AAEXXZ
@ stub -arch=win64 ?_CleanupToken@_StructuredTaskCollection@details@Concurrency@@AEAAXXZ
@ stub -arch=win32 ?_ConcRT_CoreAssert@details@Concurrency@@YAXPBD0H@Z
@ stub -arch=win64 ?_ConcRT_CoreAssert@details@Concurrency@@YAXPEBD0H@Z
@ stub -arch=win32 ?_ConcRT_Trace@details@Concurrency@@YAXHPB_WZZ
@ stub -arch=win64 ?_ConcRT_Trace@details@Concurrency@@YAXHPEB_WZZ
@ stub -arch=arm ?_Confirm_cancel@_Cancellation_beacon@details@Concurrency@@QAA_NXZ
@ stub -arch=i386 ?_Confirm_cancel@_Cancellation_beacon@details@Concurrency@@QAE_NXZ
@ stub -arch=win64 ?_Confirm_cancel@_Cancellation_beacon@details@Concurrency@@QEAA_NXZ
@ cdecl ?_CurrentContext@_Context@details@Concurrency@@SA?AV123@XZ() msvcr120.?_CurrentContext@_Context@details@Concurrency@@SA?AV123@XZ
@ stub ?_Current_node@location@Concurrency@@SA?AV12@XZ
@ stub -arch=arm ?_Destroy@_AsyncTaskCollection@details@Concurrency@@EAAXXZ
@ stub -arch=i386 ?_Destroy@_AsyncTaskCollection@details@Concurrency@@EAEXXZ
@ stub -arch=win64 ?_Destroy@_AsyncTaskCollection@details@Concurrency@@EEAAXXZ
@ cdecl -arch=arm ?_DoYield@?$_SpinWait@$00@details@Concurrency@@IAAXXZ(ptr) msvcr120.?_DoYield@?$_SpinWait@$00@details@Concurrency@@IAAXXZ
@ thiscall -arch=i386 ?_DoYield@?$_SpinWait@$00@details@Concurrency@@IAEXXZ(ptr) msvcr120.?_DoYield@?$_SpinWait@$00@details@Concurrency@@IAEXXZ
@ cdecl -arch=win64 ?_DoYield@?$_SpinWait@$00@details@Concurrency@@IEAAXXZ(ptr) msvcr120.?_DoYield@?$_SpinWait@$00@details@Concurrency@@IEAAXXZ
@ cdecl -arch=arm ?_DoYield@?$_SpinWait@$0A@@details@Concurrency@@IAAXXZ(ptr) msvcr120.?_DoYield@?$_SpinWait@$0A@@details@Concurrency@@IAAXXZ
@ thiscall -arch=i386 ?_DoYield@?$_SpinWait@$0A@@details@Concurrency@@IAEXXZ(ptr) msvcr120.?_DoYield@?$_SpinWait@$0A@@details@Concurrency@@IAEXXZ
@ cdecl -arch=win64 ?_DoYield@?$_SpinWait@$0A@@details@Concurrency@@IEAAXXZ(ptr) msvcr120.?_DoYield@?$_SpinWait@$0A@@details@Concurrency@@IEAAXXZ
@ cdecl ?_Get@_CurrentScheduler@details@Concurrency@@SA?AV_Scheduler@23@XZ(ptr) msvcr120.?_Get@_CurrentScheduler@details@Concurrency@@SA?AV_Scheduler@23@XZ
@ -344,185 +473,263 @@
@ stub -arch=win32 ?_GetCurrentInlineDepth@_StackGuard@details@Concurrency@@CAAAIXZ
@ stub -arch=win64 ?_GetCurrentInlineDepth@_StackGuard@details@Concurrency@@CAAEA_KXZ
@ cdecl ?_GetNumberOfVirtualProcessors@_CurrentScheduler@details@Concurrency@@SAIXZ() msvcr120.?_GetNumberOfVirtualProcessors@_CurrentScheduler@details@Concurrency@@SAIXZ
@ cdecl -arch=arm ?_GetScheduler@_Scheduler@details@Concurrency@@QAAPAVScheduler@3@XZ(ptr) msvcr120.?_GetScheduler@_Scheduler@details@Concurrency@@QAAPAVScheduler@3@XZ
@ thiscall -arch=i386 ?_GetScheduler@_Scheduler@details@Concurrency@@QAEPAVScheduler@3@XZ(ptr) msvcr120.?_GetScheduler@_Scheduler@details@Concurrency@@QAEPAVScheduler@3@XZ
@ cdecl -arch=win64 ?_GetScheduler@_Scheduler@details@Concurrency@@QEAAPEAVScheduler@3@XZ(ptr) msvcr120.?_GetScheduler@_Scheduler@details@Concurrency@@QEAAPEAVScheduler@3@XZ
@ cdecl ?_Id@_CurrentScheduler@details@Concurrency@@SAIXZ() msvcr120.?_Id@_CurrentScheduler@details@Concurrency@@SAIXZ
@ stub -arch=arm ?_Internal_assign@_Concurrent_vector_base_v4@details@Concurrency@@IAAXABV123@IP6AXPAXI@ZP6AX1PBXI@Z4@Z
@ thiscall -arch=i386 ?_Internal_assign@_Concurrent_vector_base_v4@details@Concurrency@@IAEXABV123@IP6AXPAXI@ZP6AX1PBXI@Z4@Z(ptr ptr long ptr ptr ptr) msvcp120.?_Internal_assign@_Concurrent_vector_base_v4@details@Concurrency@@IAEXABV123@IP6AXPAXI@ZP6AX1PBXI@Z4@Z
@ cdecl -arch=win64 ?_Internal_assign@_Concurrent_vector_base_v4@details@Concurrency@@IEAAXAEBV123@_KP6AXPEAX1@ZP6AX2PEBX1@Z5@Z(ptr ptr long ptr ptr ptr) msvcp120.?_Internal_assign@_Concurrent_vector_base_v4@details@Concurrency@@IEAAXAEBV123@_KP6AXPEAX1@ZP6AX2PEBX1@Z5@Z
@ stub -arch=arm ?_Internal_capacity@_Concurrent_vector_base_v4@details@Concurrency@@IBAIXZ
@ thiscall -arch=i386 ?_Internal_capacity@_Concurrent_vector_base_v4@details@Concurrency@@IBEIXZ(ptr) msvcp120.?_Internal_capacity@_Concurrent_vector_base_v4@details@Concurrency@@IBEIXZ
@ cdecl -arch=win64 ?_Internal_capacity@_Concurrent_vector_base_v4@details@Concurrency@@IEBA_KXZ(ptr) msvcp120.?_Internal_capacity@_Concurrent_vector_base_v4@details@Concurrency@@IEBA_KXZ
@ stub -arch=arm ?_Internal_clear@_Concurrent_vector_base_v4@details@Concurrency@@IAAIP6AXPAXI@Z@Z
@ thiscall -arch=i386 ?_Internal_clear@_Concurrent_vector_base_v4@details@Concurrency@@IAEIP6AXPAXI@Z@Z(ptr ptr) msvcp120.?_Internal_clear@_Concurrent_vector_base_v4@details@Concurrency@@IAEIP6AXPAXI@Z@Z
@ cdecl -arch=win64 ?_Internal_clear@_Concurrent_vector_base_v4@details@Concurrency@@IEAA_KP6AXPEAX_K@Z@Z(ptr ptr) msvcp120.?_Internal_clear@_Concurrent_vector_base_v4@details@Concurrency@@IEAA_KP6AXPEAX_K@Z@Z
@ stub -arch=arm ?_Internal_compact@_Concurrent_vector_base_v4@details@Concurrency@@IAAPAXIPAXP6AX0I@ZP6AX0PBXI@Z@Z
@ thiscall -arch=i386 ?_Internal_compact@_Concurrent_vector_base_v4@details@Concurrency@@IAEPAXIPAXP6AX0I@ZP6AX0PBXI@Z@Z(ptr long ptr ptr ptr) msvcp120.?_Internal_compact@_Concurrent_vector_base_v4@details@Concurrency@@IAEPAXIPAXP6AX0I@ZP6AX0PBXI@Z@Z
@ cdecl -arch=win64 ?_Internal_compact@_Concurrent_vector_base_v4@details@Concurrency@@IEAAPEAX_KPEAXP6AX10@ZP6AX1PEBX0@Z@Z(ptr long ptr ptr ptr) msvcp120.?_Internal_compact@_Concurrent_vector_base_v4@details@Concurrency@@IEAAPEAX_KPEAXP6AX10@ZP6AX1PEBX0@Z@Z
@ stub -arch=arm ?_Internal_copy@_Concurrent_vector_base_v4@details@Concurrency@@IAAXABV123@IP6AXPAXPBXI@Z@Z
@ thiscall -arch=i386 ?_Internal_copy@_Concurrent_vector_base_v4@details@Concurrency@@IAEXABV123@IP6AXPAXPBXI@Z@Z(ptr ptr long ptr) msvcp120.?_Internal_copy@_Concurrent_vector_base_v4@details@Concurrency@@IAEXABV123@IP6AXPAXPBXI@Z@Z
@ cdecl -arch=win64 ?_Internal_copy@_Concurrent_vector_base_v4@details@Concurrency@@IEAAXAEBV123@_KP6AXPEAXPEBX1@Z@Z(ptr ptr long ptr) msvcp120.?_Internal_copy@_Concurrent_vector_base_v4@details@Concurrency@@IEAAXAEBV123@_KP6AXPEAXPEBX1@Z@Z
@ stub -arch=arm ?_Internal_empty@_Concurrent_queue_base_v4@details@Concurrency@@IBA_NXZ
@ thiscall -arch=i386 ?_Internal_empty@_Concurrent_queue_base_v4@details@Concurrency@@IBE_NXZ(ptr) msvcp120.?_Internal_empty@_Concurrent_queue_base_v4@details@Concurrency@@IBE_NXZ
@ cdecl -arch=win64 ?_Internal_empty@_Concurrent_queue_base_v4@details@Concurrency@@IEBA_NXZ(ptr) msvcp120.?_Internal_empty@_Concurrent_queue_base_v4@details@Concurrency@@IEBA_NXZ
@ stub -arch=arm ?_Internal_finish_clear@_Concurrent_queue_base_v4@details@Concurrency@@IAAXXZ
@ thiscall -arch=i386 ?_Internal_finish_clear@_Concurrent_queue_base_v4@details@Concurrency@@IAEXXZ(ptr) msvcp120.?_Internal_finish_clear@_Concurrent_queue_base_v4@details@Concurrency@@IAEXXZ
@ cdecl -arch=win64 ?_Internal_finish_clear@_Concurrent_queue_base_v4@details@Concurrency@@IEAAXXZ(ptr) msvcp120.?_Internal_finish_clear@_Concurrent_queue_base_v4@details@Concurrency@@IEAAXXZ
@ stub -arch=arm ?_Internal_grow_by@_Concurrent_vector_base_v4@details@Concurrency@@IAAIIIP6AXPAXPBXI@Z1@Z
@ thiscall -arch=i386 ?_Internal_grow_by@_Concurrent_vector_base_v4@details@Concurrency@@IAEIIIP6AXPAXPBXI@Z1@Z(ptr long long ptr ptr) msvcp120.?_Internal_grow_by@_Concurrent_vector_base_v4@details@Concurrency@@IAEIIIP6AXPAXPBXI@Z1@Z
@ cdecl -arch=win64 ?_Internal_grow_by@_Concurrent_vector_base_v4@details@Concurrency@@IEAA_K_K0P6AXPEAXPEBX0@Z2@Z(ptr long long ptr ptr) msvcp120.?_Internal_grow_by@_Concurrent_vector_base_v4@details@Concurrency@@IEAA_K_K0P6AXPEAXPEBX0@Z2@Z
@ stub -arch=arm ?_Internal_grow_to_at_least_with_result@_Concurrent_vector_base_v4@details@Concurrency@@IAAIIIP6AXPAXPBXI@Z1@Z
@ thiscall -arch=i386 ?_Internal_grow_to_at_least_with_result@_Concurrent_vector_base_v4@details@Concurrency@@IAEIIIP6AXPAXPBXI@Z1@Z(ptr long long ptr ptr) msvcp120.?_Internal_grow_to_at_least_with_result@_Concurrent_vector_base_v4@details@Concurrency@@IAEIIIP6AXPAXPBXI@Z1@Z
@ cdecl -arch=win64 ?_Internal_grow_to_at_least_with_result@_Concurrent_vector_base_v4@details@Concurrency@@IEAA_K_K0P6AXPEAXPEBX0@Z2@Z(ptr long long ptr ptr) msvcp120.?_Internal_grow_to_at_least_with_result@_Concurrent_vector_base_v4@details@Concurrency@@IEAA_K_K0P6AXPEAXPEBX0@Z2@Z
@ stub -arch=arm ?_Internal_move_push@_Concurrent_queue_base_v4@details@Concurrency@@IAAXPAX@Z
@ thiscall -arch=i386 ?_Internal_move_push@_Concurrent_queue_base_v4@details@Concurrency@@IAEXPAX@Z(ptr ptr) msvcp120.?_Internal_move_push@_Concurrent_queue_base_v4@details@Concurrency@@IAEXPAX@Z
@ cdecl -arch=win64 ?_Internal_move_push@_Concurrent_queue_base_v4@details@Concurrency@@IEAAXPEAX@Z(ptr ptr) msvcp120.?_Internal_move_push@_Concurrent_queue_base_v4@details@Concurrency@@IEAAXPEAX@Z
@ stub -arch=arm ?_Internal_pop_if_present@_Concurrent_queue_base_v4@details@Concurrency@@IAA_NPAX@Z
@ thiscall -arch=i386 ?_Internal_pop_if_present@_Concurrent_queue_base_v4@details@Concurrency@@IAE_NPAX@Z(ptr ptr) msvcp120.?_Internal_pop_if_present@_Concurrent_queue_base_v4@details@Concurrency@@IAE_NPAX@Z
@ cdecl -arch=win64 ?_Internal_pop_if_present@_Concurrent_queue_base_v4@details@Concurrency@@IEAA_NPEAX@Z(ptr ptr) msvcp120.?_Internal_pop_if_present@_Concurrent_queue_base_v4@details@Concurrency@@IEAA_NPEAX@Z
@ stub -arch=arm ?_Internal_push@_Concurrent_queue_base_v4@details@Concurrency@@IAAXPBX@Z
@ thiscall -arch=i386 ?_Internal_push@_Concurrent_queue_base_v4@details@Concurrency@@IAEXPBX@Z(ptr ptr) msvcp120.?_Internal_push@_Concurrent_queue_base_v4@details@Concurrency@@IAEXPBX@Z
@ cdecl -arch=win64 ?_Internal_push@_Concurrent_queue_base_v4@details@Concurrency@@IEAAXPEBX@Z(ptr ptr) msvcp120.?_Internal_push@_Concurrent_queue_base_v4@details@Concurrency@@IEAAXPEBX@Z
@ stub -arch=arm ?_Internal_push_back@_Concurrent_vector_base_v4@details@Concurrency@@IAAPAXIAAI@Z
@ thiscall -arch=i386 ?_Internal_push_back@_Concurrent_vector_base_v4@details@Concurrency@@IAEPAXIAAI@Z(ptr long long) msvcp120.?_Internal_push_back@_Concurrent_vector_base_v4@details@Concurrency@@IAEPAXIAAI@Z
@ cdecl -arch=win64 ?_Internal_push_back@_Concurrent_vector_base_v4@details@Concurrency@@IEAAPEAX_KAEA_K@Z(ptr long long) msvcp120.?_Internal_push_back@_Concurrent_vector_base_v4@details@Concurrency@@IEAAPEAX_KAEA_K@Z
@ stub -arch=arm ?_Internal_reserve@_Concurrent_vector_base_v4@details@Concurrency@@IAAXIII@Z
@ thiscall -arch=i386 ?_Internal_reserve@_Concurrent_vector_base_v4@details@Concurrency@@IAEXIII@Z(ptr long long long) msvcp120.?_Internal_reserve@_Concurrent_vector_base_v4@details@Concurrency@@IAEXIII@Z
@ cdecl -arch=win64 ?_Internal_reserve@_Concurrent_vector_base_v4@details@Concurrency@@IEAAX_K00@Z(ptr long long long) msvcp120.?_Internal_reserve@_Concurrent_vector_base_v4@details@Concurrency@@IEAAX_K00@Z
@ stub -arch=arm ?_Internal_resize@_Concurrent_vector_base_v4@details@Concurrency@@IAAXIIIP6AXPAXI@ZP6AX0PBXI@Z2@Z
@ thiscall -arch=i386 ?_Internal_resize@_Concurrent_vector_base_v4@details@Concurrency@@IAEXIIIP6AXPAXI@ZP6AX0PBXI@Z2@Z(ptr long long long ptr ptr ptr) msvcp120.?_Internal_resize@_Concurrent_vector_base_v4@details@Concurrency@@IAEXIIIP6AXPAXI@ZP6AX0PBXI@Z2@Z
@ cdecl -arch=win64 ?_Internal_resize@_Concurrent_vector_base_v4@details@Concurrency@@IEAAX_K00P6AXPEAX0@ZP6AX1PEBX0@Z3@Z(ptr long long long ptr ptr ptr) msvcp120.?_Internal_resize@_Concurrent_vector_base_v4@details@Concurrency@@IEAAX_K00P6AXPEAX0@ZP6AX1PEBX0@Z3@Z
@ stub -arch=arm ?_Internal_size@_Concurrent_queue_base_v4@details@Concurrency@@IBAIXZ
@ thiscall -arch=i386 ?_Internal_size@_Concurrent_queue_base_v4@details@Concurrency@@IBEIXZ(ptr) msvcp120.?_Internal_size@_Concurrent_queue_base_v4@details@Concurrency@@IBEIXZ
@ cdecl -arch=win64 ?_Internal_size@_Concurrent_queue_base_v4@details@Concurrency@@IEBA_KXZ(ptr) msvcp120.?_Internal_size@_Concurrent_queue_base_v4@details@Concurrency@@IEBA_KXZ
@ stub -arch=arm ?_Internal_swap@_Concurrent_queue_base_v4@details@Concurrency@@IAAXAAV123@@Z
@ thiscall -arch=i386 ?_Internal_swap@_Concurrent_queue_base_v4@details@Concurrency@@IAEXAAV123@@Z(ptr ptr) msvcp120.?_Internal_swap@_Concurrent_queue_base_v4@details@Concurrency@@IAEXAAV123@@Z
@ cdecl -arch=win64 ?_Internal_swap@_Concurrent_queue_base_v4@details@Concurrency@@IEAAXAEAV123@@Z(ptr ptr) msvcp120.?_Internal_swap@_Concurrent_queue_base_v4@details@Concurrency@@IEAAXAEAV123@@Z
@ stub -arch=arm ?_Internal_swap@_Concurrent_vector_base_v4@details@Concurrency@@IAAXAAV123@@Z
@ thiscall -arch=i386 ?_Internal_swap@_Concurrent_vector_base_v4@details@Concurrency@@IAEXAAV123@@Z(ptr ptr) msvcp120.?_Internal_swap@_Concurrent_vector_base_v4@details@Concurrency@@IAEXAAV123@@Z
@ cdecl -arch=win64 ?_Internal_swap@_Concurrent_vector_base_v4@details@Concurrency@@IEAAXAEAV123@@Z(ptr ptr) msvcp120.?_Internal_swap@_Concurrent_vector_base_v4@details@Concurrency@@IEAAXAEAV123@@Z
@ stub -arch=arm ?_Internal_throw_exception@_Concurrent_queue_base_v4@details@Concurrency@@IBAXXZ
@ thiscall -arch=i386 ?_Internal_throw_exception@_Concurrent_queue_base_v4@details@Concurrency@@IBEXXZ(ptr) msvcp120.?_Internal_throw_exception@_Concurrent_queue_base_v4@details@Concurrency@@IBEXXZ
@ cdecl -arch=win64 ?_Internal_throw_exception@_Concurrent_queue_base_v4@details@Concurrency@@IEBAXXZ(ptr) msvcp120.?_Internal_throw_exception@_Concurrent_queue_base_v4@details@Concurrency@@IEBAXXZ
@ stub -arch=arm ?_Internal_throw_exception@_Concurrent_vector_base_v4@details@Concurrency@@IBAXI@Z
@ thiscall -arch=i386 ?_Internal_throw_exception@_Concurrent_vector_base_v4@details@Concurrency@@IBEXI@Z(ptr long) msvcp120.?_Internal_throw_exception@_Concurrent_vector_base_v4@details@Concurrency@@IBEXI@Z
@ cdecl -arch=win64 ?_Internal_throw_exception@_Concurrent_vector_base_v4@details@Concurrency@@IEBAX_K@Z(ptr long) msvcp120.?_Internal_throw_exception@_Concurrent_vector_base_v4@details@Concurrency@@IEBAX_K@Z
@ stub -arch=arm ?_IsCanceling@_StructuredTaskCollection@details@Concurrency@@QAA_NXZ
@ stub -arch=i386 ?_IsCanceling@_StructuredTaskCollection@details@Concurrency@@QAE_NXZ
@ stub -arch=win64 ?_IsCanceling@_StructuredTaskCollection@details@Concurrency@@QEAA_NXZ
@ stub -arch=arm ?_IsCanceling@_TaskCollection@details@Concurrency@@QAA_NXZ
@ stub -arch=i386 ?_IsCanceling@_TaskCollection@details@Concurrency@@QAE_NXZ
@ stub -arch=win64 ?_IsCanceling@_TaskCollection@details@Concurrency@@QEAA_NXZ
@ stub -arch=arm ?_IsSynchronouslyBlocked@_Context@details@Concurrency@@QBA_NXZ
@ stub -arch=i386 ?_IsSynchronouslyBlocked@_Context@details@Concurrency@@QBE_NXZ
@ stub -arch=win64 ?_IsSynchronouslyBlocked@_Context@details@Concurrency@@QEBA_NXZ
@ stub -arch=win32 ?_NewCollection@_AsyncTaskCollection@details@Concurrency@@SAPAV123@PAV_CancellationTokenState@23@@Z
@ stub -arch=win64 ?_NewCollection@_AsyncTaskCollection@details@Concurrency@@SAPEAV123@PEAV_CancellationTokenState@23@@Z
@ cdecl -arch=arm ?_NumberOfSpins@?$_SpinWait@$00@details@Concurrency@@IAAKXZ(ptr) msvcr120.?_NumberOfSpins@?$_SpinWait@$00@details@Concurrency@@IAAKXZ
@ thiscall -arch=i386 ?_NumberOfSpins@?$_SpinWait@$00@details@Concurrency@@IAEKXZ(ptr) msvcr120.?_NumberOfSpins@?$_SpinWait@$00@details@Concurrency@@IAEKXZ
@ cdecl -arch=win64 ?_NumberOfSpins@?$_SpinWait@$00@details@Concurrency@@IEAAKXZ(ptr) msvcr120.?_NumberOfSpins@?$_SpinWait@$00@details@Concurrency@@IEAAKXZ
@ cdecl -arch=arm ?_NumberOfSpins@?$_SpinWait@$0A@@details@Concurrency@@IAAKXZ(ptr) msvcr120.?_NumberOfSpins@?$_SpinWait@$0A@@details@Concurrency@@IAAKXZ
@ thiscall -arch=i386 ?_NumberOfSpins@?$_SpinWait@$0A@@details@Concurrency@@IAEKXZ(ptr) msvcr120.?_NumberOfSpins@?$_SpinWait@$0A@@details@Concurrency@@IAEKXZ
@ cdecl -arch=win64 ?_NumberOfSpins@?$_SpinWait@$0A@@details@Concurrency@@IEAAKXZ(ptr) msvcr120.?_NumberOfSpins@?$_SpinWait@$0A@@details@Concurrency@@IEAAKXZ
@ stub ?_Oversubscribe@_Context@details@Concurrency@@SAX_N@Z
@ cdecl -arch=arm ?_Reference@_Scheduler@details@Concurrency@@QAAIXZ(ptr) msvcr120.?_Reference@_Scheduler@details@Concurrency@@QAAIXZ
@ thiscall -arch=i386 ?_Reference@_Scheduler@details@Concurrency@@QAEIXZ(ptr) msvcr120.?_Reference@_Scheduler@details@Concurrency@@QAEIXZ
@ cdecl -arch=win64 ?_Reference@_Scheduler@details@Concurrency@@QEAAIXZ(ptr) msvcr120.?_Reference@_Scheduler@details@Concurrency@@QEAAIXZ
@ cdecl -arch=arm ?_Release@_NonReentrantBlockingLock@details@Concurrency@@QAAXXZ(ptr) msvcr120.?_Release@_NonReentrantBlockingLock@details@Concurrency@@QAAXXZ
@ thiscall -arch=i386 ?_Release@_NonReentrantBlockingLock@details@Concurrency@@QAEXXZ(ptr) msvcr120.?_Release@_NonReentrantBlockingLock@details@Concurrency@@QAEXXZ
@ cdecl -arch=win64 ?_Release@_NonReentrantBlockingLock@details@Concurrency@@QEAAXXZ(ptr) msvcr120.?_Release@_NonReentrantBlockingLock@details@Concurrency@@QEAAXXZ
@ cdecl -arch=arm ?_Release@_NonReentrantPPLLock@details@Concurrency@@QAAXXZ(ptr) msvcr120.?_Release@_NonReentrantPPLLock@details@Concurrency@@QAAXXZ
@ thiscall -arch=i386 ?_Release@_NonReentrantPPLLock@details@Concurrency@@QAEXXZ(ptr) msvcr120.?_Release@_NonReentrantPPLLock@details@Concurrency@@QAEXXZ
@ cdecl -arch=win64 ?_Release@_NonReentrantPPLLock@details@Concurrency@@QEAAXXZ(ptr) msvcr120.?_Release@_NonReentrantPPLLock@details@Concurrency@@QEAAXXZ
@ cdecl -arch=arm ?_Release@_ReentrantBlockingLock@details@Concurrency@@QAAXXZ(ptr) msvcr120.?_Release@_ReentrantBlockingLock@details@Concurrency@@QAAXXZ
@ thiscall -arch=i386 ?_Release@_ReentrantBlockingLock@details@Concurrency@@QAEXXZ(ptr) msvcr120.?_Release@_ReentrantBlockingLock@details@Concurrency@@QAEXXZ
@ cdecl -arch=win64 ?_Release@_ReentrantBlockingLock@details@Concurrency@@QEAAXXZ(ptr) msvcr120.?_Release@_ReentrantBlockingLock@details@Concurrency@@QEAAXXZ
@ stub -arch=arm ?_Release@_ReentrantLock@details@Concurrency@@QAAXXZ
@ stub -arch=i386 ?_Release@_ReentrantLock@details@Concurrency@@QAEXXZ
@ stub -arch=win64 ?_Release@_ReentrantLock@details@Concurrency@@QEAAXXZ
@ cdecl -arch=arm ?_Release@_ReentrantPPLLock@details@Concurrency@@QAAXXZ(ptr) msvcr120.?_Release@_ReentrantPPLLock@details@Concurrency@@QAAXXZ
@ thiscall -arch=i386 ?_Release@_ReentrantPPLLock@details@Concurrency@@QAEXXZ(ptr) msvcr120.?_Release@_ReentrantPPLLock@details@Concurrency@@QAEXXZ
@ cdecl -arch=win64 ?_Release@_ReentrantPPLLock@details@Concurrency@@QEAAXXZ(ptr) msvcr120.?_Release@_ReentrantPPLLock@details@Concurrency@@QEAAXXZ
@ cdecl -arch=arm ?_Release@_Scheduler@details@Concurrency@@QAAIXZ(ptr) msvcr120.?_Release@_Scheduler@details@Concurrency@@QAAIXZ
@ thiscall -arch=i386 ?_Release@_Scheduler@details@Concurrency@@QAEIXZ(ptr) msvcr120.?_Release@_Scheduler@details@Concurrency@@QAEIXZ
@ cdecl -arch=win64 ?_Release@_Scheduler@details@Concurrency@@QEAAIXZ(ptr) msvcr120.?_Release@_Scheduler@details@Concurrency@@QEAAIXZ
@ stub -arch=arm ?_ReleaseRead@_ReaderWriterLock@details@Concurrency@@QAAXXZ
@ stub -arch=i386 ?_ReleaseRead@_ReaderWriterLock@details@Concurrency@@QAEXXZ
@ stub -arch=win64 ?_ReleaseRead@_ReaderWriterLock@details@Concurrency@@QEAAXXZ
@ stub -arch=arm ?_ReleaseWrite@_ReaderWriterLock@details@Concurrency@@QAAXXZ
@ stub -arch=i386 ?_ReleaseWrite@_ReaderWriterLock@details@Concurrency@@QAEXXZ
@ stub -arch=win64 ?_ReleaseWrite@_ReaderWriterLock@details@Concurrency@@QEAAXXZ
@ cdecl -arch=arm ?_Reset@?$_SpinWait@$00@details@Concurrency@@IAAXXZ(ptr) msvcr120.?_Reset@?$_SpinWait@$00@details@Concurrency@@IAAXXZ
@ thiscall -arch=i386 ?_Reset@?$_SpinWait@$00@details@Concurrency@@IAEXXZ(ptr) msvcr120.?_Reset@?$_SpinWait@$00@details@Concurrency@@IAEXXZ
@ cdecl -arch=win64 ?_Reset@?$_SpinWait@$00@details@Concurrency@@IEAAXXZ(ptr) msvcr120.?_Reset@?$_SpinWait@$00@details@Concurrency@@IEAAXXZ
@ cdecl -arch=arm ?_Reset@?$_SpinWait@$0A@@details@Concurrency@@IAAXXZ(ptr) msvcr120.?_Reset@?$_SpinWait@$0A@@details@Concurrency@@IAAXXZ
@ thiscall -arch=i386 ?_Reset@?$_SpinWait@$0A@@details@Concurrency@@IAEXXZ(ptr) msvcr120.?_Reset@?$_SpinWait@$0A@@details@Concurrency@@IAEXXZ
@ cdecl -arch=win64 ?_Reset@?$_SpinWait@$0A@@details@Concurrency@@IEAAXXZ(ptr) msvcr120.?_Reset@?$_SpinWait@$0A@@details@Concurrency@@IEAAXXZ
@ stub -arch=win32 ?_RunAndWait@_StructuredTaskCollection@details@Concurrency@@QAG?AW4_TaskCollectionStatus@23@PAV_UnrealizedChore@23@@Z
@ stub -arch=arm ?_RunAndWait@_StructuredTaskCollection@details@Concurrency@@QAA?AW4_TaskCollectionStatus@23@PAV_UnrealizedChore@23@@Z
@ stub -arch=i386 ?_RunAndWait@_StructuredTaskCollection@details@Concurrency@@QAG?AW4_TaskCollectionStatus@23@PAV_UnrealizedChore@23@@Z
@ stub -arch=win64 ?_RunAndWait@_StructuredTaskCollection@details@Concurrency@@QEAA?AW4_TaskCollectionStatus@23@PEAV_UnrealizedChore@23@@Z
@ stub -arch=win32 ?_RunAndWait@_TaskCollection@details@Concurrency@@QAG?AW4_TaskCollectionStatus@23@PAV_UnrealizedChore@23@@Z
@ stub -arch=arm ?_RunAndWait@_TaskCollection@details@Concurrency@@QAA?AW4_TaskCollectionStatus@23@PAV_UnrealizedChore@23@@Z
@ stub -arch=i386 ?_RunAndWait@_TaskCollection@details@Concurrency@@QAG?AW4_TaskCollectionStatus@23@PAV_UnrealizedChore@23@@Z
@ stub -arch=win64 ?_RunAndWait@_TaskCollection@details@Concurrency@@QEAA?AW4_TaskCollectionStatus@23@PEAV_UnrealizedChore@23@@Z
@ stub -arch=arm ?_Schedule@_StructuredTaskCollection@details@Concurrency@@QAAXPAV_UnrealizedChore@23@@Z
@ stub -arch=i386 ?_Schedule@_StructuredTaskCollection@details@Concurrency@@QAEXPAV_UnrealizedChore@23@@Z
@ stub -arch=win64 ?_Schedule@_StructuredTaskCollection@details@Concurrency@@QEAAXPEAV_UnrealizedChore@23@@Z
@ stub -arch=arm ?_Schedule@_StructuredTaskCollection@details@Concurrency@@QAAXPAV_UnrealizedChore@23@PAVlocation@3@@Z
@ stub -arch=i386 ?_Schedule@_StructuredTaskCollection@details@Concurrency@@QAEXPAV_UnrealizedChore@23@PAVlocation@3@@Z
@ stub -arch=win64 ?_Schedule@_StructuredTaskCollection@details@Concurrency@@QEAAXPEAV_UnrealizedChore@23@PEAVlocation@3@@Z
@ stub -arch=arm ?_Schedule@_TaskCollection@details@Concurrency@@QAAXPAV_UnrealizedChore@23@@Z
@ stub -arch=i386 ?_Schedule@_TaskCollection@details@Concurrency@@QAEXPAV_UnrealizedChore@23@@Z
@ stub -arch=win64 ?_Schedule@_TaskCollection@details@Concurrency@@QEAAXPEAV_UnrealizedChore@23@@Z
@ stub -arch=arm ?_Schedule@_TaskCollection@details@Concurrency@@QAAXPAV_UnrealizedChore@23@PAVlocation@3@@Z
@ stub -arch=i386 ?_Schedule@_TaskCollection@details@Concurrency@@QAEXPAV_UnrealizedChore@23@PAVlocation@3@@Z
@ stub -arch=win64 ?_Schedule@_TaskCollection@details@Concurrency@@QEAAXPEAV_UnrealizedChore@23@PEAVlocation@3@@Z
@ cdecl -arch=win32 ?_ScheduleTask@_CurrentScheduler@details@Concurrency@@SAXP6AXPAX@Z0@Z(ptr ptr) msvcr120.?_ScheduleTask@_CurrentScheduler@details@Concurrency@@SAXP6AXPAX@Z0@Z
@ cdecl -arch=win64 ?_ScheduleTask@_CurrentScheduler@details@Concurrency@@SAXP6AXPEAX@Z0@Z(ptr ptr) msvcr120.?_ScheduleTask@_CurrentScheduler@details@Concurrency@@SAXP6AXPEAX@Z0@Z
@ cdecl -arch=win32 ?_Segment_index_of@_Concurrent_vector_base_v4@details@Concurrency@@KAII@Z(long) msvcp120.?_Segment_index_of@_Concurrent_vector_base_v4@details@Concurrency@@KAII@Z
@ cdecl -arch=win64 ?_Segment_index_of@_Concurrent_vector_base_v4@details@Concurrency@@KA_K_K@Z(long) msvcp120.?_Segment_index_of@_Concurrent_vector_base_v4@details@Concurrency@@KA_K_K@Z
@ cdecl -arch=arm ?_SetSpinCount@?$_SpinWait@$00@details@Concurrency@@QAAXI@Z(ptr long) msvcr120.?_SetSpinCount@?$_SpinWait@$00@details@Concurrency@@QAAXI@Z
@ thiscall -arch=i386 ?_SetSpinCount@?$_SpinWait@$00@details@Concurrency@@QAEXI@Z(ptr long) msvcr120.?_SetSpinCount@?$_SpinWait@$00@details@Concurrency@@QAEXI@Z
@ cdecl -arch=win64 ?_SetSpinCount@?$_SpinWait@$00@details@Concurrency@@QEAAXI@Z(ptr long) msvcr120.?_SetSpinCount@?$_SpinWait@$00@details@Concurrency@@QEAAXI@Z
@ cdecl -arch=arm ?_SetSpinCount@?$_SpinWait@$0A@@details@Concurrency@@QAAXI@Z(ptr long) msvcr120.?_SetSpinCount@?$_SpinWait@$0A@@details@Concurrency@@QAAXI@Z
@ thiscall -arch=i386 ?_SetSpinCount@?$_SpinWait@$0A@@details@Concurrency@@QAEXI@Z(ptr long) msvcr120.?_SetSpinCount@?$_SpinWait@$0A@@details@Concurrency@@QAEXI@Z
@ cdecl -arch=win64 ?_SetSpinCount@?$_SpinWait@$0A@@details@Concurrency@@QEAAXI@Z(ptr long) msvcr120.?_SetSpinCount@?$_SpinWait@$0A@@details@Concurrency@@QEAAXI@Z
@ cdecl -arch=arm ?_ShouldSpinAgain@?$_SpinWait@$00@details@Concurrency@@IAA_NXZ(ptr) msvcr120.?_ShouldSpinAgain@?$_SpinWait@$00@details@Concurrency@@IAA_NXZ
@ thiscall -arch=i386 ?_ShouldSpinAgain@?$_SpinWait@$00@details@Concurrency@@IAE_NXZ(ptr) msvcr120.?_ShouldSpinAgain@?$_SpinWait@$00@details@Concurrency@@IAE_NXZ
@ cdecl -arch=win64 ?_ShouldSpinAgain@?$_SpinWait@$00@details@Concurrency@@IEAA_NXZ(ptr) msvcr120.?_ShouldSpinAgain@?$_SpinWait@$00@details@Concurrency@@IEAA_NXZ
@ cdecl -arch=arm ?_ShouldSpinAgain@?$_SpinWait@$0A@@details@Concurrency@@IAA_NXZ(ptr) msvcr120.?_ShouldSpinAgain@?$_SpinWait@$0A@@details@Concurrency@@IAA_NXZ
@ thiscall -arch=i386 ?_ShouldSpinAgain@?$_SpinWait@$0A@@details@Concurrency@@IAE_NXZ(ptr) msvcr120.?_ShouldSpinAgain@?$_SpinWait@$0A@@details@Concurrency@@IAE_NXZ
@ cdecl -arch=win64 ?_ShouldSpinAgain@?$_SpinWait@$0A@@details@Concurrency@@IEAA_NXZ(ptr) msvcr120.?_ShouldSpinAgain@?$_SpinWait@$0A@@details@Concurrency@@IEAA_NXZ
@ cdecl -arch=arm ?_SpinOnce@?$_SpinWait@$00@details@Concurrency@@QAA_NXZ(ptr) msvcr120.?_SpinOnce@?$_SpinWait@$00@details@Concurrency@@QAA_NXZ
@ thiscall -arch=i386 ?_SpinOnce@?$_SpinWait@$00@details@Concurrency@@QAE_NXZ(ptr) msvcr120.?_SpinOnce@?$_SpinWait@$00@details@Concurrency@@QAE_NXZ
@ cdecl -arch=win64 ?_SpinOnce@?$_SpinWait@$00@details@Concurrency@@QEAA_NXZ(ptr) msvcr120.?_SpinOnce@?$_SpinWait@$00@details@Concurrency@@QEAA_NXZ
@ cdecl -arch=arm ?_SpinOnce@?$_SpinWait@$0A@@details@Concurrency@@QAA_NXZ(ptr) msvcr120.?_SpinOnce@?$_SpinWait@$0A@@details@Concurrency@@QAA_NXZ
@ thiscall -arch=i386 ?_SpinOnce@?$_SpinWait@$0A@@details@Concurrency@@QAE_NXZ(ptr) msvcr120.?_SpinOnce@?$_SpinWait@$0A@@details@Concurrency@@QAE_NXZ
@ cdecl -arch=win64 ?_SpinOnce@?$_SpinWait@$0A@@details@Concurrency@@QEAA_NXZ(ptr) msvcr120.?_SpinOnce@?$_SpinWait@$0A@@details@Concurrency@@QEAA_NXZ
@ cdecl ?_SpinYield@Context@Concurrency@@SAXXZ() msvcr120.?_SpinYield@Context@Concurrency@@SAXXZ
@ stub -arch=arm ?_Start@_Timer@details@Concurrency@@IAAXXZ
@ stub -arch=i386 ?_Start@_Timer@details@Concurrency@@IAEXXZ
@ stub -arch=win64 ?_Start@_Timer@details@Concurrency@@IEAAXXZ
@ stub -arch=arm ?_Stop@_Timer@details@Concurrency@@IAAXXZ
@ stub -arch=i386 ?_Stop@_Timer@details@Concurrency@@IAEXXZ
@ stub -arch=win64 ?_Stop@_Timer@details@Concurrency@@IEAAXXZ
@ varargs ?_Trace_agents@Concurrency@@YAXW4Agents_EventType@1@_JZZ(long int64) msvcr120.?_Trace_agents@Concurrency@@YAXW4Agents_EventType@1@_JZZ
@ cdecl -arch=win32 ?_Trace_ppl_function@Concurrency@@YAXABU_GUID@@EW4ConcRT_EventType@1@@Z(ptr long long) msvcr120.?_Trace_ppl_function@Concurrency@@YAXABU_GUID@@EW4ConcRT_EventType@1@@Z
@ cdecl -arch=win64 ?_Trace_ppl_function@Concurrency@@YAXAEBU_GUID@@EW4ConcRT_EventType@1@@Z(ptr long long) msvcr120.?_Trace_ppl_function@Concurrency@@YAXAEBU_GUID@@EW4ConcRT_EventType@1@@Z
@ cdecl -arch=arm ?_TryAcquire@_NonReentrantBlockingLock@details@Concurrency@@QAA_NXZ(ptr) msvcr120.?_TryAcquire@_NonReentrantBlockingLock@details@Concurrency@@QAA_NXZ
@ thiscall -arch=i386 ?_TryAcquire@_NonReentrantBlockingLock@details@Concurrency@@QAE_NXZ(ptr) msvcr120.?_TryAcquire@_NonReentrantBlockingLock@details@Concurrency@@QAE_NXZ
@ cdecl -arch=win64 ?_TryAcquire@_NonReentrantBlockingLock@details@Concurrency@@QEAA_NXZ(ptr) msvcr120.?_TryAcquire@_NonReentrantBlockingLock@details@Concurrency@@QEAA_NXZ
@ cdecl -arch=arm ?_TryAcquire@_ReentrantBlockingLock@details@Concurrency@@QAA_NXZ(ptr) msvcr120.?_TryAcquire@_ReentrantBlockingLock@details@Concurrency@@QAA_NXZ
@ thiscall -arch=i386 ?_TryAcquire@_ReentrantBlockingLock@details@Concurrency@@QAE_NXZ(ptr) msvcr120.?_TryAcquire@_ReentrantBlockingLock@details@Concurrency@@QAE_NXZ
@ cdecl -arch=win64 ?_TryAcquire@_ReentrantBlockingLock@details@Concurrency@@QEAA_NXZ(ptr) msvcr120.?_TryAcquire@_ReentrantBlockingLock@details@Concurrency@@QEAA_NXZ
@ stub -arch=arm ?_TryAcquire@_ReentrantLock@details@Concurrency@@QAA_NXZ
@ stub -arch=i386 ?_TryAcquire@_ReentrantLock@details@Concurrency@@QAE_NXZ
@ stub -arch=win64 ?_TryAcquire@_ReentrantLock@details@Concurrency@@QEAA_NXZ
@ stub -arch=arm ?_TryAcquireWrite@_ReaderWriterLock@details@Concurrency@@QAA_NXZ
@ stub -arch=i386 ?_TryAcquireWrite@_ReaderWriterLock@details@Concurrency@@QAE_NXZ
@ stub -arch=win64 ?_TryAcquireWrite@_ReaderWriterLock@details@Concurrency@@QEAA_NXZ
@ stub ?_UnderlyingYield@details@Concurrency@@YAXXZ
@ cdecl ?_Value@_SpinCount@details@Concurrency@@SAIXZ() msvcr120.?_Value@_SpinCount@details@Concurrency@@SAIXZ
@ cdecl ?_Yield@_Context@details@Concurrency@@SAXXZ() msvcr120.?_Yield@_Context@details@Concurrency@@SAXXZ
@ stub -arch=arm ?cancel@agent@Concurrency@@QAA_NXZ
@ stub -arch=i386 ?cancel@agent@Concurrency@@QAE_NXZ
@ stub -arch=win64 ?cancel@agent@Concurrency@@QEAA_NXZ
@ stub ?current@location@Concurrency@@SA?AV12@XZ
@ stub -arch=arm ?done@agent@Concurrency@@IAA_NXZ
@ stub -arch=i386 ?done@agent@Concurrency@@IAE_NXZ
@ stub -arch=win64 ?done@agent@Concurrency@@IEAA_NXZ
@ stub ?from_numa_node@location@Concurrency@@SA?AV12@G@Z
@ cdecl -arch=arm ?get_error_code@scheduler_resource_allocation_error@Concurrency@@QBAJXZ(ptr) msvcr120.?get_error_code@scheduler_resource_allocation_error@Concurrency@@QBAJXZ
@ thiscall -arch=i386 ?get_error_code@scheduler_resource_allocation_error@Concurrency@@QBEJXZ(ptr) msvcr120.?get_error_code@scheduler_resource_allocation_error@Concurrency@@QBEJXZ
@ cdecl -arch=win64 ?get_error_code@scheduler_resource_allocation_error@Concurrency@@QEBAJXZ(ptr) msvcr120.?get_error_code@scheduler_resource_allocation_error@Concurrency@@QEBAJXZ
@ cdecl ?is_current_task_group_canceling@Concurrency@@YA_NXZ() msvcp120.?is_current_task_group_canceling@Concurrency@@YA_NXZ
@ cdecl -arch=arm ?lock@critical_section@Concurrency@@QAAXXZ(ptr) msvcr120.?lock@critical_section@Concurrency@@QAAXXZ
@ thiscall -arch=i386 ?lock@critical_section@Concurrency@@QAEXXZ(ptr) msvcr120.?lock@critical_section@Concurrency@@QAEXXZ
@ cdecl -arch=win64 ?lock@critical_section@Concurrency@@QEAAXXZ(ptr) msvcr120.?lock@critical_section@Concurrency@@QEAAXXZ
@ thiscall -arch=win32 ?lock@reader_writer_lock@Concurrency@@QAEXXZ(ptr) msvcr120.?lock@reader_writer_lock@Concurrency@@QAEXXZ
@ cdecl -arch=arm ?lock@reader_writer_lock@Concurrency@@QAAXXZ(ptr) msvcr120.?lock@reader_writer_lock@Concurrency@@QAAXXZ
@ thiscall -arch=i386 ?lock@reader_writer_lock@Concurrency@@QAEXXZ(ptr) msvcr120.?lock@reader_writer_lock@Concurrency@@QAEXXZ
@ cdecl -arch=win64 ?lock@reader_writer_lock@Concurrency@@QEAAXXZ(ptr) msvcr120.?lock@reader_writer_lock@Concurrency@@QEAAXXZ
@ thiscall -arch=win32 ?lock_read@reader_writer_lock@Concurrency@@QAEXXZ(ptr) msvcr120.?lock_read@reader_writer_lock@Concurrency@@QAEXXZ
@ cdecl -arch=arm ?lock_read@reader_writer_lock@Concurrency@@QAAXXZ(ptr) msvcr120.?lock_read@reader_writer_lock@Concurrency@@QAAXXZ
@ thiscall -arch=i386 ?lock_read@reader_writer_lock@Concurrency@@QAEXXZ(ptr) msvcr120.?lock_read@reader_writer_lock@Concurrency@@QAEXXZ
@ cdecl -arch=win64 ?lock_read@reader_writer_lock@Concurrency@@QEAAXXZ(ptr) msvcr120.?lock_read@reader_writer_lock@Concurrency@@QEAAXXZ
@ cdecl -arch=arm ?native_handle@critical_section@Concurrency@@QAAAAV12@XZ(ptr) msvcr120.?native_handle@critical_section@Concurrency@@QAAAAV12@XZ
@ thiscall -arch=i386 ?native_handle@critical_section@Concurrency@@QAEAAV12@XZ(ptr) msvcr120.?native_handle@critical_section@Concurrency@@QAEAAV12@XZ
@ cdecl -arch=win64 ?native_handle@critical_section@Concurrency@@QEAAAEAV12@XZ(ptr) msvcr120.?native_handle@critical_section@Concurrency@@QEAAAEAV12@XZ
@ cdecl -arch=arm ?notify_all@_Condition_variable@details@Concurrency@@QAAXXZ(ptr) msvcr120.?notify_all@_Condition_variable@details@Concurrency@@QAAXXZ
@ thiscall -arch=i386 ?notify_all@_Condition_variable@details@Concurrency@@QAEXXZ(ptr) msvcr120.?notify_all@_Condition_variable@details@Concurrency@@QAEXXZ
@ cdecl -arch=win64 ?notify_all@_Condition_variable@details@Concurrency@@QEAAXXZ(ptr) msvcr120.?notify_all@_Condition_variable@details@Concurrency@@QEAAXXZ
@ cdecl -arch=arm ?notify_one@_Condition_variable@details@Concurrency@@QAAXXZ(ptr) msvcr120.?notify_one@_Condition_variable@details@Concurrency@@QAAXXZ
@ thiscall -arch=i386 ?notify_one@_Condition_variable@details@Concurrency@@QAEXXZ(ptr) msvcr120.?notify_one@_Condition_variable@details@Concurrency@@QAEXXZ
@ cdecl -arch=win64 ?notify_one@_Condition_variable@details@Concurrency@@QEAAXXZ(ptr) msvcr120.?notify_one@_Condition_variable@details@Concurrency@@QEAAXXZ
@ thiscall -arch=win32 ?reset@event@Concurrency@@QAEXXZ(ptr) msvcr120.?reset@event@Concurrency@@QAEXXZ
@ cdecl -arch=arm ?reset@event@Concurrency@@QAAXXZ(ptr) msvcr120.?reset@event@Concurrency@@QAAXXZ
@ thiscall -arch=i386 ?reset@event@Concurrency@@QAEXXZ(ptr) msvcr120.?reset@event@Concurrency@@QAEXXZ
@ cdecl -arch=win64 ?reset@event@Concurrency@@QEAAXXZ(ptr) msvcr120.?reset@event@Concurrency@@QEAAXXZ
@ thiscall -arch=win32 ?set@event@Concurrency@@QAEXXZ(ptr) msvcr120.?set@event@Concurrency@@QAEXXZ
@ cdecl -arch=arm ?set@event@Concurrency@@QAAXXZ(ptr) msvcr120.?set@event@Concurrency@@QAAXXZ
@ thiscall -arch=i386 ?set@event@Concurrency@@QAEXXZ(ptr) msvcr120.?set@event@Concurrency@@QAEXXZ
@ cdecl -arch=win64 ?set@event@Concurrency@@QEAAXXZ(ptr) msvcr120.?set@event@Concurrency@@QEAAXXZ
@ stub -arch=win32 ?set_task_execution_resources@Concurrency@@YAXGPAU_GROUP_AFFINITY@@@Z
@ stub -arch=win64 ?set_task_execution_resources@Concurrency@@YAXGPEAU_GROUP_AFFINITY@@@Z
@ stub -arch=win32 ?set_task_execution_resources@Concurrency@@YAXK@Z
@ stub -arch=win64 ?set_task_execution_resources@Concurrency@@YAX_K@Z
@ stub -arch=arm ?start@agent@Concurrency@@QAA_NXZ
@ stub -arch=i386 ?start@agent@Concurrency@@QAE_NXZ
@ stub -arch=win64 ?start@agent@Concurrency@@QEAA_NXZ
@ stub -arch=arm ?status@agent@Concurrency@@QAA?AW4agent_status@2@XZ
@ stub -arch=i386 ?status@agent@Concurrency@@QAE?AW4agent_status@2@XZ
@ stub -arch=win64 ?status@agent@Concurrency@@QEAA?AW4agent_status@2@XZ
@ stub -arch=arm ?status_port@agent@Concurrency@@QAAPAV?$ISource@W4agent_status@Concurrency@@@2@XZ
@ stub -arch=i386 ?status_port@agent@Concurrency@@QAEPAV?$ISource@W4agent_status@Concurrency@@@2@XZ
@ stub -arch=win64 ?status_port@agent@Concurrency@@QEAAPEAV?$ISource@W4agent_status@Concurrency@@@2@XZ
@ cdecl -arch=arm ?try_lock@critical_section@Concurrency@@QAA_NXZ(ptr) msvcr120.?try_lock@critical_section@Concurrency@@QAA_NXZ
@ thiscall -arch=i386 ?try_lock@critical_section@Concurrency@@QAE_NXZ(ptr) msvcr120.?try_lock@critical_section@Concurrency@@QAE_NXZ
@ cdecl -arch=win64 ?try_lock@critical_section@Concurrency@@QEAA_NXZ(ptr) msvcr120.?try_lock@critical_section@Concurrency@@QEAA_NXZ
@ thiscall -arch=win32 ?try_lock@reader_writer_lock@Concurrency@@QAE_NXZ(ptr) msvcr120.?try_lock@reader_writer_lock@Concurrency@@QAE_NXZ
@ cdecl -arch=arm ?try_lock@reader_writer_lock@Concurrency@@QAA_NXZ(ptr) msvcr120.?try_lock@reader_writer_lock@Concurrency@@QAA_NXZ
@ thiscall -arch=i386 ?try_lock@reader_writer_lock@Concurrency@@QAE_NXZ(ptr) msvcr120.?try_lock@reader_writer_lock@Concurrency@@QAE_NXZ
@ cdecl -arch=win64 ?try_lock@reader_writer_lock@Concurrency@@QEAA_NXZ(ptr) msvcr120.?try_lock@reader_writer_lock@Concurrency@@QEAA_NXZ
@ cdecl -arch=arm ?try_lock_for@critical_section@Concurrency@@QAA_NI@Z(ptr long) msvcr120.?try_lock_for@critical_section@Concurrency@@QAA_NI@Z
@ thiscall -arch=i386 ?try_lock_for@critical_section@Concurrency@@QAE_NI@Z(ptr long) msvcr120.?try_lock_for@critical_section@Concurrency@@QAE_NI@Z
@ cdecl -arch=win64 ?try_lock_for@critical_section@Concurrency@@QEAA_NI@Z(ptr long) msvcr120.?try_lock_for@critical_section@Concurrency@@QEAA_NI@Z
@ thiscall -arch=win32 ?try_lock_read@reader_writer_lock@Concurrency@@QAE_NXZ(ptr) msvcr120.?try_lock_read@reader_writer_lock@Concurrency@@QAE_NXZ
@ cdecl -arch=arm ?try_lock_read@reader_writer_lock@Concurrency@@QAA_NXZ(ptr) msvcr120.?try_lock_read@reader_writer_lock@Concurrency@@QAA_NXZ
@ thiscall -arch=i386 ?try_lock_read@reader_writer_lock@Concurrency@@QAE_NXZ(ptr) msvcr120.?try_lock_read@reader_writer_lock@Concurrency@@QAE_NXZ
@ cdecl -arch=win64 ?try_lock_read@reader_writer_lock@Concurrency@@QEAA_NXZ(ptr) msvcr120.?try_lock_read@reader_writer_lock@Concurrency@@QEAA_NXZ
@ cdecl -arch=arm ?unlock@critical_section@Concurrency@@QAAXXZ(ptr) msvcr120.?unlock@critical_section@Concurrency@@QAAXXZ
@ thiscall -arch=i386 ?unlock@critical_section@Concurrency@@QAEXXZ(ptr) msvcr120.?unlock@critical_section@Concurrency@@QAEXXZ
@ cdecl -arch=win64 ?unlock@critical_section@Concurrency@@QEAAXXZ(ptr) msvcr120.?unlock@critical_section@Concurrency@@QEAAXXZ
@ thiscall -arch=win32 ?unlock@reader_writer_lock@Concurrency@@QAEXXZ(ptr) msvcr120.?unlock@reader_writer_lock@Concurrency@@QAEXXZ
@ cdecl -arch=arm ?unlock@reader_writer_lock@Concurrency@@QAAXXZ(ptr) msvcr120.?unlock@reader_writer_lock@Concurrency@@QAAXXZ
@ thiscall -arch=i386 ?unlock@reader_writer_lock@Concurrency@@QAEXXZ(ptr) msvcr120.?unlock@reader_writer_lock@Concurrency@@QAEXXZ
@ cdecl -arch=win64 ?unlock@reader_writer_lock@Concurrency@@QEAAXXZ(ptr) msvcr120.?unlock@reader_writer_lock@Concurrency@@QEAAXXZ
@ cdecl ?wait@Concurrency@@YAXI@Z(long) msvcr120.?wait@Concurrency@@YAXI@Z
@ cdecl -arch=arm ?wait@_Condition_variable@details@Concurrency@@QAAXAAVcritical_section@3@@Z(ptr ptr) msvcr120.?wait@_Condition_variable@details@Concurrency@@QAAXAAVcritical_section@3@@Z
@ thiscall -arch=i386 ?wait@_Condition_variable@details@Concurrency@@QAEXAAVcritical_section@3@@Z(ptr ptr) msvcr120.?wait@_Condition_variable@details@Concurrency@@QAEXAAVcritical_section@3@@Z
@ cdecl -arch=win64 ?wait@_Condition_variable@details@Concurrency@@QEAAXAEAVcritical_section@3@@Z(ptr ptr) msvcr120.?wait@_Condition_variable@details@Concurrency@@QEAAXAEAVcritical_section@3@@Z
@ stub -arch=win32 ?wait@agent@Concurrency@@SA?AW4agent_status@2@PAV12@I@Z
@ stub -arch=win64 ?wait@agent@Concurrency@@SA?AW4agent_status@2@PEAV12@I@Z
@ thiscall -arch=win32 ?wait@event@Concurrency@@QAEII@Z(ptr long) msvcr120.?wait@event@Concurrency@@QAEII@Z
@ cdecl -arch=arm ?wait@event@Concurrency@@QAAII@Z(ptr long) msvcr120.?wait@event@Concurrency@@QAAII@Z
@ thiscall -arch=i386 ?wait@event@Concurrency@@QAEII@Z(ptr long) msvcr120.?wait@event@Concurrency@@QAEII@Z
@ cdecl -arch=win64 ?wait@event@Concurrency@@QEAA_KI@Z(ptr long) msvcr120.?wait@event@Concurrency@@QEAA_KI@Z
@ cdecl -arch=arm ?wait_for@_Condition_variable@details@Concurrency@@QAA_NAAVcritical_section@3@I@Z(ptr ptr long) msvcr120.?wait_for@_Condition_variable@details@Concurrency@@QAA_NAAVcritical_section@3@I@Z
@ thiscall -arch=i386 ?wait_for@_Condition_variable@details@Concurrency@@QAE_NAAVcritical_section@3@I@Z(ptr ptr long) msvcr120.?wait_for@_Condition_variable@details@Concurrency@@QAE_NAAVcritical_section@3@I@Z
@ cdecl -arch=win64 ?wait_for@_Condition_variable@details@Concurrency@@QEAA_NAEAVcritical_section@3@I@Z(ptr ptr long) msvcr120.?wait_for@_Condition_variable@details@Concurrency@@QEAA_NAEAVcritical_section@3@I@Z
@ stub -arch=win32 ?wait_for_all@agent@Concurrency@@SAXIPAPAV12@PAW4agent_status@2@I@Z

View File

@ -2689,11 +2689,94 @@ done:
return !status;
}
static BOOL CNG_ImportPubKey(CERT_PUBLIC_KEY_INFO *pubKeyInfo, BCRYPT_KEY_HANDLE *key)
static BOOL CNG_ImportRSAPubKey(CERT_PUBLIC_KEY_INFO *info, BCRYPT_KEY_HANDLE *key)
{
DWORD size, modulus_len, i;
BLOBHEADER *hdr;
RSAPUBKEY *rsapubkey;
const WCHAR *rsa_algo;
BCRYPT_ALG_HANDLE alg = NULL;
BCRYPT_RSAKEY_BLOB *rsakey;
BYTE *s, *d;
NTSTATUS status;
if (!info->PublicKey.cbData)
{
SetLastError(NTE_BAD_ALGID);
return FALSE;
}
if (!CryptDecodeObjectEx(X509_ASN_ENCODING, RSA_CSP_PUBLICKEYBLOB, info->PublicKey.pbData,
info->PublicKey.cbData, CRYPT_DECODE_ALLOC_FLAG, NULL, &hdr, &size))
{
WARN("CryptDecodeObjectEx failed\n");
return FALSE;
}
if (hdr->aiKeyAlg == CALG_RSA_KEYX)
rsa_algo = BCRYPT_RSA_ALGORITHM;
else if (hdr->aiKeyAlg == CALG_RSA_SIGN)
rsa_algo = BCRYPT_RSA_SIGN_ALGORITHM;
else
{
FIXME("Unsupported RSA algorithm: %#x\n", hdr->aiKeyAlg);
CryptMemFree(hdr);
SetLastError(NTE_BAD_ALGID);
return FALSE;
}
if ((status = BCryptOpenAlgorithmProvider(&alg, rsa_algo, NULL, 0)))
goto done;
rsapubkey = (RSAPUBKEY *)(hdr + 1);
modulus_len = size - sizeof(*hdr) - sizeof(*rsapubkey);
if (modulus_len != rsapubkey->bitlen / 8)
FIXME("RSA pubkey has wrong modulus_len %u\n", modulus_len);
size = sizeof(*rsakey) + sizeof(ULONG) + modulus_len;
if (!(rsakey = CryptMemAlloc(size)))
{
status = STATUS_NO_MEMORY;
goto done;
}
rsakey->Magic = BCRYPT_RSAPUBLIC_MAGIC;
rsakey->BitLength = rsapubkey->bitlen;
rsakey->cbPublicExp = sizeof(ULONG);
rsakey->cbModulus = modulus_len;
rsakey->cbPrime1 = 0;
rsakey->cbPrime2 = 0;
d = (BYTE *)(rsakey + 1);
/* According to MSDN modulus and pubexp are in LE while
* BCRYPT_RSAKEY_BLOB is supposed to have them in BE format */
*(ULONG *)d = RtlUlongByteSwap(rsapubkey->pubexp);
d += sizeof(ULONG);
s = (BYTE *)(rsapubkey + 1);
for (i = 0; i < modulus_len; i++)
d[i] = s[modulus_len - i - 1];
status = BCryptImportKeyPair(alg, NULL, BCRYPT_RSAPUBLIC_BLOB, key, (BYTE *)rsakey, size, 0);
CryptMemFree(rsakey);
done:
CryptMemFree(hdr);
if (alg) BCryptCloseAlgorithmProvider(alg, 0);
if (status) SetLastError(RtlNtStatusToDosError(status));
return !status;
}
BOOL CNG_ImportPubKey(CERT_PUBLIC_KEY_INFO *pubKeyInfo, BCRYPT_KEY_HANDLE *key)
{
if (!strcmp(pubKeyInfo->Algorithm.pszObjId, szOID_ECC_PUBLIC_KEY))
return CNG_ImportECCPubKey(pubKeyInfo, key);
if (!strcmp(pubKeyInfo->Algorithm.pszObjId, szOID_RSA_RSA))
return CNG_ImportRSAPubKey(pubKeyInfo, key);
FIXME("Unsupported public key type: %s\n", debugstr_a(pubKeyInfo->Algorithm.pszObjId));
SetLastError(NTE_BAD_ALGID);
return FALSE;

View File

@ -21,6 +21,8 @@
#include "wine/list.h"
BOOL CNG_ImportPubKey(CERT_PUBLIC_KEY_INFO *pubKeyInfo, BCRYPT_KEY_HANDLE *key) DECLSPEC_HIDDEN;
/* a few asn.1 tags we need */
#define ASN_BOOL (ASN_UNIVERSAL | ASN_PRIMITIVE | 0x01)
#define ASN_BITSTRING (ASN_UNIVERSAL | ASN_PRIMITIVE | 0x03)

View File

@ -5050,8 +5050,11 @@ BOOL WINAPI CryptImportPublicKeyInfoEx2(DWORD dwCertEncodingType,
PCERT_PUBLIC_KEY_INFO pInfo, DWORD dwFlags, void *pvAuxInfo,
BCRYPT_KEY_HANDLE *phKey)
{
FIXME_(crypt)("(%d, %p, %08x, %p, %p): stub\n", dwCertEncodingType, pInfo,
TRACE_(crypt)("(%d, %p, %08x, %p, %p)\n", dwCertEncodingType, pInfo,
dwFlags, pvAuxInfo, phKey);
SetLastError(ERROR_FILE_NOT_FOUND);
return FALSE;
if (dwFlags)
FIXME("flags %#x ignored\n", dwFlags);
return CNG_ImportPubKey(pInfo, phKey);
}

View File

@ -30,6 +30,7 @@
static BOOL (WINAPI *pCryptDecodeObjectEx)(DWORD,LPCSTR,const BYTE*,DWORD,DWORD,PCRYPT_DECODE_PARA,void*,DWORD*);
static BOOL (WINAPI *pCryptEncodeObjectEx)(DWORD,LPCSTR,const void*,DWORD,PCRYPT_ENCODE_PARA,void*,DWORD*);
static DWORD (WINAPI *pBCryptDestroyKey)(BCRYPT_KEY_HANDLE);
struct encodedInt
{
@ -8400,6 +8401,7 @@ static void testImportPublicKey(HCRYPTPROV csp, PCERT_PUBLIC_KEY_INFO info)
{
BOOL ret;
HCRYPTKEY key;
BCRYPT_KEY_HANDLE key2;
PCCERT_CONTEXT context;
DWORD dwSize;
ALG_ID ai;
@ -8469,6 +8471,12 @@ static void testImportPublicKey(HCRYPTPROV csp, PCERT_PUBLIC_KEY_INFO info)
&context->pCertInfo->SubjectPublicKeyInfo, 0, 0, NULL, &key);
ok(ret, "CryptImportPublicKeyInfoEx failed: %08x\n", GetLastError());
CryptDestroyKey(key);
ret = CryptImportPublicKeyInfoEx2(X509_ASN_ENCODING,
&context->pCertInfo->SubjectPublicKeyInfo, 0, NULL, &key2);
ok(ret, "CryptImportPublicKeyInfoEx2 failed: %08x\n", GetLastError());
if (pBCryptDestroyKey) pBCryptDestroyKey(key2);
CertFreeCertificateContext(context);
}
}
@ -8502,7 +8510,7 @@ START_TEST(encode)
{
static const DWORD encodings[] = { X509_ASN_ENCODING, PKCS_7_ASN_ENCODING,
X509_ASN_ENCODING | PKCS_7_ASN_ENCODING };
HMODULE hCrypt32;
HMODULE hCrypt32, hBcrypt;
DWORD i;
hCrypt32 = GetModuleHandleA("crypt32.dll");
@ -8514,6 +8522,9 @@ START_TEST(encode)
return;
}
hBcrypt = GetModuleHandleA("bcrypt.dll");
pBCryptDestroyKey = (void*)GetProcAddress(hBcrypt, "BCryptDestroyKey");
for (i = 0; i < ARRAY_SIZE(encodings); i++)
{
test_encodeInt(encodings[i]);

View File

@ -1155,6 +1155,7 @@ static void STDMETHODCALLTYPE d2d_device_context_DrawText(ID2D1DeviceContext *if
IDWriteTextLayout *text_layout;
IDWriteFactory *dwrite_factory;
D2D1_POINT_2F origin;
float width, height;
HRESULT hr;
TRACE("iface %p, string %s, string_len %u, text_format %p, layout_rect %s, "
@ -1169,13 +1170,15 @@ static void STDMETHODCALLTYPE d2d_device_context_DrawText(ID2D1DeviceContext *if
return;
}
width = max(0.0f, layout_rect->right - layout_rect->left);
height = max(0.0f, layout_rect->bottom - layout_rect->top);
if (measuring_mode == DWRITE_MEASURING_MODE_NATURAL)
hr = IDWriteFactory_CreateTextLayout(dwrite_factory, string, string_len, text_format,
layout_rect->right - layout_rect->left, layout_rect->bottom - layout_rect->top, &text_layout);
width, height, &text_layout);
else
hr = IDWriteFactory_CreateGdiCompatibleTextLayout(dwrite_factory, string, string_len, text_format,
layout_rect->right - layout_rect->left, layout_rect->bottom - layout_rect->top, render_target->desc.dpiX / 96.0f,
(DWRITE_MATRIX*)&render_target->drawing_state.transform, measuring_mode == DWRITE_MEASURING_MODE_GDI_NATURAL, &text_layout);
width, height, render_target->desc.dpiX / 96.0f, (DWRITE_MATRIX *)&render_target->drawing_state.transform,
measuring_mode == DWRITE_MEASURING_MODE_GDI_NATURAL, &text_layout);
IDWriteFactory_Release(dwrite_factory);
if (FAILED(hr))
{
@ -1183,7 +1186,7 @@ static void STDMETHODCALLTYPE d2d_device_context_DrawText(ID2D1DeviceContext *if
return;
}
d2d_point_set(&origin, layout_rect->left, layout_rect->top);
d2d_point_set(&origin, min(layout_rect->left, layout_rect->right), min(layout_rect->top, layout_rect->bottom));
ID2D1DeviceContext_DrawTextLayout(iface, origin, text_layout, brush, options);
IDWriteTextLayout_Release(text_layout);
}

View File

@ -2937,8 +2937,10 @@ static void test_create_rendertarget_view(void)
if (!enable_debug_layer)
{
rtview = (void *)0xdeadbeef;
hr = ID3D10Device_CreateRenderTargetView(device, NULL, &rtv_desc, &rtview);
ok(hr == E_INVALIDARG, "Got unexpected hr %#x.\n", hr);
ok(!rtview, "Unexpected pointer %p.\n", rtview);
}
expected_refcount = get_refcount(device) + 1;
@ -3055,8 +3057,10 @@ static void test_create_rendertarget_view(void)
}
get_rtv_desc(&rtv_desc, &invalid_desc_tests[i].rtv_desc);
rtview = (void *)0xdeadbeef;
hr = ID3D10Device_CreateRenderTargetView(device, texture, &rtv_desc, &rtview);
ok(hr == E_INVALIDARG, "Test %u: Got unexpected hr %#x.\n", i, hr);
ok(!rtview, "Unexpected pointer %p.\n", rtview);
ID3D10Resource_Release(texture);
}

View File

@ -516,6 +516,18 @@ struct d3d_query *unsafe_impl_from_ID3D11Query(ID3D11Query *iface) DECLSPEC_HIDD
struct d3d_query *unsafe_impl_from_ID3D10Query(ID3D10Query *iface) DECLSPEC_HIDDEN;
struct d3d_query *unsafe_impl_from_ID3D11Asynchronous(ID3D11Asynchronous *iface) DECLSPEC_HIDDEN;
/* ID3DDeviceContextState */
struct d3d_device_context_state
{
ID3DDeviceContextState ID3DDeviceContextState_iface;
LONG refcount;
struct wined3d_private_store private_store;
GUID emulated_interface;
ID3D11Device2 *device;
};
/* ID3D11DeviceContext - immediate context */
struct d3d11_immediate_context
{

View File

@ -29,6 +29,127 @@ static const struct wined3d_parent_ops d3d_null_wined3d_parent_ops =
d3d_null_wined3d_object_destroyed,
};
/* ID3DDeviceContextState methods */
static inline struct d3d_device_context_state *impl_from_ID3DDeviceContextState(ID3DDeviceContextState *iface)
{
return CONTAINING_RECORD(iface, struct d3d_device_context_state, ID3DDeviceContextState_iface);
}
static HRESULT STDMETHODCALLTYPE d3d_device_context_state_QueryInterface(ID3DDeviceContextState *iface,
REFIID iid, void **out)
{
TRACE("iface %p, iid %s, out %p.\n", iface, debugstr_guid(iid), out);
if (IsEqualGUID(iid, &IID_ID3DDeviceContextState)
|| IsEqualGUID(iid, &IID_ID3D11DeviceChild)
|| IsEqualGUID(iid, &IID_IUnknown))
{
ID3DDeviceContextState_AddRef(iface);
*out = iface;
return S_OK;
}
WARN("%s not implemented, returning E_NOINTERFACE.\n", debugstr_guid(iid));
*out = NULL;
return E_NOINTERFACE;
}
static ULONG STDMETHODCALLTYPE d3d_device_context_state_AddRef(ID3DDeviceContextState *iface)
{
struct d3d_device_context_state *state = impl_from_ID3DDeviceContextState(iface);
ULONG refcount = InterlockedIncrement(&state->refcount);
TRACE("%p increasing refcount to %u.\n", state, refcount);
return refcount;
}
static ULONG STDMETHODCALLTYPE d3d_device_context_state_Release(ID3DDeviceContextState *iface)
{
struct d3d_device_context_state *state = impl_from_ID3DDeviceContextState(iface);
ULONG refcount = InterlockedDecrement(&state->refcount);
TRACE("%p decreasing refcount to %u.\n", state, refcount);
if (!refcount)
{
wined3d_private_store_cleanup(&state->private_store);
ID3D11Device2_Release(state->device);
heap_free(state);
}
return refcount;
}
static void STDMETHODCALLTYPE d3d_device_context_state_GetDevice(ID3DDeviceContextState *iface, ID3D11Device **device)
{
struct d3d_device_context_state *state = impl_from_ID3DDeviceContextState(iface);
TRACE("iface %p, device %p.\n", iface, device);
*device = (ID3D11Device *)state->device;
ID3D11Device_AddRef(*device);
}
static HRESULT STDMETHODCALLTYPE d3d_device_context_state_GetPrivateData(ID3DDeviceContextState *iface, REFGUID guid,
UINT *data_size, void *data)
{
struct d3d_device_context_state *state = impl_from_ID3DDeviceContextState(iface);
TRACE("iface %p, guid %s, data_size %p, data %p.\n", iface, debugstr_guid(guid), data_size, data);
return d3d_get_private_data(&state->private_store, guid, data_size, data);
}
static HRESULT STDMETHODCALLTYPE d3d_device_context_state_SetPrivateData(ID3DDeviceContextState *iface, REFGUID guid,
UINT data_size, const void *data)
{
struct d3d_device_context_state *state = impl_from_ID3DDeviceContextState(iface);
TRACE("iface %p, guid %s, data_size %u, data %p.\n", iface, debugstr_guid(guid), data_size, data);
return d3d_set_private_data(&state->private_store, guid, data_size, data);
}
static HRESULT STDMETHODCALLTYPE d3d_device_context_state_SetPrivateDataInterface(ID3DDeviceContextState *iface,
REFGUID guid, const IUnknown *data)
{
struct d3d_device_context_state *state = impl_from_ID3DDeviceContextState(iface);
TRACE("iface %p, guid %s, data %p.\n", iface, debugstr_guid(guid), data);
return d3d_set_private_data_interface(&state->private_store, guid, data);
}
static const struct ID3DDeviceContextStateVtbl d3d_device_context_state_vtbl =
{
/* IUnknown methods */
d3d_device_context_state_QueryInterface,
d3d_device_context_state_AddRef,
d3d_device_context_state_Release,
/* ID3D11DeviceChild methods */
d3d_device_context_state_GetDevice,
d3d_device_context_state_GetPrivateData,
d3d_device_context_state_SetPrivateData,
d3d_device_context_state_SetPrivateDataInterface,
/* ID3DDeviceContextState methods */
};
static void d3d_device_context_state_init(struct d3d_device_context_state *state, struct d3d_device *device,
REFIID emulated_interface)
{
state->ID3DDeviceContextState_iface.lpVtbl = &d3d_device_context_state_vtbl;
state->refcount = 1;
wined3d_private_store_init(&state->private_store);
state->emulated_interface = *emulated_interface;
state->device = &device->ID3D11Device2_iface;
ID3D11Device2_AddRef(state->device);
}
/* ID3D11DeviceContext - immediate context methods */
static inline struct d3d11_immediate_context *impl_from_ID3D11DeviceContext1(ID3D11DeviceContext1 *iface)
@ -2933,6 +3054,8 @@ static HRESULT STDMETHODCALLTYPE d3d11_device_CreateRenderTargetView(ID3D11Devic
TRACE("iface %p, resource %p, desc %p, view %p.\n", iface, resource, desc, view);
*view = NULL;
if (!resource)
return E_INVALIDARG;
@ -3738,11 +3861,28 @@ static HRESULT STDMETHODCALLTYPE d3d11_device_CreateDeviceContextState(ID3D11Dev
const D3D_FEATURE_LEVEL *feature_levels, UINT feature_levels_count, UINT sdk_version,
REFIID emulated_interface, D3D_FEATURE_LEVEL *chosen_feature_level, ID3DDeviceContextState **state)
{
struct d3d_device *device = impl_from_ID3D11Device2(iface);
struct d3d_device_context_state *state_impl;
FIXME("iface %p, flags %#x, feature_levels %p, feature_level_count %u, sdk_version %u, "
"emulated_interface %s, chosen_feature_level %p, state %p stub!\n", iface, flags, feature_levels,
"emulated_interface %s, chosen_feature_level %p, state %p semi-stub!\n", iface, flags, feature_levels,
feature_levels_count, sdk_version, debugstr_guid(emulated_interface), chosen_feature_level, state);
return E_NOTIMPL;
if (chosen_feature_level)
FIXME("Device context state feature level not implemented yet.\n");
if (state)
{
*state = NULL;
if (!(state_impl = heap_alloc(sizeof(*state_impl))))
return E_OUTOFMEMORY;
d3d_device_context_state_init(state_impl, device, emulated_interface);
*state = &state_impl->ID3DDeviceContextState_iface;
}
device->d3d11_only = FALSE;
if (chosen_feature_level) *chosen_feature_level = ID3D11Device2_GetFeatureLevel(iface);
return state ? S_OK : S_FALSE;
}
static HRESULT STDMETHODCALLTYPE d3d11_device_OpenSharedResource1(ID3D11Device2 *iface, HANDLE handle,
@ -5416,6 +5556,8 @@ static HRESULT STDMETHODCALLTYPE d3d10_device_CreateRenderTargetView(ID3D10Devic
TRACE("iface %p, resource %p, desc %p, view %p.\n", iface, resource, desc, view);
*view = NULL;
if (!resource)
return E_INVALIDARG;

View File

@ -3936,8 +3936,10 @@ static void test_create_rendertarget_view(void)
if (!enable_debug_layer)
{
rtview = (void *)0xdeadbeef;
hr = ID3D11Device_CreateRenderTargetView(device, NULL, &rtv_desc, &rtview);
ok(hr == E_INVALIDARG, "Got unexpected hr %#x.\n", hr);
ok(!rtview, "Unexpected pointer %p.\n", rtview);
}
expected_refcount = get_refcount(device) + 1;
@ -4054,8 +4056,10 @@ static void test_create_rendertarget_view(void)
}
get_rtv_desc(&rtv_desc, &invalid_desc_tests[i].rtv_desc);
rtview = (void *)0xdeadbeef;
hr = ID3D11Device_CreateRenderTargetView(device, texture, &rtv_desc, &rtview);
ok(hr == E_INVALIDARG, "Test %u: Got unexpected hr %#x.\n", i, hr);
ok(!rtview, "Unexpected pointer %p.\n", rtview);
ID3D11Resource_Release(texture);
}
@ -6683,10 +6687,9 @@ static void test_device_context_state(void)
ok(tmp_sampler == sampler, "Got sampler %p, expected %p.\n", tmp_sampler, sampler);
ID3D11SamplerState_Release(tmp_sampler);
feature_level = min(feature_level, D3D_FEATURE_LEVEL_10_1);
feature_level = min(feature_level, D3D_FEATURE_LEVEL_11_1);
hr = ID3D11Device1_CreateDeviceContextState(device, 0, &feature_level, 1, D3D11_SDK_VERSION,
&IID_ID3D10Device, NULL, &context_state);
todo_wine
&IID_ID3D11Device1, NULL, &context_state);
ok(SUCCEEDED(hr), "Failed to create device context state, hr %#x.\n", hr);
if (FAILED(hr))
{
@ -6700,6 +6703,24 @@ todo_wine
context_type = ID3D11DeviceContext1_GetType(context);
ok(context_type == D3D11_DEVICE_CONTEXT_IMMEDIATE, "Unexpected context type %u.\n", context_type);
check_interface(device, &IID_ID3D10Device, TRUE, FALSE);
check_interface(device, &IID_ID3D10Device1, TRUE, FALSE);
check_interface(device, &IID_ID3D11Device, TRUE, FALSE);
check_interface(device, &IID_ID3D11Device1, TRUE, FALSE);
refcount = ID3DDeviceContextState_Release(context_state);
ok(!refcount, "Got refcount %u, expected 0.\n", refcount);
feature_level = min(feature_level, D3D_FEATURE_LEVEL_10_1);
hr = ID3D11Device1_CreateDeviceContextState(device, 0, &feature_level, 1, D3D11_SDK_VERSION,
&IID_ID3D10Device, NULL, &context_state);
ok(SUCCEEDED(hr), "Failed to create device context state, hr %#x.\n", hr);
refcount = get_refcount(context_state);
ok(refcount == 1, "Got refcount %u, expected 1.\n", refcount);
context_type = ID3D11DeviceContext1_GetType(context);
ok(context_type == D3D11_DEVICE_CONTEXT_IMMEDIATE, "Unexpected context type %u.\n", context_type);
cb = create_buffer((ID3D11Device *)device, D3D11_BIND_CONSTANT_BUFFER, sizeof(constant), NULL);
ID3D11DeviceContext1_CSSetConstantBuffers(context, 0, 1, &cb);
@ -6743,73 +6764,90 @@ todo_wine
ID3D11DeviceContext1_SwapDeviceContextState(context, context_state, &previous_context_state);
refcount = ID3DDeviceContextState_Release(context_state);
ok(!refcount, "Got refcount %u, expected 0.\n", refcount);
todo_wine ok(previous_context_state != NULL, "Failed to get previous context state\n");
context_type = ID3D11DeviceContext1_GetType(context);
ok(context_type == D3D11_DEVICE_CONTEXT_IMMEDIATE, "Unexpected context type %u.\n", context_type);
ID3D11DeviceContext1_PSSetSamplers(context, 0, 1, &sampler);
tmp_sampler = (ID3D11SamplerState *)0xdeadbeef;
ID3D11DeviceContext1_PSGetSamplers(context, 0, 1, &tmp_sampler);
ok(tmp_sampler == (ID3D11SamplerState *)0xdeadbeef, "Got unexpected sampler %p.\n", tmp_sampler);
todo_wine ok(tmp_sampler == (ID3D11SamplerState *)0xdeadbeef, "Got unexpected sampler %p.\n", tmp_sampler);
if (tmp_sampler && tmp_sampler != (ID3D11SamplerState *)0xdeadbeef)
ID3D11SamplerState_Release(tmp_sampler);
if (!enable_debug_layer)
ID3D11DeviceContext1_PSSetSamplers(context, 0, 1, &tmp_sampler);
ID3D11DeviceContext1_CSSetSamplers(context, 0, 1, &sampler);
tmp_sampler = (ID3D11SamplerState *)0xdeadbeef;
ID3D11DeviceContext1_CSGetSamplers(context, 0, 1, &tmp_sampler);
ok(!tmp_sampler, "Got unexpected sampler %p.\n", tmp_sampler);
todo_wine ok(!tmp_sampler, "Got unexpected sampler %p.\n", tmp_sampler);
if (tmp_sampler) ID3D11SamplerState_Release(tmp_sampler);
ID3D11DeviceContext1_DSSetSamplers(context, 0, 1, &sampler);
tmp_sampler = (ID3D11SamplerState *)0xdeadbeef;
ID3D11DeviceContext1_DSGetSamplers(context, 0, 1, &tmp_sampler);
ok(!tmp_sampler, "Got unexpected sampler %p.\n", tmp_sampler);
todo_wine ok(!tmp_sampler, "Got unexpected sampler %p.\n", tmp_sampler);
if (tmp_sampler) ID3D11SamplerState_Release(tmp_sampler);
ID3D11DeviceContext1_GSSetSamplers(context, 0, 1, &sampler);
tmp_sampler = (ID3D11SamplerState *)0xdeadbeef;
ID3D11DeviceContext1_GSGetSamplers(context, 0, 1, &tmp_sampler);
ok(!tmp_sampler, "Got unexpected sampler %p.\n", tmp_sampler);
todo_wine ok(!tmp_sampler, "Got unexpected sampler %p.\n", tmp_sampler);
if (tmp_sampler) ID3D11SamplerState_Release(tmp_sampler);
ID3D11DeviceContext1_HSSetSamplers(context, 0, 1, &sampler);
tmp_sampler = (ID3D11SamplerState *)0xdeadbeef;
ID3D11DeviceContext1_HSGetSamplers(context, 0, 1, &tmp_sampler);
ok(!tmp_sampler, "Got unexpected sampler %p.\n", tmp_sampler);
todo_wine ok(!tmp_sampler, "Got unexpected sampler %p.\n", tmp_sampler);
if (tmp_sampler) ID3D11SamplerState_Release(tmp_sampler);
ID3D11DeviceContext1_VSSetSamplers(context, 0, 1, &sampler);
tmp_sampler = (ID3D11SamplerState *)0xdeadbeef;
ID3D11DeviceContext1_VSGetSamplers(context, 0, 1, &tmp_sampler);
ok(!tmp_sampler, "Got unexpected sampler %p.\n", tmp_sampler);
context_type = ID3D11DeviceContext1_GetType(context);
ok(context_type == D3D11_DEVICE_CONTEXT_IMMEDIATE, "Unexpected context type %u.\n", context_type);
todo_wine ok(!tmp_sampler, "Got unexpected sampler %p.\n", tmp_sampler);
if (tmp_sampler) ID3D11SamplerState_Release(tmp_sampler);
tmp_cb = (ID3D11Buffer *)0xdeadbeef;
ID3D11DeviceContext1_CSGetConstantBuffers(context, 0, 1, &tmp_cb);
ok(!tmp_cb, "Got unexpected buffer %p.\n", tmp_cb);
todo_wine ok(!tmp_cb, "Got unexpected buffer %p.\n", tmp_cb);
if (tmp_cb) ID3D11Buffer_Release(tmp_cb);
tmp_cb = (ID3D11Buffer *)0xdeadbeef;
ID3D11DeviceContext1_PSGetConstantBuffers(context, 0, 1, &tmp_cb);
ok(!tmp_cb, "Got unexpected buffer %p.\n", tmp_cb);
todo_wine ok(!tmp_cb, "Got unexpected buffer %p.\n", tmp_cb);
if (tmp_cb) ID3D11Buffer_Release(tmp_cb);
tmp_cb = (ID3D11Buffer *)0xdeadbeef;
ID3D11DeviceContext1_VSGetConstantBuffers(context, 0, 1, &tmp_cb);
ok(!tmp_cb, "Got unexpected buffer %p.\n", tmp_cb);
todo_wine ok(!tmp_cb, "Got unexpected buffer %p.\n", tmp_cb);
if (tmp_cb) ID3D11Buffer_Release(tmp_cb);
tmp_cb = (ID3D11Buffer *)0xdeadbeef;
ID3D11DeviceContext1_DSGetConstantBuffers(context, 0, 1, &tmp_cb);
ok(!tmp_cb, "Got unexpected buffer %p.\n", tmp_cb);
todo_wine ok(!tmp_cb, "Got unexpected buffer %p.\n", tmp_cb);
if (tmp_cb) ID3D11Buffer_Release(tmp_cb);
tmp_cb = (ID3D11Buffer *)0xdeadbeef;
ID3D11DeviceContext1_GSGetConstantBuffers(context, 0, 1, &tmp_cb);
ok(!tmp_cb, "Got unexpected buffer %p.\n", tmp_cb);
todo_wine ok(!tmp_cb, "Got unexpected buffer %p.\n", tmp_cb);
if (tmp_cb) ID3D11Buffer_Release(tmp_cb);
tmp_cb = (ID3D11Buffer *)0xdeadbeef;
ID3D11DeviceContext1_HSGetConstantBuffers(context, 0, 1, &tmp_cb);
ok(!tmp_cb, "Got unexpected buffer %p.\n", tmp_cb);
todo_wine ok(!tmp_cb, "Got unexpected buffer %p.\n", tmp_cb);
if (tmp_cb) ID3D11Buffer_Release(tmp_cb);
check_interface(device, &IID_ID3D10Device, TRUE, FALSE);
check_interface(device, &IID_ID3D10Device1, TRUE, FALSE);
context_state = NULL;
ID3D11DeviceContext1_SwapDeviceContextState(context, previous_context_state, &context_state);
refcount = ID3DDeviceContextState_Release(context_state);
if (!context_state) refcount = 0;
else refcount = ID3DDeviceContextState_Release(context_state);
ok(!refcount, "Got refcount %u, expected 0.\n", refcount);
refcount = ID3DDeviceContextState_Release(previous_context_state);
if (!previous_context_state) refcount = 0;
else refcount = ID3DDeviceContextState_Release(previous_context_state);
ok(!refcount, "Got refcount %u, expected 0.\n", refcount);
/* ID3DDeviceContextState retains the previous state. */
@ -26557,6 +26595,13 @@ static void test_format_compatibility(void)
{DXGI_FORMAT_R16G16_SNORM, DXGI_FORMAT_R16G16_SINT, 4, TRUE},
{DXGI_FORMAT_R16G16_SINT, DXGI_FORMAT_R16G16_TYPELESS, 4, TRUE},
{DXGI_FORMAT_R16G16_TYPELESS, DXGI_FORMAT_R32_TYPELESS, 4, FALSE},
{DXGI_FORMAT_R9G9B9E5_SHAREDEXP, DXGI_FORMAT_R32_TYPELESS, 4, TRUE},
{DXGI_FORMAT_R9G9B9E5_SHAREDEXP, DXGI_FORMAT_R32_FLOAT, 4, TRUE},
{DXGI_FORMAT_R9G9B9E5_SHAREDEXP, DXGI_FORMAT_R32_UINT, 4, TRUE},
{DXGI_FORMAT_R9G9B9E5_SHAREDEXP, DXGI_FORMAT_R32_SINT, 4, TRUE},
{DXGI_FORMAT_R9G9B9E5_SHAREDEXP, DXGI_FORMAT_R8G8B8A8_TYPELESS, 4, FALSE},
{DXGI_FORMAT_R9G9B9E5_SHAREDEXP, DXGI_FORMAT_B8G8R8A8_TYPELESS, 4, FALSE},
{DXGI_FORMAT_R9G9B9E5_SHAREDEXP, DXGI_FORMAT_R16G16_TYPELESS, 4, FALSE},
{DXGI_FORMAT_R32G32_TYPELESS, DXGI_FORMAT_R32G32_FLOAT, 8, TRUE},
{DXGI_FORMAT_R32G32_FLOAT, DXGI_FORMAT_R32G32_UINT, 8, TRUE},
{DXGI_FORMAT_R32G32_UINT, DXGI_FORMAT_R32G32_SINT, 8, TRUE},
@ -26590,6 +26635,7 @@ static void test_format_compatibility(void)
for (i = 0; i < ARRAY_SIZE(test_data); ++i)
{
unsigned int x, y, texel_dwords;
BOOL broken = FALSE;
D3D11_BOX box;
texture_desc.Width = sizeof(bitmap_data) / (texture_desc.Height * test_data[i].texel_size);
@ -26617,7 +26663,14 @@ static void test_format_compatibility(void)
texel_dwords = test_data[i].texel_size / sizeof(DWORD);
get_texture_readback(dst_texture, 0, &rb);
for (j = 0; j < ARRAY_SIZE(bitmap_data); ++j)
colour = get_readback_color(&rb, 0, 0, 0);
if (test_data[i].src_format == DXGI_FORMAT_R9G9B9E5_SHAREDEXP && colour == bitmap_data[0])
{
win_skip("Broken destination offset for %#x -> %#x copy.\n",
test_data[i].src_format, test_data[i].dst_format);
broken = TRUE;
}
for (j = 0; j < ARRAY_SIZE(bitmap_data) && !broken; ++j)
{
x = j % 4;
y = j / 4;

View File

@ -3816,7 +3816,7 @@ static HRESULT WINAPI d3dx_effect_FindNextValidTechnique(ID3DXEffect *iface, D3D
}
}
*next_technique = get_technique_handle(&effect->techniques[0]);
*next_technique = NULL;
return S_FALSE;
}

View File

@ -887,6 +887,42 @@ static BOOL convert_dib_to_bmp(const void **data, unsigned int *size)
return TRUE;
}
/* windowscodecs always returns xRGB, but we should return ARGB if and only if
* at least one pixel has a non-zero alpha component. */
static BOOL image_is_argb(IWICBitmapFrameDecode *frame, const D3DXIMAGE_INFO *info)
{
unsigned int size, i;
BYTE *buffer;
HRESULT hr;
if (info->Format != D3DFMT_X8R8G8B8 || (info->ImageFileFormat != D3DXIFF_BMP
&& info->ImageFileFormat != D3DXIFF_TGA))
return FALSE;
size = info->Width * info->Height * 4;
if (!(buffer = malloc(size)))
return FALSE;
if (FAILED(hr = IWICBitmapFrameDecode_CopyPixels(frame, NULL, info->Width * 4, size, buffer)))
{
ERR("Failed to copy pixels, hr %#x.\n", hr);
free(buffer);
return FALSE;
}
for (i = 0; i < info->Width * info->Height; ++i)
{
if (buffer[i * 4 + 3])
{
free(buffer);
return TRUE;
}
}
free(buffer);
return FALSE;
}
/************************************************************
* D3DXGetImageInfoFromFileInMemory
*
@ -1006,6 +1042,9 @@ HRESULT WINAPI D3DXGetImageInfoFromFileInMemory(const void *data, UINT datasize,
}
}
if (SUCCEEDED(hr) && image_is_argb(frame, info))
info->Format = D3DFMT_A8R8G8B8;
if (frame)
IWICBitmapFrameDecode_Release(frame);

View File

@ -7892,9 +7892,9 @@ static void test_effect_find_next_valid_technique(void)
D3DPRESENT_PARAMETERS present_parameters = {0};
IDirect3DDevice9 *device;
D3DXTECHNIQUE_DESC desc;
D3DXHANDLE tech, tech2;
ID3DXEffect *effect;
IDirect3D9 *d3d;
D3DXHANDLE tech;
ULONG refcount;
HWND window;
HRESULT hr;
@ -7939,9 +7939,12 @@ static void test_effect_find_next_valid_technique(void)
ok(hr == D3D_OK, "Got result %#x.\n", hr);
ok(!strcmp(desc.Name, "tech1"), "Got unexpected technique %s.\n", desc.Name);
hr = effect->lpVtbl->FindNextValidTechnique(effect, tech, &tech);
tech2 = tech;
hr = effect->lpVtbl->FindNextValidTechnique(effect, tech, &tech2);
ok(hr == S_FALSE, "Got result %#x.\n", hr);
hr = effect->lpVtbl->GetTechniqueDesc(effect, tech, &desc);
ok(!tech2, "Unexpected technique handle %p.\n", tech2);
/* Test GetTechniqueDesc() with a NULL handle. */
hr = effect->lpVtbl->GetTechniqueDesc(effect, tech2, &desc);
ok(hr == D3D_OK, "Got result %#x.\n", hr);
ok(!strcmp(desc.Name, "tech0"), "Got unexpected technique %s.\n", desc.Name);
@ -7957,9 +7960,10 @@ static void test_effect_find_next_valid_technique(void)
ok(hr == D3D_OK, "Got result %#x.\n", hr);
ok(!strcmp(desc.Name, "tech1"), "Got unexpected technique %s.\n", desc.Name);
hr = effect->lpVtbl->FindNextValidTechnique(effect, tech, &tech);
hr = effect->lpVtbl->FindNextValidTechnique(effect, tech, &tech2);
ok(hr == S_FALSE, "Got result %#x.\n", hr);
hr = effect->lpVtbl->GetTechniqueDesc(effect, tech, &desc);
ok(!tech2, "Unexpected technique handle %p.\n", tech2);
hr = effect->lpVtbl->GetTechniqueDesc(effect, tech2, &desc);
ok(hr == D3D_OK, "Got result %#x.\n", hr);
ok(!strcmp(desc.Name, "tech0"), "Got unexpected technique %s.\n", desc.Name);
@ -7985,8 +7989,9 @@ static void test_effect_find_next_valid_technique(void)
ok(hr == D3D_OK, "Got result %#x.\n", hr);
ok(!strcmp(desc.Name, "tech1"), "Got unexpected technique %s.\n", desc.Name);
hr = effect->lpVtbl->FindNextValidTechnique(effect, tech, &tech);
hr = effect->lpVtbl->FindNextValidTechnique(effect, tech, &tech2);
ok(hr == S_FALSE, "Got result %#x.\n", hr);
ok(!tech2, "Unexpected technique handle %p.\n", tech2);
hr = effect->lpVtbl->FindNextValidTechnique(effect, "nope", &tech);
ok(hr == D3DERR_INVALIDCALL, "Got result %#x.\n", hr);

View File

@ -698,7 +698,7 @@ static void test_D3DXGetImageInfo(void)
ok(info.Format == D3DFMT_X8R8G8B8, "Got unexpected format %u.\n", info.Format);
hr = D3DXGetImageInfoFromFileInMemory(bmp_32bpp_argb, sizeof(bmp_32bpp_argb), &info);
ok(hr == D3D_OK, "Got unexpected hr %#x.\n", hr);
todo_wine ok(info.Format == D3DFMT_A8R8G8B8, "Got unexpected format %u.\n", info.Format);
ok(info.Format == D3DFMT_A8R8G8B8, "Got unexpected format %u.\n", info.Format);
/* Grayscale PNG */
hr = D3DXGetImageInfoFromFileInMemory(png_grayscale, sizeof(png_grayscale), &info);

View File

@ -41,7 +41,8 @@ typedef enum _UNWIND_OP_CODES
UWOP_SET_FPREG,
UWOP_SAVE_NONVOL,
UWOP_SAVE_NONVOL_FAR,
UWOP_SAVE_XMM128,
UWOP_EPILOG,
UWOP_SAVE_XMM128 = 8,
UWOP_SAVE_XMM128_FAR,
UWOP_PUSH_MACHFRAME
} UNWIND_CODE_OPS;

View File

@ -75,7 +75,7 @@
@ stdcall SymFromIndex(long int64 long ptr)
@ stdcall SymFromIndexW(long int64 long ptr)
@ stdcall SymFromName(long str ptr)
@ stub SymFromNameW
@ stdcall SymFromNameW(long wstr ptr)
@ stub SymFromToken
@ stub SymFromTokenW
@ stdcall SymFunctionTableAccess(long long)

View File

@ -1404,6 +1404,39 @@ BOOL WINAPI SymFromName(HANDLE hProcess, PCSTR Name, PSYMBOL_INFO Symbol)
return FALSE;
}
/***********************************************************************
* SymFromNameW (DBGHELP.@)
*/
BOOL WINAPI SymFromNameW(HANDLE process, const WCHAR *name, SYMBOL_INFOW *symbol)
{
SYMBOL_INFO *si;
DWORD len;
char *tmp;
BOOL ret;
TRACE("(%p, %s, %p)\n", process, debugstr_w(name), symbol);
len = sizeof(*si) + symbol->MaxNameLen * sizeof(WCHAR);
if (!(si = HeapAlloc(GetProcessHeap(), 0, len))) return FALSE;
len = WideCharToMultiByte(CP_ACP, 0, name, -1, NULL, 0, NULL, NULL);
if (!(tmp = HeapAlloc(GetProcessHeap(), 0, len)))
{
HeapFree(GetProcessHeap(), 0, si);
return FALSE;
}
WideCharToMultiByte(CP_ACP, 0, name, -1, tmp, len, NULL, NULL);
si->SizeOfStruct = sizeof(*si);
si->MaxNameLen = symbol->MaxNameLen;
if ((ret = SymFromName(process, tmp, si)))
copy_symbolW(symbol, si);
HeapFree(GetProcessHeap(), 0, tmp);
HeapFree(GetProcessHeap(), 0, si);
return ret;
}
/***********************************************************************
* SymGetSymFromName64 (DBGHELP.@)
*/

View File

@ -3,6 +3,7 @@ MODULE = dcomp.dll
EXTRADLLFLAGS = -mno-cygwin
C_SRCS = \
device.c \
main.c
RC_SRCS = version.rc

View File

@ -13,9 +13,9 @@
@ stub CreateEffectDescription
@ stub DCompositionAttachMouseDragToHwnd
@ stub DCompositionAttachMouseWheelToHwnd
@ stub DCompositionCreateDevice2
@ stdcall DCompositionCreateDevice2(ptr ptr ptr)
@ stub DCompositionCreateDevice3
@ stub DCompositionCreateDevice
@ stdcall DCompositionCreateDevice(ptr ptr ptr)
@ stub DCompositionCreateSurfaceHandle
@ stub DeserializeEffectDescription
@ stub DllCanUnloadNow

40
dlls/dcomp/device.c Normal file
View File

@ -0,0 +1,40 @@
/*
* Copyright 2020 Nikolay Sivov for CodeWeavers
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
#include <stdarg.h>
#include "windef.h"
#include "winbase.h"
#include "objidl.h"
#include "dxgi.h"
#include "wine/debug.h"
WINE_DEFAULT_DEBUG_CHANNEL(dcomp);
HRESULT WINAPI DCompositionCreateDevice(IDXGIDevice *dxgi_device, REFIID iid, void **device)
{
FIXME("%p, %s, %p.\n", dxgi_device, debugstr_guid(iid), device);
return E_NOTIMPL;
}
HRESULT WINAPI DCompositionCreateDevice2(IUnknown *rendering_device, REFIID iid, void **device)
{
FIXME("%p, %s, %p.\n", rendering_device, debugstr_guid(iid), device);
return E_NOTIMPL;
}

View File

@ -583,8 +583,10 @@ static HRESULT ddraw_attach_d3d_device(struct ddraw *ddraw, HWND window,
swapchain_desc.swap_effect = WINED3D_SWAP_EFFECT_DISCARD;
swapchain_desc.device_window = window;
swapchain_desc.windowed = windowed;
swapchain_desc.flags = WINED3D_SWAPCHAIN_ALLOW_MODE_SWITCH
| WINED3D_SWAPCHAIN_IMPLICIT | WINED3D_SWAPCHAIN_NO_WINDOW_CHANGES;
swapchain_desc.flags = WINED3D_SWAPCHAIN_ALLOW_MODE_SWITCH | WINED3D_SWAPCHAIN_IMPLICIT;
if (window != GetForegroundWindow())
swapchain_desc.flags |= WINED3D_SWAPCHAIN_NO_WINDOW_CHANGES;
if (ddraw->flags & DDRAW_NO3D)
return wined3d_swapchain_create(ddraw->wined3d_device, &swapchain_desc,

View File

@ -39,6 +39,16 @@ static BOOL ddraw_surface_is_lost(const struct ddraw_surface *surface)
&& (surface->ddraw->device_state != DDRAW_DEVICE_STATE_OK || surface->is_lost);
}
static BOOL ddraw_gdi_is_front(struct ddraw *ddraw)
{
struct ddraw_surface *surface;
if (!ddraw->gdi_surface || !(surface = wined3d_texture_get_sub_resource_parent(ddraw->gdi_surface, 0)))
return FALSE;
return surface->surface_desc.ddsCaps.dwCaps & DDSCAPS_FRONTBUFFER;
}
/* This is slow, of course. Also, in case of locks, we can't prevent other
* applications from drawing to the screen while we've locked the frontbuffer.
* We'd like to do this in wined3d instead, but for that to work wined3d needs
@ -46,6 +56,7 @@ static BOOL ddraw_surface_is_lost(const struct ddraw_surface *surface)
HRESULT ddraw_surface_update_frontbuffer(struct ddraw_surface *surface,
const RECT *rect, BOOL read, unsigned int swap_interval)
{
struct ddraw *ddraw = surface->ddraw;
struct wined3d_texture *dst_texture;
HDC surface_dc, screen_dc;
int x, y, w, h;
@ -53,9 +64,9 @@ HRESULT ddraw_surface_update_frontbuffer(struct ddraw_surface *surface,
BOOL ret;
RECT r;
if (surface->ddraw->flags & DDRAW_SWAPPED && !read)
if (ddraw->flags & DDRAW_SWAPPED && !read)
{
surface->ddraw->flags &= ~DDRAW_SWAPPED;
ddraw->flags &= ~DDRAW_SWAPPED;
rect = NULL;
}
@ -73,7 +84,23 @@ HRESULT ddraw_surface_update_frontbuffer(struct ddraw_surface *surface,
if (w <= 0 || h <= 0)
return DD_OK;
if (surface->ddraw->swapchain_window)
/* The interaction between ddraw and GDI drawing is not all that well
* documented, and somewhat arcane. In ddraw exclusive mode, GDI draws
* seemingly go to the *original* frontbuffer/primary surface, while ddraw
* draws/flips go to the *current* frontbuffer surface. The bottom line is
* that if the current frontbuffer is not the GDI frontbuffer, and there's
* e.g. a popup window in front of the ddraw swapchain window, we can't
* use wined3d_swapchain_present() to get the ddraw contents to the screen
* while in exclusive mode, since it would get obscured by the popup
* window. On the other hand, if the current frontbuffer *is* the GDI
* frontbuffer, that's what's supposed to happen; the popup should obscure
* (oart of) the ddraw swapchain window.
*
* This affects the "Deer Hunter" demo, which uses a popup window and GDI
* draws to draw part of the user interface. See also the "fswindow"
* sample is the DirectX 7 SDK. */
if (ddraw->swapchain_window && (!(ddraw->cooperative_level & DDSCL_EXCLUSIVE)
|| ddraw->swapchain_window == GetForegroundWindow() || ddraw_gdi_is_front(ddraw)))
{
/* Nothing to do, we control the frontbuffer, or at least the parts we
* care about. */
@ -81,15 +108,15 @@ HRESULT ddraw_surface_update_frontbuffer(struct ddraw_surface *surface,
return DD_OK;
if (swap_interval)
dst_texture = wined3d_swapchain_get_back_buffer(surface->ddraw->wined3d_swapchain, 0);
dst_texture = wined3d_swapchain_get_back_buffer(ddraw->wined3d_swapchain, 0);
else
dst_texture = surface->ddraw->wined3d_frontbuffer;
dst_texture = ddraw->wined3d_frontbuffer;
if (SUCCEEDED(hr = wined3d_texture_blt(dst_texture, 0, rect, surface->wined3d_texture,
surface->sub_resource_idx, rect, 0, NULL, WINED3D_TEXF_POINT)) && swap_interval)
{
hr = wined3d_swapchain_present(surface->ddraw->wined3d_swapchain, rect, rect, NULL, swap_interval, 0);
surface->ddraw->flags |= DDRAW_SWAPPED;
hr = wined3d_swapchain_present(ddraw->wined3d_swapchain, rect, rect, NULL, swap_interval, 0);
ddraw->flags |= DDRAW_SWAPPED;
}
return hr;
}

View File

@ -166,6 +166,11 @@ static BOOL ddraw_is_vmware(IDirectDraw *ddraw)
return ddraw_is_vendor(ddraw, 0x15ad);
}
static BOOL is_software_device_type(const GUID *device_guid)
{
return device_guid != &IID_IDirect3DHALDevice;
}
static IDirectDrawSurface *create_overlay(IDirectDraw *ddraw,
unsigned int width, unsigned int height, DWORD format)
{
@ -605,7 +610,7 @@ static IDirectDraw *create_ddraw(void)
return ddraw;
}
static IDirect3DDevice *create_device(IDirectDraw *ddraw, HWND window, DWORD coop_level)
static IDirect3DDevice *create_device_ex(IDirectDraw *ddraw, HWND window, DWORD coop_level, const GUID *device_guid)
{
/* Prefer 16 bit depth buffers because Nvidia gives us an unpadded D24 buffer if we ask
* for 24 bit and handles such buffers incorrectly in DDBLT_DEPTHFILL. AMD only supports
@ -665,7 +670,7 @@ static IDirect3DDevice *create_device(IDirectDraw *ddraw, HWND window, DWORD coo
if (FAILED(hr))
continue;
if (SUCCEEDED(IDirectDrawSurface_QueryInterface(surface, &IID_IDirect3DHALDevice, (void **)&device)))
if (SUCCEEDED(IDirectDrawSurface_QueryInterface(surface, device_guid, (void **)&device)))
break;
IDirectDrawSurface_DeleteAttachedSurface(surface, 0, ds);
@ -675,6 +680,11 @@ static IDirect3DDevice *create_device(IDirectDraw *ddraw, HWND window, DWORD coo
return device;
}
static IDirect3DDevice *create_device(IDirectDraw *ddraw, HWND window, DWORD coop_level)
{
return create_device_ex(ddraw, window, coop_level, &IID_IDirect3DHALDevice);
}
static IDirect3DViewport *create_viewport(IDirect3DDevice *device, UINT x, UINT y, UINT w, UINT h)
{
IDirect3DViewport *viewport;
@ -2533,14 +2543,16 @@ static void test_window_style(void)
{
LONG style, exstyle, tmp, expected_style;
RECT fullscreen_rect, r;
HWND window, window2;
IDirectDraw *ddraw;
HWND window;
HRESULT hr;
ULONG ref;
BOOL ret;
window = CreateWindowA("static", "ddraw_test", WS_OVERLAPPEDWINDOW,
0, 0, 100, 100, 0, 0, 0, 0);
window2 = CreateWindowA("static", "ddraw_test", WS_OVERLAPPEDWINDOW | WS_VISIBLE,
0, 0, 50, 50, 0, 0, 0, 0);
ddraw = create_ddraw();
ok(!!ddraw, "Failed to create a ddraw object.\n");
@ -2584,6 +2596,68 @@ static void test_window_style(void)
tmp = GetWindowLongA(window, GWL_EXSTYLE);
ok(tmp == exstyle, "Expected window extended style %#x, got %#x.\n", exstyle, tmp);
ShowWindow(window, SW_SHOW);
ret = SetForegroundWindow(GetDesktopWindow());
ok(ret, "Failed to set foreground window.\n");
SetActiveWindow(window);
ok(GetActiveWindow() == window, "Unexpected active window.\n");
hr = IDirectDraw_SetCooperativeLevel(ddraw, window, DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN);
ok(SUCCEEDED(hr), "SetCooperativeLevel failed, hr %#x.\n", hr);
tmp = GetWindowLongA(window, GWL_STYLE);
expected_style = style | WS_VISIBLE;
todo_wine ok(tmp == expected_style, "Expected window style %#x, got %#x.\n", expected_style, tmp);
tmp = GetWindowLongA(window, GWL_EXSTYLE);
todo_wine ok(tmp == exstyle, "Expected window extended style %#x, got %#x.\n", exstyle, tmp);
GetWindowRect(window, &r);
ok(EqualRect(&r, &fullscreen_rect), "Expected %s, got %s.\n",
wine_dbgstr_rect(&fullscreen_rect), wine_dbgstr_rect(&r));
hr = IDirectDraw_SetCooperativeLevel(ddraw, window, DDSCL_NORMAL);
ok(SUCCEEDED(hr), "SetCooperativeLevel failed, hr %#x.\n", hr);
SetWindowPos(window, NULL, 0, 0, 100, 100, SWP_NOZORDER | SWP_NOACTIVATE);
GetWindowRect(window, &r);
ok(!EqualRect(&r, &fullscreen_rect), "Window resize failed? got %s.\n",
wine_dbgstr_rect(&r));
ret = SetForegroundWindow(window2);
ok(ret, "Failed to set foreground window.\n");
hr = IDirectDraw_SetCooperativeLevel(ddraw, window, DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN);
ok(SUCCEEDED(hr), "SetCooperativeLevel failed, hr %#x.\n", hr);
tmp = GetWindowLongA(window, GWL_STYLE);
expected_style = style | WS_VISIBLE;
todo_wine ok(tmp == expected_style, "Expected window style %#x, got %#x.\n", expected_style, tmp);
tmp = GetWindowLongA(window, GWL_EXSTYLE);
todo_wine ok(tmp == exstyle, "Expected window extended style %#x, got %#x.\n", exstyle, tmp);
GetWindowRect(window, &r);
ok(EqualRect(&r, &fullscreen_rect), "Expected %s, got %s.\n",
wine_dbgstr_rect(&fullscreen_rect), wine_dbgstr_rect(&r));
ret = SetForegroundWindow(window);
ok(ret, "Failed to set foreground window.\n");
hr = IDirectDraw_SetCooperativeLevel(ddraw, window, DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN);
ok(SUCCEEDED(hr), "SetCooperativeLevel failed, hr %#x.\n", hr);
tmp = GetWindowLongA(window, GWL_STYLE);
expected_style = style | WS_VISIBLE;
todo_wine ok(tmp == expected_style, "Expected window style %#x, got %#x.\n", expected_style, tmp);
tmp = GetWindowLongA(window, GWL_EXSTYLE);
expected_style = exstyle | WS_EX_TOPMOST;
todo_wine ok(tmp == expected_style, "Expected window extended style %#x, got %#x.\n", expected_style, tmp);
ShowWindow(window, SW_HIDE);
hr = IDirectDraw_SetCooperativeLevel(ddraw, window, DDSCL_NORMAL);
ok(SUCCEEDED(hr), "SetCooperativeLevel failed, hr %#x.\n", hr);
tmp = GetWindowLongA(window, GWL_STYLE);
ok(tmp == style, "Expected window style %#x, got %#x.\n", style, tmp);
tmp = GetWindowLongA(window, GWL_EXSTYLE);
todo_wine ok(tmp == exstyle, "Expected window extended style %#x, got %#x.\n", exstyle, tmp);
ShowWindow(window, SW_SHOW);
hr = IDirectDraw_SetCooperativeLevel(ddraw, window, DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN);
ok(SUCCEEDED(hr), "SetCooperativeLevel failed, hr %#x.\n", hr);
@ -2607,6 +2681,7 @@ static void test_window_style(void)
ref = IDirectDraw_Release(ddraw);
ok(ref == 0, "The ddraw object was not properly freed: refcount %u.\n", ref);
DestroyWindow(window2);
DestroyWindow(window);
}
@ -4316,11 +4391,13 @@ static void test_unsupported_formats(void)
DestroyWindow(window);
}
static void test_rt_caps(void)
static void test_rt_caps(const GUID *device_guid)
{
PALETTEENTRY palette_entries[256];
IDirectDrawPalette *palette;
IDirect3DDevice *device;
BOOL software_device;
DWORD expected_caps;
IDirectDraw *ddraw;
DWORD z_depth = 0;
unsigned int i;
@ -4338,7 +4415,7 @@ static void test_rt_caps(void)
{
const DDPIXELFORMAT *pf;
DWORD caps_in;
DWORD caps_out;
DWORD caps_out[2];
HRESULT create_device_hr;
BOOL create_may_fail;
}
@ -4347,149 +4424,155 @@ static void test_rt_caps(void)
{
NULL,
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY,
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM,
{DDSCAPS_OFFSCREENPLAIN | DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM},
D3D_OK,
FALSE,
},
{
NULL,
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_3DDEVICE,
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM,
{DDSCAPS_OFFSCREENPLAIN | DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM,
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_3DDEVICE | DDSCAPS_SYSTEMMEMORY},
D3D_OK,
FALSE,
},
{
NULL,
DDSCAPS_OFFSCREENPLAIN,
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM,
{DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM,
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY},
DDERR_INVALIDCAPS,
FALSE,
},
{
NULL,
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE,
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE,
{DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE},
D3DERR_SURFACENOTINVIDMEM,
FALSE,
},
{
NULL,
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY,
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY,
{DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY},
DDERR_INVALIDCAPS,
FALSE,
},
{
NULL,
DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY,
DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM,
{DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM},
D3D_OK,
FALSE,
},
{
NULL,
DDSCAPS_3DDEVICE,
DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM,
{DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM,
DDSCAPS_3DDEVICE | DDSCAPS_SYSTEMMEMORY},
D3D_OK,
FALSE,
},
{
NULL,
0,
DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM,
{DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM, DDSCAPS_SYSTEMMEMORY},
DDERR_INVALIDCAPS,
FALSE,
},
{
NULL,
DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE,
DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE,
{DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE},
D3DERR_SURFACENOTINVIDMEM,
FALSE,
},
{
NULL,
DDSCAPS_SYSTEMMEMORY,
DDSCAPS_SYSTEMMEMORY,
{DDSCAPS_SYSTEMMEMORY},
DDERR_INVALIDCAPS,
FALSE,
},
{
&p8_fmt,
0,
DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM,
{DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM},
DDERR_INVALIDCAPS,
FALSE,
},
{
&p8_fmt,
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_3DDEVICE,
~0U /* AMD r200 */ ,
{~0u /* AMD r200 */, DDSCAPS_OFFSCREENPLAIN | DDSCAPS_3DDEVICE | DDSCAPS_SYSTEMMEMORY},
DDERR_NOPALETTEATTACHED,
FALSE,
},
{
&p8_fmt,
DDSCAPS_OFFSCREENPLAIN,
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM,
{DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM,
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY},
DDERR_INVALIDCAPS,
FALSE,
},
{
&p8_fmt,
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE,
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE,
{DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE},
DDERR_NOPALETTEATTACHED,
FALSE,
},
{
&p8_fmt,
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY,
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY,
{DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY},
DDERR_INVALIDCAPS,
FALSE,
},
{
NULL,
DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY | DDSCAPS_ZBUFFER,
DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY | DDSCAPS_ZBUFFER | DDSCAPS_LOCALVIDMEM,
{DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY | DDSCAPS_ZBUFFER | DDSCAPS_LOCALVIDMEM},
DDERR_INVALIDCAPS,
TRUE /* AMD Evergreen */,
},
{
NULL,
DDSCAPS_3DDEVICE | DDSCAPS_ZBUFFER,
~0U /* AMD Evergreen */,
{~0u /* AMD Evergreen */, DDSCAPS_3DDEVICE | DDSCAPS_ZBUFFER | DDSCAPS_SYSTEMMEMORY},
DDERR_INVALIDCAPS,
FALSE,
},
{
NULL,
DDSCAPS_ZBUFFER,
~0U /* AMD Evergreen */,
{~0u /* AMD Evergreen */, DDSCAPS_ZBUFFER | DDSCAPS_SYSTEMMEMORY},
DDERR_INVALIDCAPS,
FALSE,
},
{
NULL,
DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE | DDSCAPS_ZBUFFER,
DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE | DDSCAPS_ZBUFFER,
{DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE | DDSCAPS_ZBUFFER},
DDERR_INVALIDCAPS,
TRUE /* Nvidia Kepler */,
},
{
NULL,
DDSCAPS_SYSTEMMEMORY | DDSCAPS_ZBUFFER,
DDSCAPS_SYSTEMMEMORY | DDSCAPS_ZBUFFER,
{DDSCAPS_SYSTEMMEMORY | DDSCAPS_ZBUFFER},
DDERR_INVALIDCAPS,
TRUE /* Nvidia Kepler */,
},
};
software_device = is_software_device_type(device_guid);
window = create_window();
ddraw = create_ddraw();
ok(!!ddraw, "Failed to create a ddraw object.\n");
if (!(device = create_device(ddraw, window, DDSCL_NORMAL)))
if (!(device = create_device_ex(ddraw, window, DDSCL_NORMAL, device_guid)))
{
skip("Failed to create a 3D device, skipping test.\n");
IDirectDraw_Release(ddraw);
@ -4502,7 +4585,7 @@ static void test_rt_caps(void)
memset(palette_entries, 0, sizeof(palette_entries));
hr = IDirectDraw_CreatePalette(ddraw, DDPCAPS_ALLOW256 | DDPCAPS_8BIT, palette_entries, &palette, NULL);
ok(SUCCEEDED(hr), "Failed to create palette, hr %#x.\n", hr);
ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
for (i = 0; i < ARRAY_SIZE(test_data); ++i)
{
@ -4527,32 +4610,61 @@ static void test_rt_caps(void)
surface_desc.dwWidth = 640;
surface_desc.dwHeight = 480;
hr = IDirectDraw_CreateSurface(ddraw, &surface_desc, &surface, NULL);
ok(SUCCEEDED(hr) || broken(test_data[i].create_may_fail),
"Test %u: Failed to create surface with caps %#x, hr %#x.\n",
i, test_data[i].caps_in, hr);
if (surface_desc.ddsCaps.dwCaps & DDSCAPS_VIDEOMEMORY && hr == DDERR_NODIRECTDRAWHW)
{
skip("No 3d hardware, skipping test %u, software_device %u.\n", i, software_device);
continue;
}
ok(hr == DD_OK || broken(test_data[i].create_may_fail
|| (software_device && test_data[i].pf == &p8_fmt && hr == DDERR_INVALIDPIXELFORMAT)),
"Got unexpected hr %#x, test %u, software_device %u.\n", hr, i, software_device);
if (FAILED(hr))
continue;
memset(&surface_desc, 0, sizeof(surface_desc));
surface_desc.dwSize = sizeof(surface_desc);
hr = IDirectDrawSurface_GetSurfaceDesc(surface, &surface_desc);
ok(SUCCEEDED(hr), "Test %u: Failed to get surface desc, hr %#x.\n", i, hr);
ok(test_data[i].caps_out == ~0U || surface_desc.ddsCaps.dwCaps == test_data[i].caps_out,
"Test %u: Got unexpected caps %#x, expected %#x.\n",
i, surface_desc.ddsCaps.dwCaps, test_data[i].caps_out);
ok(hr == DD_OK, "Got unexpected hr %#x, test %u, software_device %u.\n", hr, i, software_device);
if (software_device)
{
expected_caps = test_data[i].caps_out[1]
? test_data[i].caps_out[1] : test_data[i].caps_out[0];
hr = IDirectDrawSurface_QueryInterface(surface, &IID_IDirect3DHALDevice, (void **)&device);
ok(hr == test_data[i].create_device_hr, "Test %u: Got unexpected hr %#x, expected %#x.\n",
i, hr, test_data[i].create_device_hr);
todo_wine_if(test_data[i].caps_out[0] == ~0u && surface_desc.ddsCaps.dwCaps != expected_caps)
ok(surface_desc.ddsCaps.dwCaps == expected_caps
|| surface_desc.ddsCaps.dwCaps == test_data[i].caps_out[0],
"Got unexpected caps %#x, test %u, software_device %u.\n",
surface_desc.ddsCaps.dwCaps, i, software_device);
}
else
{
ok(test_data[i].caps_out[0] == ~0u || surface_desc.ddsCaps.dwCaps == test_data[i].caps_out[0],
"Got unexpected caps %#x, expected %#x, test %u, software_device %u.\n",
surface_desc.ddsCaps.dwCaps, test_data[i].caps_out[0], i, software_device);
}
hr = IDirectDrawSurface_QueryInterface(surface, device_guid, (void **)&device);
todo_wine_if(software_device && test_data[i].create_device_hr == D3DERR_SURFACENOTINVIDMEM)
ok((!software_device && hr == test_data[i].create_device_hr)
|| (software_device && (hr == (test_data[i].create_device_hr == D3DERR_SURFACENOTINVIDMEM
? DD_OK : test_data[i].create_device_hr))),
"Got unexpected hr %#x, test %u, software_device %u.\n", hr, i, software_device);
if (hr == DDERR_NOPALETTEATTACHED)
{
hr = IDirectDrawSurface_SetPalette(surface, palette);
ok(SUCCEEDED(hr), "Test %u: Failed to set palette, hr %#x.\n", i, hr);
hr = IDirectDrawSurface_QueryInterface(surface, &IID_IDirect3DHALDevice, (void **)&device);
if (surface_desc.ddsCaps.dwCaps & DDSCAPS_VIDEOMEMORY)
ok(hr == DDERR_INVALIDPIXELFORMAT, "Test %u: Got unexpected hr %#x.\n", i, hr);
ok(hr == DD_OK, "Got unexpected hr %#x, test %u, software_device %u.\n", hr, i, software_device);
hr = IDirectDrawSurface_QueryInterface(surface, device_guid, (void **)&device);
if (software_device)
todo_wine
ok(hr == DD_OK, "Got unexpected hr %#x, test %u, software_device %u.\n",
hr, i, software_device);
else if (surface_desc.ddsCaps.dwCaps & DDSCAPS_VIDEOMEMORY)
ok(hr == DDERR_INVALIDPIXELFORMAT, "Got unexpected hr %#x, test %u, software_device %u.\n",
hr, i, software_device);
else
ok(hr == D3DERR_SURFACENOTINVIDMEM, "Test %u: Got unexpected hr %#x.\n", i, hr);
ok(hr == D3DERR_SURFACENOTINVIDMEM, "Got unexpected hr %#x, test %u, software_device %u.\n",
hr, i, software_device);
}
if (SUCCEEDED(hr))
{
@ -14284,6 +14396,12 @@ static void test_get_display_mode(void)
IDirectDraw_Release(ddraw);
}
static void run_for_each_device_type(void (*test_func)(const GUID *))
{
test_func(&IID_IDirect3DHALDevice);
test_func(&IID_IDirect3DRGBDevice);
}
START_TEST(ddraw1)
{
DDDEVICEIDENTIFIER identifier;
@ -14345,7 +14463,7 @@ START_TEST(ddraw1)
test_clear_rect_count();
test_coop_level_activateapp();
test_unsupported_formats();
test_rt_caps();
run_for_each_device_type(test_rt_caps);
test_primary_caps();
test_surface_lock();
test_surface_discard();

View File

@ -163,6 +163,11 @@ static BOOL ddraw_is_vmware(IDirectDraw2 *ddraw)
return ddraw_is_vendor(ddraw, 0x15ad);
}
static BOOL is_software_device_type(const GUID *device_guid)
{
return device_guid != &IID_IDirect3DHALDevice;
}
static IDirectDrawSurface *create_overlay(IDirectDraw2 *ddraw,
unsigned int width, unsigned int height, DWORD format)
{
@ -435,7 +440,7 @@ static IDirectDraw2 *create_ddraw(void)
return ddraw2;
}
static IDirect3DDevice2 *create_device(IDirectDraw2 *ddraw, HWND window, DWORD coop_level)
static IDirect3DDevice2 *create_device_ex(IDirectDraw2 *ddraw, HWND window, DWORD coop_level, const GUID *device_guid)
{
/* Prefer 16 bit depth buffers because Nvidia gives us an unpadded D24 buffer if we ask
* for 24 bit and handles such buffers incorrectly in DDBLT_DEPTHFILL. AMD only supports
@ -503,7 +508,7 @@ static IDirect3DDevice2 *create_device(IDirectDraw2 *ddraw, HWND window, DWORD c
if (FAILED(hr))
continue;
if (SUCCEEDED(IDirect3D2_CreateDevice(d3d, &IID_IDirect3DHALDevice, surface, &device)))
if (SUCCEEDED(IDirect3D2_CreateDevice(d3d, device_guid, surface, &device)))
break;
IDirectDrawSurface_DeleteAttachedSurface(surface, 0, ds);
@ -514,6 +519,11 @@ static IDirect3DDevice2 *create_device(IDirectDraw2 *ddraw, HWND window, DWORD c
return device;
}
static IDirect3DDevice2 *create_device(IDirectDraw2 *ddraw, HWND window, DWORD coop_level)
{
return create_device_ex(ddraw, window, coop_level, &IID_IDirect3DHALDevice);
}
static IDirect3DViewport2 *create_viewport(IDirect3DDevice2 *device, UINT x, UINT y, UINT w, UINT h)
{
IDirect3DViewport2 *viewport;
@ -2587,14 +2597,16 @@ static void test_window_style(void)
{
LONG style, exstyle, tmp, expected_style;
RECT fullscreen_rect, r;
HWND window, window2;
IDirectDraw2 *ddraw;
HWND window;
HRESULT hr;
ULONG ref;
BOOL ret;
window = CreateWindowA("static", "ddraw_test", WS_OVERLAPPEDWINDOW,
0, 0, 100, 100, 0, 0, 0, 0);
window2 = CreateWindowA("static", "ddraw_test", WS_OVERLAPPEDWINDOW | WS_VISIBLE,
0, 0, 50, 50, 0, 0, 0, 0);
ddraw = create_ddraw();
ok(!!ddraw, "Failed to create a ddraw object.\n");
@ -2638,6 +2650,68 @@ static void test_window_style(void)
tmp = GetWindowLongA(window, GWL_EXSTYLE);
ok(tmp == exstyle, "Expected window extended style %#x, got %#x.\n", exstyle, tmp);
ShowWindow(window, SW_SHOW);
ret = SetForegroundWindow(GetDesktopWindow());
ok(ret, "Failed to set foreground window.\n");
SetActiveWindow(window);
ok(GetActiveWindow() == window, "Unexpected active window.\n");
hr = IDirectDraw2_SetCooperativeLevel(ddraw, window, DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN);
ok(SUCCEEDED(hr), "SetCooperativeLevel failed, hr %#x.\n", hr);
tmp = GetWindowLongA(window, GWL_STYLE);
expected_style = style | WS_VISIBLE;
todo_wine ok(tmp == expected_style, "Expected window style %#x, got %#x.\n", expected_style, tmp);
tmp = GetWindowLongA(window, GWL_EXSTYLE);
todo_wine ok(tmp == exstyle, "Expected window extended style %#x, got %#x.\n", exstyle, tmp);
GetWindowRect(window, &r);
ok(EqualRect(&r, &fullscreen_rect), "Expected %s, got %s.\n",
wine_dbgstr_rect(&fullscreen_rect), wine_dbgstr_rect(&r));
hr = IDirectDraw2_SetCooperativeLevel(ddraw, window, DDSCL_NORMAL);
ok(SUCCEEDED(hr), "SetCooperativeLevel failed, hr %#x.\n", hr);
SetWindowPos(window, NULL, 0, 0, 100, 100, SWP_NOZORDER | SWP_NOACTIVATE);
GetWindowRect(window, &r);
ok(!EqualRect(&r, &fullscreen_rect), "Window resize failed? got %s.\n",
wine_dbgstr_rect(&r));
ret = SetForegroundWindow(window2);
ok(ret, "Failed to set foreground window.\n");
hr = IDirectDraw2_SetCooperativeLevel(ddraw, window, DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN);
ok(SUCCEEDED(hr), "SetCooperativeLevel failed, hr %#x.\n", hr);
tmp = GetWindowLongA(window, GWL_STYLE);
expected_style = style | WS_VISIBLE;
todo_wine ok(tmp == expected_style, "Expected window style %#x, got %#x.\n", expected_style, tmp);
tmp = GetWindowLongA(window, GWL_EXSTYLE);
todo_wine ok(tmp == exstyle, "Expected window extended style %#x, got %#x.\n", exstyle, tmp);
GetWindowRect(window, &r);
ok(EqualRect(&r, &fullscreen_rect), "Expected %s, got %s.\n",
wine_dbgstr_rect(&fullscreen_rect), wine_dbgstr_rect(&r));
ret = SetForegroundWindow(window);
ok(ret, "Failed to set foreground window.\n");
hr = IDirectDraw2_SetCooperativeLevel(ddraw, window, DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN);
ok(SUCCEEDED(hr), "SetCooperativeLevel failed, hr %#x.\n", hr);
tmp = GetWindowLongA(window, GWL_STYLE);
expected_style = style | WS_VISIBLE;
todo_wine ok(tmp == expected_style, "Expected window style %#x, got %#x.\n", expected_style, tmp);
tmp = GetWindowLongA(window, GWL_EXSTYLE);
expected_style = exstyle | WS_EX_TOPMOST;
todo_wine ok(tmp == expected_style, "Expected window extended style %#x, got %#x.\n", expected_style, tmp);
ShowWindow(window, SW_HIDE);
hr = IDirectDraw2_SetCooperativeLevel(ddraw, window, DDSCL_NORMAL);
ok(SUCCEEDED(hr), "SetCooperativeLevel failed, hr %#x.\n", hr);
tmp = GetWindowLongA(window, GWL_STYLE);
ok(tmp == style, "Expected window style %#x, got %#x.\n", style, tmp);
tmp = GetWindowLongA(window, GWL_EXSTYLE);
todo_wine ok(tmp == exstyle, "Expected window extended style %#x, got %#x.\n", exstyle, tmp);
ShowWindow(window, SW_SHOW);
hr = IDirectDraw2_SetCooperativeLevel(ddraw, window, DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN);
ok(SUCCEEDED(hr), "SetCooperativeLevel failed, hr %#x.\n", hr);
@ -2661,6 +2735,7 @@ static void test_window_style(void)
ref = IDirectDraw2_Release(ddraw);
ok(ref == 0, "The ddraw object was not properly freed: refcount %u.\n", ref);
DestroyWindow(window2);
DestroyWindow(window);
}
@ -4739,11 +4814,13 @@ static void test_unsupported_formats(void)
DestroyWindow(window);
}
static void test_rt_caps(void)
static void test_rt_caps(const GUID *device_guid)
{
PALETTEENTRY palette_entries[256];
IDirectDrawPalette *palette;
IDirect3DDevice2 *device;
BOOL software_device;
DWORD expected_caps;
IDirectDraw2 *ddraw;
DWORD z_depth = 0;
IDirect3D2 *d3d;
@ -4762,7 +4839,7 @@ static void test_rt_caps(void)
{
const DDPIXELFORMAT *pf;
DWORD caps_in;
DWORD caps_out;
DWORD caps_out[2];
HRESULT create_device_hr;
HRESULT set_rt_hr;
HRESULT alternative_set_rt_hr;
@ -4773,7 +4850,7 @@ static void test_rt_caps(void)
{
NULL,
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY,
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM,
{DDSCAPS_OFFSCREENPLAIN | DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM},
D3D_OK,
D3D_OK,
D3D_OK,
@ -4782,7 +4859,8 @@ static void test_rt_caps(void)
{
NULL,
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_3DDEVICE,
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM,
{DDSCAPS_OFFSCREENPLAIN | DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM,
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_3DDEVICE | DDSCAPS_SYSTEMMEMORY},
D3D_OK,
D3D_OK,
D3D_OK,
@ -4791,7 +4869,8 @@ static void test_rt_caps(void)
{
NULL,
DDSCAPS_OFFSCREENPLAIN,
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM,
{DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM,
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY},
DDERR_INVALIDCAPS,
DDERR_INVALIDCAPS,
DDERR_INVALIDCAPS,
@ -4800,7 +4879,7 @@ static void test_rt_caps(void)
{
NULL,
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE,
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE,
{DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE},
D3DERR_SURFACENOTINVIDMEM,
D3D_OK,
D3D_OK,
@ -4809,7 +4888,7 @@ static void test_rt_caps(void)
{
NULL,
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY,
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY,
{DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY},
DDERR_INVALIDCAPS,
DDERR_INVALIDCAPS,
DDERR_INVALIDCAPS,
@ -4818,7 +4897,7 @@ static void test_rt_caps(void)
{
NULL,
DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY,
DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM,
{DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM},
D3D_OK,
D3D_OK,
D3D_OK,
@ -4827,7 +4906,8 @@ static void test_rt_caps(void)
{
NULL,
DDSCAPS_3DDEVICE,
DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM,
{DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM,
DDSCAPS_3DDEVICE | DDSCAPS_SYSTEMMEMORY},
D3D_OK,
D3D_OK,
D3D_OK,
@ -4836,7 +4916,8 @@ static void test_rt_caps(void)
{
NULL,
0,
DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM,
{DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM,
DDSCAPS_SYSTEMMEMORY},
DDERR_INVALIDCAPS,
DDERR_INVALIDCAPS,
DDERR_INVALIDCAPS,
@ -4845,7 +4926,7 @@ static void test_rt_caps(void)
{
NULL,
DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE,
DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE,
{DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE},
D3DERR_SURFACENOTINVIDMEM,
D3D_OK,
D3D_OK,
@ -4854,7 +4935,7 @@ static void test_rt_caps(void)
{
NULL,
DDSCAPS_SYSTEMMEMORY,
DDSCAPS_SYSTEMMEMORY,
{DDSCAPS_SYSTEMMEMORY},
DDERR_INVALIDCAPS,
DDERR_INVALIDCAPS,
DDERR_INVALIDCAPS,
@ -4863,7 +4944,7 @@ static void test_rt_caps(void)
{
&p8_fmt,
0,
DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM,
{DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM},
DDERR_INVALIDCAPS,
DDERR_INVALIDCAPS,
DDERR_INVALIDCAPS,
@ -4872,7 +4953,7 @@ static void test_rt_caps(void)
{
&p8_fmt,
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_3DDEVICE,
~0U /* AMD r200 */,
{~0u /* AMD r200 */, DDSCAPS_OFFSCREENPLAIN | DDSCAPS_3DDEVICE | DDSCAPS_SYSTEMMEMORY},
DDERR_NOPALETTEATTACHED,
DDERR_INVALIDCAPS,
DDERR_INVALIDCAPS,
@ -4881,7 +4962,8 @@ static void test_rt_caps(void)
{
&p8_fmt,
DDSCAPS_OFFSCREENPLAIN,
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM,
{DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM,
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY},
DDERR_INVALIDCAPS,
DDERR_INVALIDCAPS,
DDERR_INVALIDCAPS,
@ -4890,7 +4972,7 @@ static void test_rt_caps(void)
{
&p8_fmt,
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE,
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE,
{DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE},
DDERR_NOPALETTEATTACHED,
DDERR_INVALIDCAPS,
DDERR_INVALIDCAPS,
@ -4899,7 +4981,7 @@ static void test_rt_caps(void)
{
&p8_fmt,
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY,
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY,
{DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY},
DDERR_INVALIDCAPS,
DDERR_INVALIDCAPS,
DDERR_INVALIDCAPS,
@ -4908,7 +4990,7 @@ static void test_rt_caps(void)
{
NULL,
DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY | DDSCAPS_ZBUFFER,
DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY | DDSCAPS_ZBUFFER | DDSCAPS_LOCALVIDMEM,
{DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY | DDSCAPS_ZBUFFER | DDSCAPS_LOCALVIDMEM},
DDERR_INVALIDCAPS,
DDERR_INVALIDPIXELFORMAT,
DDERR_INVALIDCAPS,
@ -4917,7 +4999,7 @@ static void test_rt_caps(void)
{
NULL,
DDSCAPS_3DDEVICE | DDSCAPS_ZBUFFER,
~0U /* AMD Evergreen */,
{~0u /* AMD Evergreen */, DDSCAPS_3DDEVICE | DDSCAPS_ZBUFFER | DDSCAPS_SYSTEMMEMORY},
DDERR_INVALIDCAPS,
DDERR_INVALIDPIXELFORMAT,
DDERR_INVALIDCAPS,
@ -4926,7 +5008,7 @@ static void test_rt_caps(void)
{
NULL,
DDSCAPS_ZBUFFER,
~0U /* AMD Evergreen */,
{~0u /* AMD Evergreen */, DDSCAPS_ZBUFFER | DDSCAPS_SYSTEMMEMORY},
DDERR_INVALIDCAPS,
DDERR_INVALIDCAPS,
DDERR_INVALIDCAPS,
@ -4935,7 +5017,7 @@ static void test_rt_caps(void)
{
NULL,
DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE | DDSCAPS_ZBUFFER,
DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE | DDSCAPS_ZBUFFER,
{DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE | DDSCAPS_ZBUFFER},
DDERR_INVALIDCAPS,
DDERR_INVALIDPIXELFORMAT,
DDERR_INVALIDPIXELFORMAT,
@ -4944,7 +5026,7 @@ static void test_rt_caps(void)
{
NULL,
DDSCAPS_SYSTEMMEMORY | DDSCAPS_ZBUFFER,
DDSCAPS_SYSTEMMEMORY | DDSCAPS_ZBUFFER,
{DDSCAPS_SYSTEMMEMORY | DDSCAPS_ZBUFFER},
DDERR_INVALIDCAPS,
DDERR_INVALIDCAPS,
DDERR_INVALIDCAPS,
@ -4952,10 +5034,12 @@ static void test_rt_caps(void)
},
};
software_device = is_software_device_type(device_guid);
window = create_window();
ddraw = create_ddraw();
ok(!!ddraw, "Failed to create a ddraw object.\n");
if (!(device = create_device(ddraw, window, DDSCL_NORMAL)))
if (!(device = create_device_ex(ddraw, window, DDSCL_NORMAL, device_guid)))
{
skip("Failed to create a 3D device, skipping test.\n");
IDirectDraw2_Release(ddraw);
@ -4974,7 +5058,7 @@ static void test_rt_caps(void)
memset(palette_entries, 0, sizeof(palette_entries));
hr = IDirectDraw2_CreatePalette(ddraw, DDPCAPS_ALLOW256 | DDPCAPS_8BIT, palette_entries, &palette, NULL);
ok(SUCCEEDED(hr), "Failed to create palette, hr %#x.\n", hr);
ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
for (i = 0; i < ARRAY_SIZE(test_data); ++i)
{
@ -4999,34 +5083,70 @@ static void test_rt_caps(void)
surface_desc.dwWidth = 640;
surface_desc.dwHeight = 480;
hr = IDirectDraw2_CreateSurface(ddraw, &surface_desc, &surface, NULL);
ok(SUCCEEDED(hr) || broken(test_data[i].create_may_fail),
"Test %u: Failed to create surface with caps %#x, hr %#x.\n",
i, test_data[i].caps_in, hr);
if (surface_desc.ddsCaps.dwCaps & DDSCAPS_VIDEOMEMORY && hr == DDERR_NODIRECTDRAWHW)
{
skip("No 3d hardware, skipping test %u, software_device %u.\n", i, software_device);
continue;
}
ok(hr == DD_OK || broken(test_data[i].create_may_fail
|| (software_device && test_data[i].pf == &p8_fmt && hr == DDERR_INVALIDPIXELFORMAT)),
"Got unexpected hr %#x, test %u, software_device %u.\n", hr, i, software_device);
if (FAILED(hr))
continue;
memset(&surface_desc, 0, sizeof(surface_desc));
surface_desc.dwSize = sizeof(surface_desc);
hr = IDirectDrawSurface_GetSurfaceDesc(surface, &surface_desc);
ok(SUCCEEDED(hr), "Test %u: Failed to get surface desc, hr %#x.\n", i, hr);
ok(test_data[i].caps_out == ~0U || surface_desc.ddsCaps.dwCaps == test_data[i].caps_out,
"Test %u: Got unexpected caps %#x, expected %#x.\n",
i, surface_desc.ddsCaps.dwCaps, test_data[i].caps_out);
ok(hr == DD_OK, "Got unexpected hr %#x, test %u, software_device %u.\n", hr, i, software_device);
if (software_device)
{
expected_caps = test_data[i].caps_out[software_device]
? test_data[i].caps_out[software_device] : test_data[i].caps_out[0];
todo_wine_if(test_data[i].caps_out[0] == ~0u && surface_desc.ddsCaps.dwCaps != expected_caps)
ok(surface_desc.ddsCaps.dwCaps == expected_caps
|| surface_desc.ddsCaps.dwCaps == test_data[i].caps_out[0],
"Got unexpected caps %#x, test %u, software_device %u.\n",
surface_desc.ddsCaps.dwCaps, i, software_device);
}
else
{
ok(test_data[i].caps_out[0] == ~0u || surface_desc.ddsCaps.dwCaps == test_data[i].caps_out[0],
"Got unexpected caps %#x, expected %#x, test %u, software_device %u.\n",
surface_desc.ddsCaps.dwCaps, test_data[i].caps_out[0], i, software_device);
}
hr = IDirect3D2_CreateDevice(d3d, device_guid, surface, &device);
todo_wine_if(software_device && test_data[i].create_device_hr == D3DERR_SURFACENOTINVIDMEM)
ok((!software_device && hr == test_data[i].create_device_hr)
|| (software_device && (hr == (test_data[i].create_device_hr == D3DERR_SURFACENOTINVIDMEM
? DD_OK : test_data[i].create_device_hr))),
"Got unexpected hr %#x, test %u, software_device %u.\n", hr, i, software_device);
hr = IDirect3D2_CreateDevice(d3d, &IID_IDirect3DHALDevice, surface, &device);
ok(hr == test_data[i].create_device_hr, "Test %u: Got unexpected hr %#x, expected %#x.\n",
i, hr, test_data[i].create_device_hr);
if (FAILED(hr))
{
if (hr == DDERR_NOPALETTEATTACHED)
{
hr = IDirectDrawSurface_SetPalette(surface, palette);
ok(SUCCEEDED(hr), "Test %u: Failed to set palette, hr %#x.\n", i, hr);
hr = IDirect3D2_CreateDevice(d3d, &IID_IDirect3DHALDevice, surface, &device);
if (surface_desc.ddsCaps.dwCaps & DDSCAPS_VIDEOMEMORY)
ok(hr == DDERR_INVALIDPIXELFORMAT, "Test %u: Got unexpected hr %#x.\n", i, hr);
ok(hr == DD_OK, "Got unexpected hr %#x, test %u, software_device %u.\n", hr, i, software_device);
hr = IDirect3D2_CreateDevice(d3d, device_guid, surface, &device);
if (software_device)
todo_wine
ok(hr == DD_OK, "Got unexpected hr %#x, test %u, software_device %u.\n",
hr, i, software_device);
else if (surface_desc.ddsCaps.dwCaps & DDSCAPS_VIDEOMEMORY)
ok(hr == DDERR_INVALIDPIXELFORMAT, "Got unexpected hr %#x, test %u, software_device %u.\n",
hr, i, software_device);
else
ok(hr == D3DERR_SURFACENOTINVIDMEM, "Test %u: Got unexpected hr %#x.\n", i, hr);
ok(hr == D3DERR_SURFACENOTINVIDMEM, "Got unexpected hr %#x, test %u, software_device %u.\n",
hr, i, software_device);
if (hr == DD_OK)
{
refcount = IDirect3DDevice2_Release(device);
ok(!refcount, "Test %u: The device was not properly freed, refcount %u.\n", i, refcount);
}
}
IDirectDrawSurface_Release(surface);
@ -5037,10 +5157,10 @@ static void test_rt_caps(void)
surface_desc.dwWidth = 640;
surface_desc.dwHeight = 480;
hr = IDirectDraw2_CreateSurface(ddraw, &surface_desc, &surface, NULL);
ok(SUCCEEDED(hr), "Test %u: Failed to create surface, hr %#x.\n", i, hr);
ok(hr == DD_OK, "Got unexpected hr %#x, test %u, software_device %u.\n", hr, i, software_device);
hr = IDirect3D2_CreateDevice(d3d, &IID_IDirect3DHALDevice, surface, &device);
ok(SUCCEEDED(hr), "Test %u: Failed to create device, hr %#x.\n", i, hr);
hr = IDirect3D2_CreateDevice(d3d, device_guid, surface, &device);
ok(hr == DD_OK, "Got unexpected hr %#x, test %u, software_device %u.\n", hr, i, software_device);
}
memset(&surface_desc, 0, sizeof(surface_desc));
@ -5060,13 +5180,14 @@ static void test_rt_caps(void)
surface_desc.dwWidth = 640;
surface_desc.dwHeight = 480;
hr = IDirectDraw2_CreateSurface(ddraw, &surface_desc, &rt, NULL);
ok(SUCCEEDED(hr), "Test %u: Failed to create surface with caps %#x, hr %#x.\n",
i, test_data[i].caps_in, hr);
ok(hr == DD_OK, "Got unexpected hr %#x, test %u, software_device %u.\n", hr, i, software_device);
hr = IDirect3DDevice2_SetRenderTarget(device, rt, 0);
ok(hr == test_data[i].set_rt_hr || broken(hr == test_data[i].alternative_set_rt_hr),
"Test %u: Got unexpected hr %#x, expected %#x.\n",
i, hr, test_data[i].set_rt_hr);
ok(hr == test_data[i].set_rt_hr || (software_device && hr == DDERR_NOPALETTEATTACHED)
|| broken(hr == test_data[i].alternative_set_rt_hr),
"Got unexpected hr %#x, test %u, software_device %u.\n",
hr, i, software_device);
if (SUCCEEDED(hr) || hr == DDERR_INVALIDPIXELFORMAT)
expected_rt = rt;
else
@ -5081,8 +5202,8 @@ static void test_rt_caps(void)
}
hr = IDirect3DDevice2_GetRenderTarget(device, &tmp);
ok(SUCCEEDED(hr), "Test %u: Failed to get render target, hr %#x.\n", i, hr);
ok(tmp == expected_rt, "Test %u: Got unexpected rt %p.\n", i, tmp);
ok(hr == DD_OK, "Got unexpected hr %#x, test %u, software_device %u.\n", hr, i, software_device);
ok(tmp == expected_rt, "Got unexpected rt %p, test %u, software_device %u.\n", tmp, i, software_device);
IDirectDrawSurface_Release(tmp);
IDirectDrawSurface_Release(rt);
@ -15211,6 +15332,12 @@ done:
IDirectDraw2_Release(ddraw);
}
static void run_for_each_device_type(void (*test_func)(const GUID *))
{
test_func(&IID_IDirect3DHALDevice);
test_func(&IID_IDirect3DRGBDevice);
}
START_TEST(ddraw2)
{
DDDEVICEIDENTIFIER identifier;
@ -15276,7 +15403,7 @@ START_TEST(ddraw2)
test_lighting_interface_versions();
test_coop_level_activateapp();
test_unsupported_formats();
test_rt_caps();
run_for_each_device_type(test_rt_caps);
test_primary_caps();
test_surface_lock();
test_surface_discard();

View File

@ -164,6 +164,11 @@ static BOOL ddraw_is_vmware(IDirectDraw4 *ddraw)
return ddraw_is_vendor(ddraw, 0x15ad);
}
static BOOL is_software_device_type(const GUID *device_guid)
{
return device_guid != &IID_IDirect3DHALDevice;
}
static IDirectDrawSurface4 *create_overlay(IDirectDraw4 *ddraw,
unsigned int width, unsigned int height, DWORD format)
{
@ -2827,14 +2832,16 @@ static void test_window_style(void)
{
LONG style, exstyle, tmp, expected_style;
RECT fullscreen_rect, r;
HWND window, window2;
IDirectDraw4 *ddraw;
HWND window;
HRESULT hr;
ULONG ref;
BOOL ret;
window = CreateWindowA("static", "ddraw_test", WS_OVERLAPPEDWINDOW,
0, 0, 100, 100, 0, 0, 0, 0);
window2 = CreateWindowA("static", "ddraw_test", WS_OVERLAPPEDWINDOW | WS_VISIBLE,
0, 0, 50, 50, 0, 0, 0, 0);
ddraw = create_ddraw();
ok(!!ddraw, "Failed to create a ddraw object.\n");
@ -2878,6 +2885,68 @@ static void test_window_style(void)
tmp = GetWindowLongA(window, GWL_EXSTYLE);
ok(tmp == exstyle, "Expected window extended style %#x, got %#x.\n", exstyle, tmp);
ShowWindow(window, SW_SHOW);
ret = SetForegroundWindow(GetDesktopWindow());
ok(ret, "Failed to set foreground window.\n");
SetActiveWindow(window);
ok(GetActiveWindow() == window, "Unexpected active window.\n");
hr = IDirectDraw4_SetCooperativeLevel(ddraw, window, DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN);
ok(SUCCEEDED(hr), "SetCooperativeLevel failed, hr %#x.\n", hr);
tmp = GetWindowLongA(window, GWL_STYLE);
expected_style = style | WS_VISIBLE;
todo_wine ok(tmp == expected_style, "Expected window style %#x, got %#x.\n", expected_style, tmp);
tmp = GetWindowLongA(window, GWL_EXSTYLE);
todo_wine ok(tmp == exstyle, "Expected window extended style %#x, got %#x.\n", exstyle, tmp);
GetWindowRect(window, &r);
ok(EqualRect(&r, &fullscreen_rect), "Expected %s, got %s.\n",
wine_dbgstr_rect(&fullscreen_rect), wine_dbgstr_rect(&r));
hr = IDirectDraw4_SetCooperativeLevel(ddraw, window, DDSCL_NORMAL);
ok(SUCCEEDED(hr), "SetCooperativeLevel failed, hr %#x.\n", hr);
SetWindowPos(window, NULL, 0, 0, 100, 100, SWP_NOZORDER | SWP_NOACTIVATE);
GetWindowRect(window, &r);
ok(!EqualRect(&r, &fullscreen_rect), "Window resize failed? got %s.\n",
wine_dbgstr_rect(&r));
ret = SetForegroundWindow(window2);
ok(ret, "Failed to set foreground window.\n");
hr = IDirectDraw4_SetCooperativeLevel(ddraw, window, DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN);
ok(SUCCEEDED(hr), "SetCooperativeLevel failed, hr %#x.\n", hr);
tmp = GetWindowLongA(window, GWL_STYLE);
expected_style = style | WS_VISIBLE;
todo_wine ok(tmp == expected_style, "Expected window style %#x, got %#x.\n", expected_style, tmp);
tmp = GetWindowLongA(window, GWL_EXSTYLE);
todo_wine ok(tmp == exstyle, "Expected window extended style %#x, got %#x.\n", exstyle, tmp);
GetWindowRect(window, &r);
ok(EqualRect(&r, &fullscreen_rect), "Expected %s, got %s.\n",
wine_dbgstr_rect(&fullscreen_rect), wine_dbgstr_rect(&r));
ret = SetForegroundWindow(window);
ok(ret, "Failed to set foreground window.\n");
hr = IDirectDraw4_SetCooperativeLevel(ddraw, window, DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN);
ok(SUCCEEDED(hr), "SetCooperativeLevel failed, hr %#x.\n", hr);
tmp = GetWindowLongA(window, GWL_STYLE);
expected_style = style | WS_VISIBLE;
todo_wine ok(tmp == expected_style, "Expected window style %#x, got %#x.\n", expected_style, tmp);
tmp = GetWindowLongA(window, GWL_EXSTYLE);
expected_style = exstyle | WS_EX_TOPMOST;
todo_wine ok(tmp == expected_style, "Expected window extended style %#x, got %#x.\n", expected_style, tmp);
ShowWindow(window, SW_HIDE);
hr = IDirectDraw4_SetCooperativeLevel(ddraw, window, DDSCL_NORMAL);
ok(SUCCEEDED(hr), "SetCooperativeLevel failed, hr %#x.\n", hr);
tmp = GetWindowLongA(window, GWL_STYLE);
ok(tmp == style, "Expected window style %#x, got %#x.\n", style, tmp);
tmp = GetWindowLongA(window, GWL_EXSTYLE);
todo_wine ok(tmp == exstyle, "Expected window extended style %#x, got %#x.\n", exstyle, tmp);
ShowWindow(window, SW_SHOW);
hr = IDirectDraw4_SetCooperativeLevel(ddraw, window, DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN);
ok(SUCCEEDED(hr), "SetCooperativeLevel failed, hr %#x.\n", hr);
@ -2901,6 +2970,7 @@ static void test_window_style(void)
ref = IDirectDraw4_Release(ddraw);
ok(ref == 0, "The ddraw object was not properly freed: refcount %u.\n", ref);
DestroyWindow(window2);
DestroyWindow(window);
}
@ -6355,10 +6425,12 @@ static void test_unsupported_formats(void)
DestroyWindow(window);
}
static void test_rt_caps(void)
static void test_rt_caps(const GUID *device_guid)
{
PALETTEENTRY palette_entries[256];
IDirectDrawPalette *palette;
BOOL software_device;
DWORD expected_caps;
IDirectDraw4 *ddraw;
DDPIXELFORMAT z_fmt;
IDirect3D3 *d3d;
@ -6377,7 +6449,7 @@ static void test_rt_caps(void)
{
const DDPIXELFORMAT *pf;
DWORD caps_in;
DWORD caps_out;
DWORD caps_out[2];
DWORD caps2_in;
DWORD caps2_out;
HRESULT create_device_hr;
@ -6388,7 +6460,7 @@ static void test_rt_caps(void)
{
NULL,
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY,
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM,
{DDSCAPS_OFFSCREENPLAIN | DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM},
0,
0,
D3D_OK,
@ -6398,7 +6470,8 @@ static void test_rt_caps(void)
{
NULL,
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_3DDEVICE,
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM,
{DDSCAPS_OFFSCREENPLAIN | DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM,
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_3DDEVICE | DDSCAPS_SYSTEMMEMORY},
0,
0,
D3D_OK,
@ -6408,7 +6481,8 @@ static void test_rt_caps(void)
{
NULL,
DDSCAPS_OFFSCREENPLAIN,
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM,
{DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM,
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY},
0,
0,
DDERR_INVALIDCAPS,
@ -6418,7 +6492,7 @@ static void test_rt_caps(void)
{
NULL,
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE,
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE,
{DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE},
0,
0,
D3DERR_SURFACENOTINVIDMEM,
@ -6428,7 +6502,7 @@ static void test_rt_caps(void)
{
NULL,
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY,
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY,
{DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY},
0,
0,
DDERR_INVALIDCAPS,
@ -6438,7 +6512,7 @@ static void test_rt_caps(void)
{
NULL,
DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY,
DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM,
{DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM},
0,
0,
D3D_OK,
@ -6448,7 +6522,8 @@ static void test_rt_caps(void)
{
NULL,
DDSCAPS_3DDEVICE,
DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM,
{DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM,
DDSCAPS_3DDEVICE | DDSCAPS_SYSTEMMEMORY},
0,
0,
D3D_OK,
@ -6458,7 +6533,8 @@ static void test_rt_caps(void)
{
NULL,
0,
DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM,
{DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM,
DDSCAPS_SYSTEMMEMORY},
0,
0,
DDERR_INVALIDCAPS,
@ -6468,7 +6544,7 @@ static void test_rt_caps(void)
{
NULL,
DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE,
DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE,
{DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE},
0,
0,
D3DERR_SURFACENOTINVIDMEM,
@ -6478,7 +6554,7 @@ static void test_rt_caps(void)
{
NULL,
DDSCAPS_SYSTEMMEMORY,
DDSCAPS_SYSTEMMEMORY,
{DDSCAPS_SYSTEMMEMORY},
0,
0,
DDERR_INVALIDCAPS,
@ -6488,7 +6564,7 @@ static void test_rt_caps(void)
{
NULL,
DDSCAPS_TEXTURE | DDSCAPS_3DDEVICE,
DDSCAPS_TEXTURE | DDSCAPS_3DDEVICE | DDSCAPS_SYSTEMMEMORY,
{DDSCAPS_TEXTURE | DDSCAPS_3DDEVICE | DDSCAPS_SYSTEMMEMORY},
DDSCAPS2_TEXTUREMANAGE,
DDSCAPS2_TEXTUREMANAGE,
D3DERR_SURFACENOTINVIDMEM,
@ -6498,7 +6574,7 @@ static void test_rt_caps(void)
{
NULL,
DDSCAPS_TEXTURE | DDSCAPS_3DDEVICE,
DDSCAPS_TEXTURE | DDSCAPS_3DDEVICE | DDSCAPS_SYSTEMMEMORY,
{DDSCAPS_TEXTURE | DDSCAPS_3DDEVICE | DDSCAPS_SYSTEMMEMORY},
DDSCAPS2_D3DTEXTUREMANAGE,
DDSCAPS2_D3DTEXTUREMANAGE,
D3DERR_SURFACENOTINVIDMEM,
@ -6508,7 +6584,7 @@ static void test_rt_caps(void)
{
&p8_fmt,
0,
DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM,
{DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM},
0,
0,
DDERR_INVALIDCAPS,
@ -6518,7 +6594,7 @@ static void test_rt_caps(void)
{
&p8_fmt,
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_3DDEVICE,
~0U /* AMD r200 */,
{~0u /* AMD r200 */, DDSCAPS_OFFSCREENPLAIN | DDSCAPS_3DDEVICE | DDSCAPS_SYSTEMMEMORY},
0,
0,
DDERR_NOPALETTEATTACHED,
@ -6528,7 +6604,8 @@ static void test_rt_caps(void)
{
&p8_fmt,
DDSCAPS_OFFSCREENPLAIN,
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM,
{DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM,
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY},
0,
0,
DDERR_INVALIDCAPS,
@ -6538,7 +6615,7 @@ static void test_rt_caps(void)
{
&p8_fmt,
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE,
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE,
{DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE},
0,
0,
DDERR_NOPALETTEATTACHED,
@ -6548,7 +6625,7 @@ static void test_rt_caps(void)
{
&p8_fmt,
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY,
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY,
{DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY},
0,
0,
DDERR_INVALIDCAPS,
@ -6558,7 +6635,7 @@ static void test_rt_caps(void)
{
&z_fmt,
DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY | DDSCAPS_ZBUFFER,
DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY | DDSCAPS_ZBUFFER | DDSCAPS_LOCALVIDMEM,
{DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY | DDSCAPS_ZBUFFER | DDSCAPS_LOCALVIDMEM},
0,
0,
DDERR_INVALIDCAPS,
@ -6568,7 +6645,8 @@ static void test_rt_caps(void)
{
&z_fmt,
DDSCAPS_3DDEVICE | DDSCAPS_ZBUFFER,
DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY | DDSCAPS_ZBUFFER | DDSCAPS_LOCALVIDMEM,
{DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY | DDSCAPS_ZBUFFER | DDSCAPS_LOCALVIDMEM,
DDSCAPS_3DDEVICE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_ZBUFFER},
0,
0,
DDERR_INVALIDCAPS,
@ -6578,7 +6656,8 @@ static void test_rt_caps(void)
{
&z_fmt,
DDSCAPS_ZBUFFER,
DDSCAPS_VIDEOMEMORY | DDSCAPS_ZBUFFER | DDSCAPS_LOCALVIDMEM,
{DDSCAPS_VIDEOMEMORY | DDSCAPS_ZBUFFER | DDSCAPS_LOCALVIDMEM,
DDSCAPS_SYSTEMMEMORY | DDSCAPS_ZBUFFER},
0,
0,
DDERR_INVALIDCAPS,
@ -6588,7 +6667,7 @@ static void test_rt_caps(void)
{
&z_fmt,
DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE | DDSCAPS_ZBUFFER,
DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE | DDSCAPS_ZBUFFER,
{DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE | DDSCAPS_ZBUFFER},
0,
0,
DDERR_INVALIDCAPS,
@ -6598,7 +6677,7 @@ static void test_rt_caps(void)
{
&z_fmt,
DDSCAPS_SYSTEMMEMORY | DDSCAPS_ZBUFFER,
DDSCAPS_SYSTEMMEMORY | DDSCAPS_ZBUFFER,
{DDSCAPS_SYSTEMMEMORY | DDSCAPS_ZBUFFER},
0,
0,
DDERR_INVALIDCAPS,
@ -6607,11 +6686,13 @@ static void test_rt_caps(void)
},
};
software_device = is_software_device_type(device_guid);
window = create_window();
ddraw = create_ddraw();
ok(!!ddraw, "Failed to create a ddraw object.\n");
hr = IDirectDraw4_SetCooperativeLevel(ddraw, window, DDSCL_NORMAL);
ok(SUCCEEDED(hr), "Failed to set cooperative level, hr %#x.\n", hr);
ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
if (FAILED(IDirectDraw4_QueryInterface(ddraw, &IID_IDirect3D3, (void **)&d3d)))
{
@ -6620,17 +6701,17 @@ static void test_rt_caps(void)
}
memset(&z_fmt, 0, sizeof(z_fmt));
hr = IDirect3D3_EnumZBufferFormats(d3d, &IID_IDirect3DHALDevice, enum_z_fmt, &z_fmt);
hr = IDirect3D3_EnumZBufferFormats(d3d, device_guid, enum_z_fmt, &z_fmt);
if (FAILED(hr) || !z_fmt.dwSize)
{
skip("No depth buffer formats available, skipping test.\n");
skip("No depth buffer formats available, software_device %u, skipping test.\n", software_device);
IDirect3D3_Release(d3d);
goto done;
}
memset(palette_entries, 0, sizeof(palette_entries));
hr = IDirectDraw4_CreatePalette(ddraw, DDPCAPS_ALLOW256 | DDPCAPS_8BIT, palette_entries, &palette, NULL);
ok(SUCCEEDED(hr), "Failed to create palette, hr %#x.\n", hr);
ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
for (i = 0; i < ARRAY_SIZE(test_data); ++i)
{
@ -6651,34 +6732,71 @@ static void test_rt_caps(void)
surface_desc.dwWidth = 640;
surface_desc.dwHeight = 480;
hr = IDirectDraw4_CreateSurface(ddraw, &surface_desc, &surface, NULL);
ok(SUCCEEDED(hr), "Test %u: Failed to create surface with caps %#x and caps2 %#x, hr %#x.\n",
i, test_data[i].caps_in, test_data[i].caps2_in, hr);
if (surface_desc.ddsCaps.dwCaps & DDSCAPS_VIDEOMEMORY && hr == DDERR_NODIRECTDRAWHW)
{
skip("No 3d hardware, skipping test %u, software_device %u.\n", i, software_device);
continue;
}
ok(hr == DD_OK || (software_device && (surface_desc.ddsCaps.dwCaps & (DDSCAPS_VIDEOMEMORY | DDSCAPS_ZBUFFER))
== (DDSCAPS_VIDEOMEMORY | DDSCAPS_ZBUFFER) && hr == DDERR_UNSUPPORTED)
|| broken(software_device && test_data[i].pf == &p8_fmt && hr == DDERR_INVALIDPIXELFORMAT),
"Got unexpected hr %#x, test %u, software_device %u.\n", hr, i, software_device);
if (FAILED(hr))
continue;
memset(&surface_desc, 0, sizeof(surface_desc));
surface_desc.dwSize = sizeof(surface_desc);
hr = IDirectDrawSurface4_GetSurfaceDesc(surface, &surface_desc);
ok(SUCCEEDED(hr), "Test %u: Failed to get surface desc, hr %#x.\n", i, hr);
ok(test_data[i].caps_out == ~0U || surface_desc.ddsCaps.dwCaps == test_data[i].caps_out,
"Test %u: Got unexpected caps %#x, expected %#x.\n",
i, surface_desc.ddsCaps.dwCaps, test_data[i].caps_out);
ok(surface_desc.ddsCaps.dwCaps2 == test_data[i].caps2_out,
"Test %u: Got unexpected caps2 %#x, expected %#x.\n",
i, surface_desc.ddsCaps.dwCaps2, test_data[i].caps2_out);
ok(hr == DD_OK, "Got unexpected hr %#x, test %u, software_device %u.\n", hr, i, software_device);
hr = IDirect3D3_CreateDevice(d3d, &IID_IDirect3DHALDevice, surface, &device, NULL);
ok(hr == test_data[i].create_device_hr, "Test %u: Got unexpected hr %#x, expected %#x.\n",
i, hr, test_data[i].create_device_hr);
if (software_device)
{
expected_caps = test_data[i].caps_out[software_device]
? test_data[i].caps_out[software_device] : test_data[i].caps_out[0];
ok(surface_desc.ddsCaps.dwCaps == expected_caps
|| surface_desc.ddsCaps.dwCaps == test_data[i].caps_out[0],
"Got unexpected caps %#x, test %u, software_device %u.\n",
surface_desc.ddsCaps.dwCaps, i, software_device);
}
else
{
ok(test_data[i].caps_out[0] == ~0u || surface_desc.ddsCaps.dwCaps == test_data[i].caps_out[0],
"Got unexpected caps %#x, expected %#x, test %u, software_device %u.\n",
surface_desc.ddsCaps.dwCaps, test_data[i].caps_out[0], i, software_device);
}
ok(surface_desc.ddsCaps.dwCaps2 == test_data[i].caps2_out,
"Got unexpected caps2 %#x, expected %#x, test %u, software_device %u.\n",
surface_desc.ddsCaps.dwCaps2, test_data[i].caps2_out, i, software_device);
hr = IDirect3D3_CreateDevice(d3d, device_guid, surface, &device, NULL);
todo_wine_if(software_device && test_data[i].create_device_hr == D3DERR_SURFACENOTINVIDMEM)
ok((!software_device && hr == test_data[i].create_device_hr)
|| (software_device && (hr == (test_data[i].create_device_hr == D3DERR_SURFACENOTINVIDMEM
? DD_OK : test_data[i].create_device_hr))),
"Got unexpected hr %#x, test %u, software_device %u.\n", hr, i, software_device);
if (FAILED(hr))
{
if (hr == DDERR_NOPALETTEATTACHED)
{
hr = IDirectDrawSurface4_SetPalette(surface, palette);
ok(SUCCEEDED(hr), "Test %u: Failed to set palette, hr %#x.\n", i, hr);
hr = IDirect3D3_CreateDevice(d3d, &IID_IDirect3DHALDevice, surface, &device, NULL);
ok(hr == DD_OK, "Got unexpected hr %#x, test %u, software_device %u.\n", hr, i, software_device);
if (software_device)
{
/* _CreateDevice succeeds with software device, but the palette gets extra reference
* on Windows (probably due to a bug) which doesn't go away on the device and surface
* destruction and ddraw is not destroyed cleanly, so skipping this test. */
IDirectDrawSurface4_Release(surface);
continue;
}
hr = IDirect3D3_CreateDevice(d3d, device_guid, surface, &device, NULL);
if (surface_desc.ddsCaps.dwCaps & DDSCAPS_VIDEOMEMORY)
ok(hr == DDERR_INVALIDPIXELFORMAT, "Test %u: Got unexpected hr %#x.\n", i, hr);
ok(hr == DDERR_INVALIDPIXELFORMAT, "Got unexpected hr %#x, test %u, software_device %u.\n",
hr, i, software_device);
else
ok(hr == D3DERR_SURFACENOTINVIDMEM, "Test %u: Got unexpected hr %#x.\n", i, hr);
ok(hr == D3DERR_SURFACENOTINVIDMEM, "Got unexpected hr %#x, test %u, software_device %u.\n",
hr, i, software_device);
}
IDirectDrawSurface4_Release(surface);
@ -6689,10 +6807,10 @@ static void test_rt_caps(void)
surface_desc.dwWidth = 640;
surface_desc.dwHeight = 480;
hr = IDirectDraw4_CreateSurface(ddraw, &surface_desc, &surface, NULL);
ok(SUCCEEDED(hr), "Test %u: Failed to create surface, hr %#x.\n", i, hr);
ok(hr == DD_OK, "Got unexpected hr %#x, test %u, software_device %u.\n", hr, i, software_device);
hr = IDirect3D3_CreateDevice(d3d, &IID_IDirect3DHALDevice, surface, &device, NULL);
ok(SUCCEEDED(hr), "Test %u: Failed to create device, hr %#x.\n", i, hr);
hr = IDirect3D3_CreateDevice(d3d, device_guid, surface, &device, NULL);
ok(hr == DD_OK, "Got unexpected hr %#x, test %u, software_device %u.\n", hr, i, software_device);
}
memset(&surface_desc, 0, sizeof(surface_desc));
@ -6708,21 +6826,21 @@ static void test_rt_caps(void)
surface_desc.dwWidth = 640;
surface_desc.dwHeight = 480;
hr = IDirectDraw4_CreateSurface(ddraw, &surface_desc, &rt, NULL);
ok(SUCCEEDED(hr), "Test %u: Failed to create surface with caps %#x, hr %#x.\n",
i, test_data[i].caps_in, hr);
ok(hr == DD_OK, "Got unexpected hr %#x, test %u, software_device %u.\n", hr, i, software_device);
hr = IDirect3DDevice3_SetRenderTarget(device, rt, 0);
ok(hr == test_data[i].set_rt_hr || broken(hr == test_data[i].alternative_set_rt_hr),
"Test %u: Got unexpected hr %#x, expected %#x.\n",
i, hr, test_data[i].set_rt_hr);
ok(hr == test_data[i].set_rt_hr || (software_device && hr == DDERR_NOPALETTEATTACHED)
|| broken(hr == test_data[i].alternative_set_rt_hr),
"Got unexpected hr %#x, test %u, software_device %u.\n",
hr, i, software_device);
if (SUCCEEDED(hr) || hr == DDERR_INVALIDPIXELFORMAT)
expected_rt = rt;
else
expected_rt = surface;
hr = IDirect3DDevice3_GetRenderTarget(device, &tmp);
ok(SUCCEEDED(hr), "Test %u: Failed to get render target, hr %#x.\n", i, hr);
ok(tmp == expected_rt, "Test %u: Got unexpected rt %p.\n", i, tmp);
ok(hr == DD_OK, "Got unexpected hr %#x, test %u, software_device %u.\n", hr, i, software_device);
ok(tmp == expected_rt, "Got unexpected rt %p, test %u, software_device %u.\n", tmp, i, software_device);
IDirectDrawSurface4_Release(tmp);
IDirectDrawSurface4_Release(rt);
@ -6732,7 +6850,8 @@ static void test_rt_caps(void)
ok(refcount == 0, "Test %u: The surface was not properly freed, refcount %u.\n", i, refcount);
}
IDirectDrawPalette_Release(palette);
refcount = IDirectDrawPalette_Release(palette);
ok(!refcount, "Got unexpected refcount %u.\n", refcount);
IDirect3D3_Release(d3d);
done:
@ -18271,6 +18390,12 @@ done:
IDirectDraw4_Release(ddraw);
}
static void run_for_each_device_type(void (*test_func)(const GUID *))
{
test_func(&IID_IDirect3DHALDevice);
test_func(&IID_IDirect3DRGBDevice);
}
START_TEST(ddraw4)
{
DDDEVICEIDENTIFIER identifier;
@ -18343,7 +18468,7 @@ START_TEST(ddraw4)
test_texturemanage();
test_block_formats_creation();
test_unsupported_formats();
test_rt_caps();
run_for_each_device_type(test_rt_caps);
test_primary_caps();
test_surface_lock();
test_surface_discard();

View File

@ -30,6 +30,7 @@ HRESULT WINAPI GetSurfaceFromDC(HDC dc, struct IDirectDrawSurface **surface, HDC
static HRESULT (WINAPI *pDirectDrawCreateEx)(GUID *guid, void **ddraw, REFIID iid, IUnknown *outer_unknown);
static BOOL is_ddraw64 = sizeof(DWORD) != sizeof(DWORD *);
static DEVMODEW registry_mode;
static const GUID *hw_device_guid = &IID_IDirect3DHALDevice;
static HRESULT (WINAPI *pDwmIsCompositionEnabled)(BOOL *);
@ -190,6 +191,11 @@ static BOOL ddraw_is_amd(IDirectDraw7 *ddraw)
return ddraw_is_vendor(ddraw, 0x1002);
}
static BOOL is_software_device_type(const GUID *device_guid)
{
return device_guid != &IID_IDirect3DTnLHalDevice && device_guid != &IID_IDirect3DHALDevice;
}
static IDirectDrawSurface7 *create_overlay(IDirectDraw7 *ddraw,
unsigned int width, unsigned int height, DWORD format)
{
@ -2475,14 +2481,16 @@ static void test_window_style(void)
{
LONG style, exstyle, tmp, expected_style;
RECT fullscreen_rect, r;
HWND window, window2;
IDirectDraw7 *ddraw;
HWND window;
HRESULT hr;
ULONG ref;
BOOL ret;
window = CreateWindowA("static", "ddraw_test", WS_OVERLAPPEDWINDOW,
0, 0, 100, 100, 0, 0, 0, 0);
window2 = CreateWindowA("static", "ddraw_test", WS_OVERLAPPEDWINDOW | WS_VISIBLE,
0, 0, 50, 50, 0, 0, 0, 0);
ddraw = create_ddraw();
ok(!!ddraw, "Failed to create a ddraw object.\n");
@ -2526,6 +2534,68 @@ static void test_window_style(void)
tmp = GetWindowLongA(window, GWL_EXSTYLE);
ok(tmp == exstyle, "Expected window extended style %#x, got %#x.\n", exstyle, tmp);
ShowWindow(window, SW_SHOW);
ret = SetForegroundWindow(GetDesktopWindow());
ok(ret, "Failed to set foreground window.\n");
SetActiveWindow(window);
ok(GetActiveWindow() == window, "Unexpected active window.\n");
hr = IDirectDraw7_SetCooperativeLevel(ddraw, window, DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN);
ok(SUCCEEDED(hr), "SetCooperativeLevel failed, hr %#x.\n", hr);
tmp = GetWindowLongA(window, GWL_STYLE);
expected_style = style | WS_VISIBLE;
todo_wine ok(tmp == expected_style, "Expected window style %#x, got %#x.\n", expected_style, tmp);
tmp = GetWindowLongA(window, GWL_EXSTYLE);
todo_wine ok(tmp == exstyle, "Expected window extended style %#x, got %#x.\n", exstyle, tmp);
GetWindowRect(window, &r);
ok(EqualRect(&r, &fullscreen_rect), "Expected %s, got %s.\n",
wine_dbgstr_rect(&fullscreen_rect), wine_dbgstr_rect(&r));
hr = IDirectDraw7_SetCooperativeLevel(ddraw, window, DDSCL_NORMAL);
ok(SUCCEEDED(hr), "SetCooperativeLevel failed, hr %#x.\n", hr);
SetWindowPos(window, NULL, 0, 0, 100, 100, SWP_NOZORDER | SWP_NOACTIVATE);
GetWindowRect(window, &r);
ok(!EqualRect(&r, &fullscreen_rect), "Window resize failed? got %s.\n",
wine_dbgstr_rect(&r));
ret = SetForegroundWindow(window2);
ok(ret, "Failed to set foreground window.\n");
hr = IDirectDraw7_SetCooperativeLevel(ddraw, window, DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN);
ok(SUCCEEDED(hr), "SetCooperativeLevel failed, hr %#x.\n", hr);
tmp = GetWindowLongA(window, GWL_STYLE);
expected_style = style | WS_VISIBLE;
todo_wine ok(tmp == expected_style, "Expected window style %#x, got %#x.\n", expected_style, tmp);
tmp = GetWindowLongA(window, GWL_EXSTYLE);
todo_wine ok(tmp == exstyle, "Expected window extended style %#x, got %#x.\n", exstyle, tmp);
GetWindowRect(window, &r);
ok(EqualRect(&r, &fullscreen_rect), "Expected %s, got %s.\n",
wine_dbgstr_rect(&fullscreen_rect), wine_dbgstr_rect(&r));
ret = SetForegroundWindow(window);
ok(ret, "Failed to set foreground window.\n");
hr = IDirectDraw7_SetCooperativeLevel(ddraw, window, DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN);
ok(SUCCEEDED(hr), "SetCooperativeLevel failed, hr %#x.\n", hr);
tmp = GetWindowLongA(window, GWL_STYLE);
expected_style = style | WS_VISIBLE;
todo_wine ok(tmp == expected_style, "Expected window style %#x, got %#x.\n", expected_style, tmp);
tmp = GetWindowLongA(window, GWL_EXSTYLE);
expected_style = exstyle | WS_EX_TOPMOST;
todo_wine ok(tmp == expected_style, "Expected window extended style %#x, got %#x.\n", expected_style, tmp);
ShowWindow(window, SW_HIDE);
hr = IDirectDraw7_SetCooperativeLevel(ddraw, window, DDSCL_NORMAL);
ok(SUCCEEDED(hr), "SetCooperativeLevel failed, hr %#x.\n", hr);
tmp = GetWindowLongA(window, GWL_STYLE);
ok(tmp == style, "Expected window style %#x, got %#x.\n", style, tmp);
tmp = GetWindowLongA(window, GWL_EXSTYLE);
todo_wine ok(tmp == exstyle, "Expected window extended style %#x, got %#x.\n", exstyle, tmp);
ShowWindow(window, SW_SHOW);
hr = IDirectDraw7_SetCooperativeLevel(ddraw, window, DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN);
ok(SUCCEEDED(hr), "SetCooperativeLevel failed, hr %#x.\n", hr);
@ -2549,6 +2619,7 @@ static void test_window_style(void)
ref = IDirectDraw7_Release(ddraw);
ok(ref == 0, "The ddraw object was not properly freed: refcount %u.\n", ref);
DestroyWindow(window2);
DestroyWindow(window);
}
@ -6085,13 +6156,13 @@ static void test_unsupported_formats(void)
DestroyWindow(window);
}
static void test_rt_caps(void)
static void test_rt_caps(const GUID *device_guid)
{
const GUID *devtype = &IID_IDirect3DHALDevice;
PALETTEENTRY palette_entries[256];
IDirectDrawPalette *palette;
BOOL software_device;
DWORD expected_caps;
IDirectDraw7 *ddraw;
BOOL hal_ok = FALSE;
DDPIXELFORMAT z_fmt;
IDirect3D7 *d3d;
unsigned int i;
@ -6109,7 +6180,7 @@ static void test_rt_caps(void)
{
const DDPIXELFORMAT *pf;
DWORD caps_in;
DWORD caps_out;
DWORD caps_out[2];
DWORD caps2_in;
DWORD caps2_out;
HRESULT create_device_hr;
@ -6120,7 +6191,7 @@ static void test_rt_caps(void)
{
NULL,
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY,
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM,
{DDSCAPS_OFFSCREENPLAIN | DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM},
0,
0,
D3D_OK,
@ -6130,7 +6201,8 @@ static void test_rt_caps(void)
{
NULL,
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_3DDEVICE,
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM,
{DDSCAPS_OFFSCREENPLAIN | DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM,
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_3DDEVICE | DDSCAPS_SYSTEMMEMORY},
0,
0,
D3D_OK,
@ -6140,7 +6212,8 @@ static void test_rt_caps(void)
{
NULL,
DDSCAPS_OFFSCREENPLAIN,
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM,
{DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM,
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY},
0,
0,
DDERR_INVALIDCAPS,
@ -6150,7 +6223,7 @@ static void test_rt_caps(void)
{
NULL,
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE,
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE,
{DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE},
0,
0,
D3DERR_SURFACENOTINVIDMEM,
@ -6160,7 +6233,7 @@ static void test_rt_caps(void)
{
NULL,
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY,
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY,
{DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY},
0,
0,
DDERR_INVALIDCAPS,
@ -6170,7 +6243,7 @@ static void test_rt_caps(void)
{
NULL,
DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY,
DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM,
{DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM},
0,
0,
D3D_OK,
@ -6180,7 +6253,8 @@ static void test_rt_caps(void)
{
NULL,
DDSCAPS_3DDEVICE,
DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM,
{DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM,
DDSCAPS_3DDEVICE | DDSCAPS_SYSTEMMEMORY},
0,
0,
D3D_OK,
@ -6190,7 +6264,7 @@ static void test_rt_caps(void)
{
NULL,
0,
DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM,
{DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM, DDSCAPS_SYSTEMMEMORY},
0,
0,
DDERR_INVALIDCAPS,
@ -6200,7 +6274,7 @@ static void test_rt_caps(void)
{
NULL,
DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE,
DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE,
{DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE},
0,
0,
D3DERR_SURFACENOTINVIDMEM,
@ -6210,7 +6284,7 @@ static void test_rt_caps(void)
{
NULL,
DDSCAPS_SYSTEMMEMORY,
DDSCAPS_SYSTEMMEMORY,
{DDSCAPS_SYSTEMMEMORY},
0,
0,
DDERR_INVALIDCAPS,
@ -6220,7 +6294,7 @@ static void test_rt_caps(void)
{
NULL,
DDSCAPS_TEXTURE | DDSCAPS_3DDEVICE,
DDSCAPS_TEXTURE | DDSCAPS_3DDEVICE | DDSCAPS_SYSTEMMEMORY,
{DDSCAPS_TEXTURE | DDSCAPS_3DDEVICE | DDSCAPS_SYSTEMMEMORY},
DDSCAPS2_TEXTUREMANAGE,
DDSCAPS2_TEXTUREMANAGE,
D3DERR_SURFACENOTINVIDMEM,
@ -6230,7 +6304,7 @@ static void test_rt_caps(void)
{
NULL,
DDSCAPS_TEXTURE | DDSCAPS_3DDEVICE,
DDSCAPS_TEXTURE | DDSCAPS_3DDEVICE | DDSCAPS_SYSTEMMEMORY,
{DDSCAPS_TEXTURE | DDSCAPS_3DDEVICE | DDSCAPS_SYSTEMMEMORY},
DDSCAPS2_D3DTEXTUREMANAGE,
DDSCAPS2_D3DTEXTUREMANAGE,
D3DERR_SURFACENOTINVIDMEM,
@ -6240,7 +6314,7 @@ static void test_rt_caps(void)
{
&p8_fmt,
0,
DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM,
{DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM},
0,
0,
DDERR_INVALIDCAPS,
@ -6250,7 +6324,7 @@ static void test_rt_caps(void)
{
&p8_fmt,
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_3DDEVICE,
~0U /* AMD r200 */,
{~0u /* AMD r200 */, DDSCAPS_OFFSCREENPLAIN | DDSCAPS_3DDEVICE | DDSCAPS_SYSTEMMEMORY},
0,
0,
DDERR_NOPALETTEATTACHED,
@ -6260,7 +6334,8 @@ static void test_rt_caps(void)
{
&p8_fmt,
DDSCAPS_OFFSCREENPLAIN,
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM,
{DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM,
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY},
0,
0,
DDERR_INVALIDCAPS,
@ -6270,7 +6345,7 @@ static void test_rt_caps(void)
{
&p8_fmt,
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE,
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE,
{DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE},
0,
0,
DDERR_NOPALETTEATTACHED,
@ -6280,7 +6355,7 @@ static void test_rt_caps(void)
{
&p8_fmt,
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY,
DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY,
{DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY},
0,
0,
DDERR_INVALIDCAPS,
@ -6290,7 +6365,7 @@ static void test_rt_caps(void)
{
&z_fmt,
DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY | DDSCAPS_ZBUFFER,
DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY | DDSCAPS_ZBUFFER | DDSCAPS_LOCALVIDMEM,
{DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY | DDSCAPS_ZBUFFER | DDSCAPS_LOCALVIDMEM},
0,
0,
DDERR_INVALIDCAPS,
@ -6300,7 +6375,8 @@ static void test_rt_caps(void)
{
&z_fmt,
DDSCAPS_3DDEVICE | DDSCAPS_ZBUFFER,
DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY | DDSCAPS_ZBUFFER | DDSCAPS_LOCALVIDMEM,
{DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY | DDSCAPS_ZBUFFER | DDSCAPS_LOCALVIDMEM,
DDSCAPS_3DDEVICE | DDSCAPS_SYSTEMMEMORY | DDSCAPS_ZBUFFER},
0,
0,
DDERR_INVALIDCAPS,
@ -6310,7 +6386,8 @@ static void test_rt_caps(void)
{
&z_fmt,
DDSCAPS_ZBUFFER,
DDSCAPS_VIDEOMEMORY | DDSCAPS_ZBUFFER | DDSCAPS_LOCALVIDMEM,
{DDSCAPS_VIDEOMEMORY | DDSCAPS_ZBUFFER | DDSCAPS_LOCALVIDMEM,
DDSCAPS_SYSTEMMEMORY | DDSCAPS_ZBUFFER},
0,
0,
DDERR_INVALIDCAPS,
@ -6320,7 +6397,7 @@ static void test_rt_caps(void)
{
&z_fmt,
DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE | DDSCAPS_ZBUFFER,
DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE | DDSCAPS_ZBUFFER,
{DDSCAPS_SYSTEMMEMORY | DDSCAPS_3DDEVICE | DDSCAPS_ZBUFFER},
0,
0,
DDERR_INVALIDCAPS,
@ -6330,7 +6407,7 @@ static void test_rt_caps(void)
{
&z_fmt,
DDSCAPS_SYSTEMMEMORY | DDSCAPS_ZBUFFER,
DDSCAPS_SYSTEMMEMORY | DDSCAPS_ZBUFFER,
{DDSCAPS_SYSTEMMEMORY | DDSCAPS_ZBUFFER},
0,
0,
DDERR_INVALIDCAPS,
@ -6339,6 +6416,8 @@ static void test_rt_caps(void)
},
};
software_device = is_software_device_type(device_guid);
window = create_window();
ddraw = create_ddraw();
ok(!!ddraw, "Failed to create a ddraw object.\n");
@ -6351,23 +6430,18 @@ static void test_rt_caps(void)
goto done;
}
hr = IDirect3D7_EnumDevices(d3d, enum_devtype_cb, &hal_ok);
ok(SUCCEEDED(hr), "Failed to enumerate devices, hr %#x.\n", hr);
if (hal_ok)
devtype = &IID_IDirect3DTnLHalDevice;
memset(&z_fmt, 0, sizeof(z_fmt));
hr = IDirect3D7_EnumZBufferFormats(d3d, devtype, enum_z_fmt, &z_fmt);
hr = IDirect3D7_EnumZBufferFormats(d3d, device_guid, enum_z_fmt, &z_fmt);
if (FAILED(hr) || !z_fmt.dwSize)
{
skip("No depth buffer formats available, skipping test.\n");
skip("No depth buffer formats available, software_device %u, skipping test.\n", software_device);
IDirect3D7_Release(d3d);
goto done;
}
memset(palette_entries, 0, sizeof(palette_entries));
hr = IDirectDraw7_CreatePalette(ddraw, DDPCAPS_ALLOW256 | DDPCAPS_8BIT, palette_entries, &palette, NULL);
ok(SUCCEEDED(hr), "Failed to create palette, hr %#x.\n", hr);
ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
for (i = 0; i < ARRAY_SIZE(test_data); ++i)
{
@ -6388,34 +6462,68 @@ static void test_rt_caps(void)
surface_desc.dwWidth = 640;
surface_desc.dwHeight = 480;
hr = IDirectDraw7_CreateSurface(ddraw, &surface_desc, &surface, NULL);
ok(SUCCEEDED(hr), "Test %u: Failed to create surface with caps %#x and caps2 %#x, hr %#x.\n",
i, test_data[i].caps_in, test_data[i].caps2_in, hr);
if (surface_desc.ddsCaps.dwCaps & DDSCAPS_VIDEOMEMORY && hr == DDERR_NODIRECTDRAWHW)
{
skip("No 3d hardware, skipping test %u, software_device %u.\n", i, software_device);
continue;
}
ok(hr == DD_OK || (software_device && (surface_desc.ddsCaps.dwCaps & (DDSCAPS_VIDEOMEMORY | DDSCAPS_ZBUFFER))
== (DDSCAPS_VIDEOMEMORY | DDSCAPS_ZBUFFER) && hr == DDERR_UNSUPPORTED)
|| broken(software_device && test_data[i].pf == &p8_fmt && hr == DDERR_INVALIDPIXELFORMAT),
"Got unexpected hr %#x, test %u, software_device %u.\n", hr, i, software_device);
if (FAILED(hr))
continue;
memset(&surface_desc, 0, sizeof(surface_desc));
surface_desc.dwSize = sizeof(surface_desc);
hr = IDirectDrawSurface7_GetSurfaceDesc(surface, &surface_desc);
ok(SUCCEEDED(hr), "Test %u: Failed to get surface desc, hr %#x.\n", i, hr);
ok(test_data[i].caps_out == ~0U || surface_desc.ddsCaps.dwCaps == test_data[i].caps_out,
"Test %u: Got unexpected caps %#x, expected %#x.\n",
i, surface_desc.ddsCaps.dwCaps, test_data[i].caps_out);
ok(surface_desc.ddsCaps.dwCaps2 == test_data[i].caps2_out,
"Test %u: Got unexpected caps2 %#x, expected %#x.\n",
i, surface_desc.ddsCaps.dwCaps2, test_data[i].caps2_out);
ok(hr == DD_OK, "Got unexpected hr %#x, test %u, software_device %u.\n", hr, i, software_device);
hr = IDirect3D7_CreateDevice(d3d, devtype, surface, &device);
ok(hr == test_data[i].create_device_hr, "Test %u: Got unexpected hr %#x, expected %#x.\n",
i, hr, test_data[i].create_device_hr);
if (software_device)
{
expected_caps = test_data[i].caps_out[software_device]
? test_data[i].caps_out[software_device] : test_data[i].caps_out[0];
todo_wine_if(test_data[i].caps_out[software_device]
&& surface_desc.ddsCaps.dwCaps == test_data[i].caps_out[0])
ok(surface_desc.ddsCaps.dwCaps == expected_caps
|| broken(surface_desc.ddsCaps.dwCaps == test_data[i].caps_out[0]),
"Got unexpected caps %#x, test %u, software_device %u.\n",
surface_desc.ddsCaps.dwCaps, i, software_device);
}
else
{
ok(test_data[i].caps_out[0] == ~0u || surface_desc.ddsCaps.dwCaps == test_data[i].caps_out[0],
"Got unexpected caps %#x, expected %#x, test %u, software_device %u.\n",
surface_desc.ddsCaps.dwCaps, test_data[i].caps_out[0], i, software_device);
}
ok(surface_desc.ddsCaps.dwCaps2 == test_data[i].caps2_out,
"Got unexpected caps2 %#x, expected %#x, test %u, software_device %u.\n",
surface_desc.ddsCaps.dwCaps2, test_data[i].caps2_out, i, software_device);
hr = IDirect3D7_CreateDevice(d3d, device_guid, surface, &device);
todo_wine_if(software_device && test_data[i].create_device_hr == D3DERR_SURFACENOTINVIDMEM)
ok((!software_device && hr == test_data[i].create_device_hr)
|| (software_device && (hr == (test_data[i].create_device_hr == D3DERR_SURFACENOTINVIDMEM
? DD_OK : test_data[i].create_device_hr))),
"Got unexpected hr %#x, test %u, software_device %u.\n", hr, i, software_device);
if (FAILED(hr))
{
if (hr == DDERR_NOPALETTEATTACHED)
{
hr = IDirectDrawSurface7_SetPalette(surface, palette);
ok(SUCCEEDED(hr), "Test %u: Failed to set palette, hr %#x.\n", i, hr);
hr = IDirect3D7_CreateDevice(d3d, devtype, surface, &device);
ok(hr == DD_OK, "Got unexpected hr %#x, test %u, software_device %u.\n", hr, i, software_device);
hr = IDirect3D7_CreateDevice(d3d, device_guid, surface, &device);
if (surface_desc.ddsCaps.dwCaps & DDSCAPS_VIDEOMEMORY)
ok(hr == DDERR_INVALIDPIXELFORMAT, "Test %u: Got unexpected hr %#x.\n", i, hr);
ok(hr == DDERR_INVALIDPIXELFORMAT, "Got unexpected hr %#x, test %u, software_device %u.\n",
hr, i, software_device);
else if (software_device)
todo_wine
ok(hr == E_FAIL, "Got unexpected hr %#x, test %u, software_device %u.\n",
hr, i, software_device);
else
ok(hr == D3DERR_SURFACENOTINVIDMEM, "Test %u: Got unexpected hr %#x.\n", i, hr);
ok(hr == D3DERR_SURFACENOTINVIDMEM, "Got unexpected hr %#x, test %u, software_device %u.\n",
hr, i, software_device);
}
IDirectDrawSurface7_Release(surface);
@ -6426,10 +6534,10 @@ static void test_rt_caps(void)
surface_desc.dwWidth = 640;
surface_desc.dwHeight = 480;
hr = IDirectDraw7_CreateSurface(ddraw, &surface_desc, &surface, NULL);
ok(SUCCEEDED(hr), "Test %u: Failed to create surface, hr %#x.\n", i, hr);
ok(hr == DD_OK, "Got unexpected hr %#x, test %u, software_device %u.\n", hr, i, software_device);
hr = IDirect3D7_CreateDevice(d3d, devtype, surface, &device);
ok(SUCCEEDED(hr), "Test %u: Failed to create device, hr %#x.\n", i, hr);
hr = IDirect3D7_CreateDevice(d3d, device_guid, surface, &device);
ok(hr == DD_OK, "Got unexpected hr %#x, test %u, software_device %u.\n", hr, i, software_device);
}
memset(&surface_desc, 0, sizeof(surface_desc));
@ -6445,21 +6553,21 @@ static void test_rt_caps(void)
surface_desc.dwWidth = 640;
surface_desc.dwHeight = 480;
hr = IDirectDraw7_CreateSurface(ddraw, &surface_desc, &rt, NULL);
ok(SUCCEEDED(hr), "Test %u: Failed to create surface with caps %#x, hr %#x.\n",
i, test_data[i].caps_in, hr);
ok(hr == DD_OK, "Got unexpected hr %#x, test %u, software_device %u.\n", hr, i, software_device);
hr = IDirect3DDevice7_SetRenderTarget(device, rt, 0);
ok(hr == test_data[i].set_rt_hr || broken(hr == test_data[i].alternative_set_rt_hr),
"Test %u: Got unexpected hr %#x, expected %#x.\n",
i, hr, test_data[i].set_rt_hr);
ok(hr == test_data[i].set_rt_hr || (software_device && hr == DDERR_NOPALETTEATTACHED)
|| broken(hr == test_data[i].alternative_set_rt_hr),
"Got unexpected hr %#x, test %u, software_device %u.\n",
hr, i, software_device);
if (SUCCEEDED(hr) || hr == DDERR_INVALIDPIXELFORMAT)
expected_rt = rt;
else
expected_rt = surface;
hr = IDirect3DDevice7_GetRenderTarget(device, &tmp);
ok(SUCCEEDED(hr), "Test %u: Failed to get render target, hr %#x.\n", i, hr);
ok(tmp == expected_rt, "Test %u: Got unexpected rt %p.\n", i, tmp);
ok(hr == DD_OK, "Got unexpected hr %#x, test %u, software_device %u.\n", hr, i, software_device);
ok(tmp == expected_rt, "Got unexpected rt %p, test %u, software_device %u.\n", tmp, i, software_device);
IDirectDrawSurface7_Release(tmp);
IDirectDrawSurface7_Release(rt);
@ -6469,7 +6577,8 @@ static void test_rt_caps(void)
ok(refcount == 0, "Test %u: The surface was not properly freed, refcount %u.\n", i, refcount);
}
IDirectDrawPalette_Release(palette);
refcount = IDirectDrawPalette_Release(palette);
ok(!refcount, "Got unexpected refcount %u.\n", refcount);
IDirect3D7_Release(d3d);
done:
@ -18533,12 +18642,21 @@ done:
IDirectDraw7_Release(ddraw);
}
static void run_for_each_device_type(void (*test_func)(const GUID *))
{
test_func(hw_device_guid);
test_func(&IID_IDirect3DRGBDevice);
}
START_TEST(ddraw7)
{
DDDEVICEIDENTIFIER2 identifier;
HMODULE module, dwmapi;
DEVMODEW current_mode;
IDirectDraw7 *ddraw;
IDirect3D7 *d3d;
BOOL hal_ok;
HRESULT hr;
module = GetModuleHandleA("ddraw.dll");
if (!(pDirectDrawCreateEx = (void *)GetProcAddress(module, "DirectDrawCreateEx")))
@ -18561,6 +18679,20 @@ START_TEST(ddraw7)
HIWORD(U(identifier.liDriverVersion).HighPart), LOWORD(U(identifier.liDriverVersion).HighPart),
HIWORD(U(identifier.liDriverVersion).LowPart), LOWORD(U(identifier.liDriverVersion).LowPart));
}
if (IDirectDraw7_QueryInterface(ddraw, &IID_IDirect3D7, (void **)&d3d) == DD_OK)
{
hr = IDirect3D7_EnumDevices(d3d, enum_devtype_cb, &hal_ok);
ok(hr == DD_OK, "Got unexpected hr %#x.\n", hr);
if (hal_ok)
hw_device_guid = &IID_IDirect3DTnLHalDevice;
IDirectDraw7_Release(d3d);
}
else
{
trace("D3D interface is not available.\n");
}
IDirectDraw7_Release(ddraw);
memset(&current_mode, 0, sizeof(current_mode));
@ -18612,7 +18744,7 @@ START_TEST(ddraw7)
test_texturemanage();
test_block_formats_creation();
test_unsupported_formats();
test_rt_caps();
run_for_each_device_type(test_rt_caps);
test_primary_caps();
test_surface_lock();
test_surface_discard();

View File

@ -1,5 +1,5 @@
MODULE = dhtmled.ocx
IMPORTS = uuid
IMPORTS = uuid ole32 user32 gdi32
EXTRADLLFLAGS = -mno-cygwin

View File

@ -1,5 +1,6 @@
/*
* Copyright 2017 Alex Henrie
* Copyright 2021 Vijay Kiran Kamuju
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@ -29,7 +30,9 @@ typedef struct
IDHTMLEdit IDHTMLEdit_iface;
IOleObject IOleObject_iface;
IPersistStreamInit IPersistStreamInit_iface;
IOleControl IOleControl_iface;
IOleClientSite *client_site;
SIZEL extent;
LONG ref;
} DHTMLEditImpl;
@ -48,6 +51,11 @@ static inline DHTMLEditImpl *impl_from_IPersistStreamInit(IPersistStreamInit *if
return CONTAINING_RECORD(iface, DHTMLEditImpl, IPersistStreamInit_iface);
}
static inline DHTMLEditImpl *impl_from_IOleControl(IOleControl *iface)
{
return CONTAINING_RECORD(iface, DHTMLEditImpl, IOleControl_iface);
}
static ULONG dhtml_edit_addref(DHTMLEditImpl *This)
{
LONG ref = InterlockedIncrement(&This->ref);
@ -81,6 +89,12 @@ static HRESULT dhtml_edit_qi(DHTMLEditImpl *This, REFIID iid, void **out)
*out = &This->IPersistStreamInit_iface;
return S_OK;
}
else if(IsEqualGUID(iid, &IID_IOleControl))
{
dhtml_edit_addref(This);
*out = &This->IOleControl_iface;
return S_OK;
}
*out = NULL;
ERR("no interface for %s\n", debugstr_guid(iid));
@ -177,7 +191,7 @@ static HRESULT WINAPI DHTMLEdit_NewDocument(IDHTMLEdit *iface)
{
DHTMLEditImpl *This = impl_from_IDHTMLEdit(iface);
FIXME("(%p)->() stub\n", This);
return E_NOTIMPL;
return S_OK;
}
static HRESULT WINAPI DHTMLEdit_LoadURL(IDHTMLEdit *iface, BSTR url)
@ -700,15 +714,25 @@ static HRESULT WINAPI OleObject_GetUserType(IOleObject *iface, DWORD type_type,
static HRESULT WINAPI OleObject_SetExtent(IOleObject *iface, DWORD aspect, SIZEL *size_limit)
{
DHTMLEditImpl *This = impl_from_IOleObject(iface);
FIXME("(%p)->(%u, %p) stub\n", This, aspect, size_limit);
return E_NOTIMPL;
TRACE("(%p)->(%u, %p)\n", This, aspect, size_limit);
if(aspect != DVASPECT_CONTENT)
return DV_E_DVASPECT;
This->extent = *size_limit;
return S_OK;
}
static HRESULT WINAPI OleObject_GetExtent(IOleObject *iface, DWORD aspect, SIZEL *size_limit)
{
DHTMLEditImpl *This = impl_from_IOleObject(iface);
FIXME("(%p)->(%u, %p) stub\n", This, aspect, size_limit);
return E_NOTIMPL;
TRACE("(%p)->(%u, %p)\n", This, aspect, size_limit);
if(aspect != DVASPECT_CONTENT)
return E_FAIL;
*size_limit = This->extent;
return S_OK;
}
static HRESULT WINAPI OleObject_Advise(IOleObject *iface, IAdviseSink *sink, DWORD *conn)
@ -737,9 +761,9 @@ static HRESULT WINAPI OleObject_EnumAdvise(IOleObject *iface, IEnumSTATDATA **ad
static HRESULT WINAPI OleObject_GetMiscStatus(IOleObject *iface, DWORD aspect, DWORD *status)
{
DHTMLEditImpl *This = impl_from_IOleObject(iface);
FIXME("(%p)->(%u, %p) stub\n", This, aspect, status);
*status = 0;
return E_NOTIMPL;
TRACE("(%p)->(%u, %p)\n", This, aspect, status);
return OleRegGetMiscStatus(&CLSID_DHTMLEdit, aspect, status);
}
static HRESULT WINAPI OleObject_SetColorScheme(IOleObject *iface, LOGPALETTE *palette)
@ -846,9 +870,64 @@ static const IPersistStreamInitVtbl PersistStreamInitVtbl = {
PersistStreamInit_InitNew
};
static HRESULT WINAPI OleControl_QueryInterface(IOleControl *iface, REFIID iid, void **out)
{
return dhtml_edit_qi(impl_from_IOleControl(iface), iid, out);
}
static ULONG WINAPI OleControl_AddRef(IOleControl *iface)
{
return dhtml_edit_addref(impl_from_IOleControl(iface));
}
static ULONG WINAPI OleControl_Release(IOleControl *iface)
{
return dhtml_edit_release(impl_from_IOleControl(iface));
}
static HRESULT WINAPI OleControl_GetControlInfo(IOleControl *iface, CONTROLINFO *pCI)
{
DHTMLEditImpl *This = impl_from_IOleControl(iface);
FIXME("(%p)->(%p)\n", This, pCI);
return E_NOTIMPL;
}
static HRESULT WINAPI OleControl_OnMnemonic(IOleControl *iface, MSG *msg)
{
DHTMLEditImpl *This = impl_from_IOleControl(iface);
FIXME("(%p)->(%p)\n", This, msg);
return E_NOTIMPL;
}
static HRESULT WINAPI OleControl_OnAmbientPropertyChange(IOleControl *iface, DISPID dispID)
{
DHTMLEditImpl *This = impl_from_IOleControl(iface);
FIXME("(%p)->(%d)\n", This, dispID);
return E_NOTIMPL;
}
static HRESULT WINAPI OleControl_FreezeEvents(IOleControl *iface, BOOL freeze)
{
DHTMLEditImpl *This = impl_from_IOleControl(iface);
FIXME("(%p)->(%x)\n", This, freeze);
return E_NOTIMPL;
}
static const IOleControlVtbl OleControlVtbl = {
OleControl_QueryInterface,
OleControl_AddRef,
OleControl_Release,
OleControl_GetControlInfo,
OleControl_OnMnemonic,
OleControl_OnAmbientPropertyChange,
OleControl_FreezeEvents
};
HRESULT dhtml_edit_create(REFIID iid, void **out)
{
DHTMLEditImpl *This;
DWORD dpi_x, dpi_y;
HDC hdc;
HRESULT ret;
TRACE("(%s, %p)\n", debugstr_guid(iid), out);
@ -860,9 +939,18 @@ HRESULT dhtml_edit_create(REFIID iid, void **out)
This->IDHTMLEdit_iface.lpVtbl = &DHTMLEditVtbl;
This->IOleObject_iface.lpVtbl = &OleObjectVtbl;
This->IPersistStreamInit_iface.lpVtbl = &PersistStreamInitVtbl;
This->IOleControl_iface.lpVtbl = &OleControlVtbl;
This->client_site = NULL;
This->ref = 1;
hdc = GetDC(0);
dpi_x = GetDeviceCaps(hdc, LOGPIXELSX);
dpi_y = GetDeviceCaps(hdc, LOGPIXELSY);
ReleaseDC(0, hdc);
This->extent.cx = MulDiv(192, 2540, dpi_x);
This->extent.cy = MulDiv(192, 2540, dpi_y);
ret = IDHTMLEdit_QueryInterface(&This->IDHTMLEdit_iface, iid, out);
IDHTMLEdit_Release(&This->IDHTMLEdit_iface);
return ret;

View File

@ -1268,8 +1268,10 @@ static HRESULT WINAPI IDirectInput8WImpl_EnumDevicesBySemantics(
if (lpCallback(&didevis[i], lpdid, callbackFlags, --remain, pvRef) == DIENUM_STOP)
{
HeapFree(GetProcessHeap(), 0, didevis);
IDirectInputDevice_Release(lpdid);
return DI_OK;
}
IDirectInputDevice_Release(lpdid);
}
HeapFree(GetProcessHeap(), 0, didevis);
@ -1287,7 +1289,11 @@ static HRESULT WINAPI IDirectInput8WImpl_EnumDevicesBySemantics(
IDirectInputDevice_GetDeviceInfo(lpdid, &didevi);
if (lpCallback(&didevi, lpdid, callbackFlags, --remain, pvRef) == DIENUM_STOP)
{
IDirectInputDevice_Release(lpdid);
return DI_OK;
}
IDirectInputDevice_Release(lpdid);
}
}
@ -1861,6 +1867,7 @@ static BOOL check_hook_thread(void)
{
static HANDLE hook_thread;
HMODULE module;
HANDLE wait_handle = NULL;
EnterCriticalSection(&dinput_hook_crit);
@ -1884,11 +1891,17 @@ static BOOL check_hook_thread(void)
hook_thread_id = 0;
PostThreadMessageW(tid, WM_USER+0x10, 0, 0);
CloseHandle(hook_thread);
wait_handle = hook_thread;
hook_thread = NULL;
}
LeaveCriticalSection(&dinput_hook_crit);
if (wait_handle)
{
WaitForSingleObject(wait_handle, INFINITE);
CloseHandle(wait_handle);
}
return hook_thread_id != 0;
}

View File

@ -126,9 +126,19 @@ static HRESULT WINAPI IDirectPlay8ServerImpl_EnumServiceProviders(IDirectPlay8Se
PDWORD pcReturned, DWORD dwFlags)
{
IDirectPlay8ServerImpl *This = impl_from_IDirectPlay8Server(iface);
FIXME("(%p)->(%s %s %p %p %p %d)\n", This, debugstr_guid(pguidServiceProvider), debugstr_guid(pguidApplication),
TRACE("(%p)->(%s %s %p %p %p %d)\n", This, debugstr_guid(pguidServiceProvider), debugstr_guid(pguidApplication),
pSPInfoBuffer, pcbEnumData, pcReturned, dwFlags);
return E_NOTIMPL;
if(!This->msghandler)
return DPNERR_UNINITIALIZED;
if(dwFlags)
FIXME("Unhandled flags %x\n", dwFlags);
if(pguidApplication)
FIXME("Application guid %s is currently being ignored\n", debugstr_guid(pguidApplication));
return enum_services_providers(pguidServiceProvider, pSPInfoBuffer, pcbEnumData, pcReturned);
}
static HRESULT WINAPI IDirectPlay8ServerImpl_CancelAsyncOperation(IDirectPlay8Server *iface, DPNHANDLE hAsyncHandle, DWORD dwFlags)

View File

@ -184,6 +184,91 @@ static void test_server_info(void)
}
}
static void test_enum_service_providers(void)
{
DPN_SERVICE_PROVIDER_INFO *serv_prov_info = NULL;
IDirectPlay8Server *server = NULL;
DWORD items, size;
DWORD i;
HRESULT hr;
hr = CoCreateInstance( &CLSID_DirectPlay8Server, NULL, CLSCTX_ALL, &IID_IDirectPlay8Server, (LPVOID*)&server);
ok(hr == S_OK, "Failed to create IDirectPlay8Server object\n");
if (FAILED(hr))
return;
size = 0;
items = 0;
hr = IDirectPlay8Server_EnumServiceProviders(server, NULL, NULL, serv_prov_info, &size, &items, 0);
ok(hr == DPNERR_UNINITIALIZED, "got %x\n", hr);
hr = IDirectPlay8Server_Initialize(server, NULL, DirectPlayMessageHandler, 0);
ok(hr == S_OK, "got 0x%08x\n", hr);
if (FAILED(hr))
{
IDirectPlay8Server_Release(server);
return;
}
size = 0;
items = 0;
hr = IDirectPlay8Server_EnumServiceProviders(server, NULL, NULL, NULL, &size, NULL, 0);
ok(hr == E_POINTER, "IDirectPlay8Server_EnumServiceProviders failed with %x\n", hr);
hr = IDirectPlay8Server_EnumServiceProviders(server, NULL, NULL, NULL, NULL, &items, 0);
ok(hr == E_POINTER, "IDirectPlay8Server_EnumServiceProviders failed with %x\n", hr);
hr = IDirectPlay8Server_EnumServiceProviders(server, NULL, NULL, NULL, &size, &items, 0);
ok(hr == DPNERR_BUFFERTOOSMALL, "IDirectPlay8Server_EnumServiceProviders failed with %x\n", hr);
ok(size != 0, "size is unexpectedly 0\n");
serv_prov_info = HeapAlloc(GetProcessHeap(), 0, size);
hr = IDirectPlay8Server_EnumServiceProviders(server, NULL, NULL, serv_prov_info, &size, &items, 0);
ok(hr == S_OK, "IDirectPlay8Server_EnumServiceProviders failed with %x\n", hr);
ok(items != 0, "Found unexpectedly no service providers\n");
trace("number of items found: %d\n", items);
for (i=0;i<items;i++)
{
trace("Found Service Provider: %s\n", wine_dbgstr_w(serv_prov_info[i].pwszName));
trace("Found guid: %s\n", wine_dbgstr_guid(&serv_prov_info[i].guid));
}
ok(HeapFree(GetProcessHeap(), 0, serv_prov_info), "Failed freeing server provider info\n");
size = 0;
items = 0;
hr = IDirectPlay8Server_EnumServiceProviders(server, &CLSID_DP8SP_TCPIP, NULL, NULL, &size, &items, 0);
ok(hr == DPNERR_BUFFERTOOSMALL, "IDirectPlay8Server_EnumServiceProviders failed with %x\n", hr);
ok(size != 0, "size is unexpectedly 0\n");
serv_prov_info = HeapAlloc(GetProcessHeap(), 0, size);
hr = IDirectPlay8Server_EnumServiceProviders(server, &CLSID_DP8SP_TCPIP, NULL, serv_prov_info, &size, &items, 0);
ok(hr == S_OK, "IDirectPlay8Server_EnumServiceProviders failed with %x\n", hr);
ok(items != 0, "Found unexpectedly no adapter\n");
for (i=0;i<items;i++)
{
trace("Found adapter: %s\n", wine_dbgstr_w(serv_prov_info[i].pwszName));
trace("Found adapter guid: %s\n", wine_dbgstr_guid(&serv_prov_info[i].guid));
}
/* Invalid GUID */
items = 88;
hr = IDirectPlay8Server_EnumServiceProviders(server, &appguid, NULL, serv_prov_info, &size, &items, 0);
ok(hr == DPNERR_DOESNOTEXIST, "IDirectPlay8Peer_EnumServiceProviders failed with %x\n", hr);
ok(items == 88, "Found adapter %d\n", items);
HeapFree(GetProcessHeap(), 0, serv_prov_info);
IDirectPlay8Server_Release(server);
}
BOOL is_process_elevated(void)
{
HANDLE token;
@ -398,6 +483,7 @@ START_TEST(server)
create_server();
test_server_info();
test_enum_service_providers();
CoUninitialize();

View File

@ -296,8 +296,7 @@ static HRESULT WINAPI IDirectSoundBufferImpl_Play(IDirectSoundBuffer8 *iface, DW
if (This->state == STATE_STOPPED) {
This->leadin = TRUE;
This->state = STATE_STARTING;
} else if (This->state == STATE_STOPPING)
This->state = STATE_PLAYING;
}
for (i = 0; i < This->num_filters; i++) {
IMediaObject_Discontinuity(This->filters[i].obj, 0);
@ -317,9 +316,7 @@ static HRESULT WINAPI IDirectSoundBufferImpl_Stop(IDirectSoundBuffer8 *iface)
AcquireSRWLockExclusive(&This->lock);
if (This->state == STATE_PLAYING)
This->state = STATE_STOPPING;
else if (This->state == STATE_STARTING)
if (This->state == STATE_PLAYING || This->state == STATE_STARTING)
{
This->state = STATE_STOPPED;
DSOUND_CheckEvent(This, 0, 0);
@ -420,6 +417,8 @@ static HRESULT WINAPI IDirectSoundBufferImpl_GetStatus(IDirectSoundBuffer8 *ifac
if (This->playflags & DSBPLAY_LOOPING)
*status |= DSBSTATUS_LOOPING;
}
if (This->dsbd.dwFlags & DSBCAPS_LOCDEFER)
*status |= DSBSTATUS_LOCSOFTWARE;
ReleaseSRWLockShared(&This->lock);
TRACE("status=%x\n", *status);

View File

@ -593,11 +593,7 @@ static void DSOUND_MixToPrimary(const DirectSoundDevice *device, float *mix_buff
if (dsb->buflen && dsb->state) {
TRACE("Checking %p, frames=%d\n", dsb, frames);
AcquireSRWLockShared(&dsb->lock);
/* if buffer is stopping it is stopped now */
if (dsb->state == STATE_STOPPING) {
dsb->state = STATE_STOPPED;
DSOUND_CheckEvent(dsb, 0, 0);
} else if (dsb->state != STATE_STOPPED) {
if (dsb->state != STATE_STOPPED) {
/* if the buffer was starting, it must be playing now */
if (dsb->state == STATE_STARTING)

View File

@ -1809,6 +1809,79 @@ static void test_effects(void)
ok(!ref, "Got outstanding refcount %u.\n", ref);
}
static void test_AcquireResources(void)
{
IDirectSound8 *dsound;
IDirectSoundBuffer *primary, *secondary;
DSBUFFERDESC bufdesc;
WAVEFORMATEX fmt;
HRESULT hr;
hr = DirectSoundCreate8(NULL, &dsound, NULL);
ok(hr == DS_OK || hr == DSERR_NODRIVER, "Got hr %#x.\n", hr);
if (FAILED(hr))
return;
hr = IDirectSound8_SetCooperativeLevel(dsound, get_hwnd(), DSSCL_PRIORITY);
ok(hr == DS_OK, "Got hr %#x.\n", hr);
bufdesc.dwSize = sizeof(bufdesc);
bufdesc.dwFlags = DSBCAPS_GETCURRENTPOSITION2 | DSBCAPS_PRIMARYBUFFER;
bufdesc.dwBufferBytes = 0;
bufdesc.dwReserved = 0;
bufdesc.lpwfxFormat = NULL;
bufdesc.guid3DAlgorithm = GUID_NULL;
hr = IDirectSound8_CreateSoundBuffer(dsound, &bufdesc, &primary, NULL);
ok(hr == S_OK, "CreateSoundBuffer failed: %08x\n", hr);
if(hr != S_OK) {
IDirectSound_Release(dsound);
return;
}
fmt.wFormatTag = WAVE_FORMAT_PCM;
fmt.nChannels = 2;
fmt.nSamplesPerSec = 48000;
fmt.wBitsPerSample = 16;
fmt.nBlockAlign = fmt.nChannels * fmt.wBitsPerSample / 8;
fmt.nAvgBytesPerSec = fmt.nBlockAlign * fmt.nSamplesPerSec;
fmt.cbSize = 0;
bufdesc.lpwfxFormat = &fmt;
bufdesc.dwBufferBytes = fmt.nSamplesPerSec * fmt.nBlockAlign / 10;
bufdesc.dwFlags = DSBCAPS_LOCDEFER | DSBCAPS_CTRLVOLUME;
/* see if we can create one more */
hr = IDirectSound8_CreateSoundBuffer(dsound, &bufdesc, &secondary, NULL);
ok(hr == S_OK, "CreateSoundBuffer gave wrong error: %08x\n", hr);
if(hr == S_OK) {
DWORD status;
IDirectSoundBuffer8 *buffer8;
hr = IDirectSoundBuffer_QueryInterface(secondary, &IID_IDirectSoundBuffer8, (void **)&buffer8);
ok(hr == S_OK, "got: %08x\n", hr);
status = 0xFFFF;
hr = IDirectSoundBuffer8_GetStatus(buffer8, &status);
ok(hr == S_OK, "got: %08x\n", hr);
todo_wine ok(status == 0, "got: %08x\n", status);
hr = IDirectSoundBuffer8_AcquireResources(buffer8, 0, 0, NULL);
ok(hr == S_OK, "got: %08x\n", hr);
status = 0xFFFF;
hr = IDirectSoundBuffer8_GetStatus(buffer8, &status);
ok(hr == S_OK, "got: %08x\n", hr);
ok(status == DSBSTATUS_LOCSOFTWARE, "got: %08x\n", status);
IDirectSoundBuffer8_Release(buffer8);
IDirectSoundBuffer_Release(secondary);
}
IDirectSoundBuffer_Release(primary);
IDirectSound_Release(dsound);
}
START_TEST(dsound8)
{
DWORD cookie;
@ -1822,6 +1895,7 @@ START_TEST(dsound8)
test_hw_buffers();
test_first_device();
test_primary_flags();
test_AcquireResources();
hr = CoRegisterClassObject(&testdmo_clsid, (IUnknown *)&testdmo_cf,
CLSCTX_INPROC_SERVER, REGCLS_MULTIPLEUSE, &cookie);

View File

@ -286,7 +286,8 @@ BOOL WINAPI CPAcquireContext( HCRYPTPROV *ret_prov, LPSTR container, DWORD flags
{
case 0:
case 0 | CRYPT_MACHINE_KEYSET:
ret = read_key_container( name, flags );
if (!(ret = read_key_container( name, flags )))
SetLastError( NTE_BAD_KEYSET );
break;
case CRYPT_NEWKEYSET:
@ -941,7 +942,7 @@ BOOL WINAPI CPGetHashParam( HCRYPTPROV hprov, HCRYPTHASH hhash, DWORD param, BYT
SetLastError( ERROR_MORE_DATA );
return FALSE;
}
memcpy( data, hash->value, hash->len );
if (data) memcpy( data, hash->value, hash->len );
*len = hash->len;
return TRUE;

View File

@ -71,6 +71,19 @@ static void test_acquire_context(void)
/* test base DSS provider (PROV_DSS) */
SetLastError(0xdeadbeef);
result = CryptAcquireContextA(&hProv, NULL, NULL, PROV_DSS, 0);
if (!result)
{
ok(GetLastError() == NTE_BAD_KEYSET, "Expected NTE_BAD_KEYSET, got %08x\n", GetLastError());
SetLastError(0xdeadbeef);
result = CryptAcquireContextA(&hProv, NULL, NULL, PROV_DSS, CRYPT_NEWKEYSET);
}
ok(result, "CryptAcquireContextA succeeded\n");
result = CryptReleaseContext(hProv, 0);
ok(result, "CryptReleaseContext failed.\n");
result = CryptAcquireContextA(
&hProv, NULL, MS_DEF_DSS_PROV_A, PROV_DSS, CRYPT_VERIFYCONTEXT);
if(!result)
@ -459,9 +472,16 @@ static void test_hash(const struct hash_test *tests, int testLen)
ok(result && (hashLen == tests[i].hashLen), "Expected %d hash len, got %d.Error: %x\n",
tests[i].hashLen, hashLen, GetLastError());
dataLen = 0xdeadbeef;
result = CryptGetHashParam(hHash, HP_HASHVAL, 0, &dataLen, 0);
ok(result, "Expected hash value return.\n");
ok(dataLen == hashLen, "Expected hash length to match.\n");
hashLen = 0xdeadbeef;
result = CryptGetHashParam(hHash, HP_HASHVAL, hashValue, &hashLen, 0);
ok(result, "Expected hash value return.\n");
ok(dataLen == hashLen, "Expected hash length to match.\n");
ok(!memcmp(hashValue, tests[i].hash, tests[i].hashLen), "Incorrect hash output.\n");
result = CryptHashData(hHash, data, dataLen, 0);

View File

@ -336,6 +336,12 @@ HRESULT shape_get_typographic_features(struct scriptshaping_context *context, co
shape_get_script_lang_index(context, scripts, MS_GPOS_TAG, &script_index, &language_index);
opentype_get_typographic_features(&context->cache->gpos, script_index, language_index, &t);
if (t.count == 0)
{
*actual_tagcount = 0;
return S_OK;
}
/* Sort and remove duplicates. */
qsort(t.tags, t.count, sizeof(*t.tags), tag_array_sorting_compare);

View File

@ -182,6 +182,7 @@ struct d3d11_swapchain
IDXGIFactory *factory;
IDXGIOutput *target;
LONG present_count;
};
HRESULT d3d11_swapchain_init(struct d3d11_swapchain *swapchain, struct dxgi_device *device,

View File

@ -328,6 +328,8 @@ static HRESULT STDMETHODCALLTYPE d3d11_swapchain_GetDevice(IDXGISwapChain1 *ifac
static HRESULT d3d11_swapchain_present(struct d3d11_swapchain *swapchain,
unsigned int sync_interval, unsigned int flags)
{
HRESULT hr;
if (sync_interval > 4)
{
WARN("Invalid sync interval %u.\n", sync_interval);
@ -345,7 +347,9 @@ static HRESULT d3d11_swapchain_present(struct d3d11_swapchain *swapchain,
return S_OK;
}
return wined3d_swapchain_present(swapchain->wined3d_swapchain, NULL, NULL, NULL, sync_interval, 0);
if (SUCCEEDED(hr = wined3d_swapchain_present(swapchain->wined3d_swapchain, NULL, NULL, NULL, sync_interval, 0)))
InterlockedIncrement(&swapchain->present_count);
return hr;
}
static HRESULT STDMETHODCALLTYPE DECLSPEC_HOTPATCH d3d11_swapchain_Present(IDXGISwapChain1 *iface, UINT sync_interval, UINT flags)
@ -599,9 +603,13 @@ static HRESULT STDMETHODCALLTYPE d3d11_swapchain_GetFrameStatistics(IDXGISwapCha
static HRESULT STDMETHODCALLTYPE d3d11_swapchain_GetLastPresentCount(IDXGISwapChain1 *iface,
UINT *last_present_count)
{
FIXME("iface %p, last_present_count %p stub!\n", iface, last_present_count);
struct d3d11_swapchain *swapchain = d3d11_swapchain_from_IDXGISwapChain1(iface);
return E_NOTIMPL;
TRACE("iface %p, last_present_count %p.\n", iface, last_present_count);
*last_present_count = swapchain->present_count;
return S_OK;
}
/* IDXGISwapChain1 methods */

View File

@ -908,6 +908,38 @@ static IDXGIAdapter *get_adapter_(unsigned int line, IUnknown *device, BOOL is_d
return adapter;
}
#define create_swapchain(a, b, c) create_swapchain_(__LINE__, a, b, c)
static IDXGISwapChain *create_swapchain_(unsigned int line, IUnknown *device, BOOL is_d3d12, HWND window)
{
DXGI_SWAP_CHAIN_DESC desc;
IDXGISwapChain *swapchain;
IDXGIFactory *factory;
HRESULT hr;
desc.BufferDesc.Width = 640;
desc.BufferDesc.Height = 480;
desc.BufferDesc.RefreshRate.Numerator = 60;
desc.BufferDesc.RefreshRate.Denominator = 1;
desc.BufferDesc.Format = DXGI_FORMAT_B8G8R8A8_UNORM;
desc.BufferDesc.ScanlineOrdering = DXGI_MODE_SCANLINE_ORDER_UNSPECIFIED;
desc.BufferDesc.Scaling = DXGI_MODE_SCALING_UNSPECIFIED;
desc.SampleDesc.Count = 1;
desc.SampleDesc.Quality = 0;
desc.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT;
desc.BufferCount = is_d3d12 ? 2 : 1;
desc.OutputWindow = window;
desc.Windowed = TRUE;
desc.SwapEffect = is_d3d12 ? DXGI_SWAP_EFFECT_FLIP_DISCARD : DXGI_SWAP_EFFECT_DISCARD;
desc.Flags = 0;
get_factory(device, is_d3d12, &factory);
hr = IDXGIFactory_CreateSwapChain(factory, device, &desc, &swapchain);
ok_(__FILE__, line)(hr == S_OK, "Failed to create swapchain, hr %#x.\n", hr);
IDXGIFactory_Release(factory);
return swapchain;
}
static void test_adapter_desc(void)
{
DXGI_ADAPTER_DESC1 desc1;
@ -7324,6 +7356,65 @@ done:
heap_free(original_modes);
}
static void test_swapchain_present_count(IUnknown *device, BOOL is_d3d12)
{
UINT present_count, expected;
IDXGISwapChain *swapchain;
HWND window;
HRESULT hr;
window = create_window();
swapchain = create_swapchain(device, is_d3d12, window);
present_count = ~0u;
hr = IDXGISwapChain_GetLastPresentCount(swapchain, &present_count);
todo_wine_if(is_d3d12) ok(hr == S_OK, "Got unexpected hr %#x.\n", hr);
todo_wine_if(is_d3d12) ok(!present_count, "Got unexpected present count %u.\n", present_count);
hr = IDXGISwapChain_Present(swapchain, 0, 0);
ok(hr == S_OK, "Got unexpected hr %#x.\n", hr);
expected = present_count + 1;
hr = IDXGISwapChain_GetLastPresentCount(swapchain, &present_count);
todo_wine_if(is_d3d12) ok(hr == S_OK, "Got unexpected hr %#x.\n", hr);
todo_wine_if(is_d3d12)
ok(present_count == expected, "Got unexpected present count %u, expected %u.\n", present_count, expected);
hr = IDXGISwapChain_Present(swapchain, 10, 0);
ok(hr == DXGI_ERROR_INVALID_CALL, "Got unexpected hr %#x.\n", hr);
expected = present_count;
hr = IDXGISwapChain_GetLastPresentCount(swapchain, &present_count);
todo_wine_if(is_d3d12) ok(hr == S_OK, "Got unexpected hr %#x.\n", hr);
ok(present_count == expected, "Got unexpected present count %u, expected %u.\n", present_count, expected);
hr = IDXGISwapChain_Present(swapchain, 0, DXGI_PRESENT_TEST);
ok(hr == S_OK, "Got unexpected hr %#x.\n", hr);
expected = present_count;
hr = IDXGISwapChain_GetLastPresentCount(swapchain, &present_count);
todo_wine_if(is_d3d12) ok(hr == S_OK, "Got unexpected hr %#x.\n", hr);
ok(present_count == expected, "Got unexpected present count %u, expected %u.\n", present_count, expected);
ShowWindow(window, SW_MINIMIZE);
hr = IDXGISwapChain_Present(swapchain, 0, 0);
ok(hr == (is_d3d12 ? S_OK : DXGI_STATUS_OCCLUDED), "Got unexpected hr %#x.\n", hr);
expected = present_count + !!is_d3d12;
hr = IDXGISwapChain_GetLastPresentCount(swapchain, &present_count);
todo_wine_if(is_d3d12) ok(hr == S_OK, "Got unexpected hr %#x.\n", hr);
todo_wine_if(is_d3d12)
ok(present_count == expected, "Got unexpected present count %u, expected %u.\n", present_count, expected);
ShowWindow(window, SW_NORMAL);
hr = IDXGISwapChain_Present(swapchain, 0, 0);
ok(hr == S_OK, "Got unexpected hr %#x.\n", hr);
expected = present_count + 1;
hr = IDXGISwapChain_GetLastPresentCount(swapchain, &present_count);
todo_wine_if(is_d3d12) ok(hr == S_OK, "Got unexpected hr %#x.\n", hr);
todo_wine_if(is_d3d12)
ok(present_count == expected, "Got unexpected present count %u, expected %u.\n", present_count, expected);
IDXGISwapChain_Release(swapchain);
DestroyWindow(window);
}
static void run_on_d3d10(void (*test_func)(IUnknown *device, BOOL is_d3d12))
{
IDXGIDevice *device;
@ -7441,6 +7532,7 @@ START_TEST(dxgi)
run_on_d3d10(test_window_association);
run_on_d3d10(test_default_fullscreen_target_output);
run_on_d3d10(test_mode_change);
run_on_d3d10(test_swapchain_present_count);
if (!(d3d12_module = LoadLibraryA("d3d12.dll")))
{
@ -7471,6 +7563,7 @@ START_TEST(dxgi)
run_on_d3d12(test_window_association);
run_on_d3d12(test_default_fullscreen_target_output);
run_on_d3d12(test_mode_change);
run_on_d3d12(test_swapchain_present_count);
FreeLibrary(d3d12_module);
}

View File

@ -678,7 +678,7 @@ static LRESULT on_nm_click(NSTC2Impl *This, NMHDR *nmhdr)
{
TVHITTESTINFO tvhit;
IShellItem *psi;
HRESULT hr;
TRACE("%p (%p)\n", This, nmhdr);
GetCursorPos(&tvhit.pt);
@ -690,17 +690,7 @@ static LRESULT on_nm_click(NSTC2Impl *This, NMHDR *nmhdr)
/* TVHT_ maps onto the corresponding NSTCEHT_ */
psi = shellitem_from_treeitem(This, tvhit.hItem);
hr = events_OnItemClick(This, psi, tvhit.flags, NSTCECT_LBUTTON);
/* The expando should not be expanded unless
* double-clicked. */
if(tvhit.flags == TVHT_ONITEMBUTTON)
return TRUE;
if(SUCCEEDED(hr))
return FALSE;
else
return TRUE;
return FAILED(events_OnItemClick(This, psi, tvhit.flags, NSTCECT_LBUTTON));
}
static LRESULT on_wm_mbuttonup(NSTC2Impl *This, WPARAM wParam, LPARAM lParam)

View File

@ -913,7 +913,7 @@ static BOOL insert_face_in_family_list( struct gdi_font_face *face, struct gdi_f
debugstr_w(face->full_name), debugstr_w(family->family_name),
cursor->version, face->version );
if (face->file && !wcsicmp( face->file, cursor->file ))
if (face->file && cursor->file && !wcsicmp( face->file, cursor->file ))
{
cursor->refcount++;
TRACE("Font %s already in list, refcount now %d\n",
@ -2485,7 +2485,8 @@ static void update_codepage(void)
add_font_list(hkey, &nls_update_font_list[i], screen_dpi);
RegCloseKey(hkey);
}
if (!RegCreateKeyW( HKEY_LOCAL_MACHINE,
/* Only update these if the Codepage changed. */
if (strcmp( buf, cpbuf ) && !RegCreateKeyW( HKEY_LOCAL_MACHINE,
L"Software\\Microsoft\\Windows NT\\CurrentVersion\\FontSubstitutes", &hkey ))
{
RegSetValueExA(hkey, "MS Shell Dlg", 0, REG_SZ, (const BYTE *)nls_update_font_list[i].shelldlg,
@ -2685,7 +2686,9 @@ static UINT get_font_type( const NEWTEXTMETRICEXW *ntm )
static BOOL get_face_enum_data( struct gdi_font_face *face, ENUMLOGFONTEXW *elf, NEWTEXTMETRICEXW *ntm )
{
struct gdi_font *font;
LOGFONTW lf = { .lfHeight = 100 };
LOGFONTW lf = { .lfHeight = -4096 /* preferable EM Square size */ };
if (!face->scalable) lf.lfHeight = 0;
if (!(font = create_gdi_font( face, NULL, &lf ))) return FALSE;
@ -2695,12 +2698,42 @@ static BOOL get_face_enum_data( struct gdi_font_face *face, ENUMLOGFONTEXW *elf,
return FALSE;
}
if (font->scalable && -lf.lfHeight % font->otm.otmEMSquare != 0)
{
/* reload with the original EM Square size */
lf.lfHeight = -font->otm.otmEMSquare;
free_gdi_font( font );
if (!(font = create_gdi_font( face, NULL, &lf ))) return FALSE;
if (!font_funcs->load_font( font ))
{
free_gdi_font( font );
return FALSE;
}
}
if (font_funcs->set_outline_text_metrics( font ))
{
memcpy( &ntm->ntmTm, &font->otm.otmTextMetrics, sizeof(TEXTMETRICW) );
static const DWORD ntm_ppem = 32;
#define TM font->otm.otmTextMetrics
#define SCALE_NTM(value) (MulDiv( ntm->ntmTm.tmHeight, (value), TM.tmHeight ))
ntm->ntmTm.tmHeight = MulDiv( ntm_ppem, font->ntmCellHeight, font->otm.otmEMSquare );
ntm->ntmTm.tmAscent = SCALE_NTM( TM.tmAscent );
ntm->ntmTm.tmDescent = ntm->ntmTm.tmHeight - ntm->ntmTm.tmAscent;
ntm->ntmTm.tmInternalLeading = SCALE_NTM( TM.tmInternalLeading );
ntm->ntmTm.tmExternalLeading = SCALE_NTM( TM.tmExternalLeading );
ntm->ntmTm.tmAveCharWidth = SCALE_NTM( TM.tmAveCharWidth );
ntm->ntmTm.tmMaxCharWidth = SCALE_NTM( TM.tmMaxCharWidth );
memcpy((char *)&ntm->ntmTm + offsetof( TEXTMETRICW, tmWeight ),
(const char *)&TM + offsetof( TEXTMETRICW, tmWeight ),
sizeof(TEXTMETRICW) - offsetof( TEXTMETRICW, tmWeight ));
ntm->ntmTm.ntmSizeEM = font->otm.otmEMSquare;
ntm->ntmTm.ntmCellHeight = font->ntmCellHeight;
ntm->ntmTm.ntmAvgWidth = font->ntmAvgWidth;
#undef SCALE_NTM
#undef TM
}
else if (font_funcs->set_bitmap_text_metrics( font ))
{
@ -2784,7 +2817,7 @@ static BOOL enum_face_charsets( const struct gdi_font_family *family, struct gdi
for (i = 0; i < count; i++)
{
if (!face->scalable && face->fs.fsCsb[0] == 0) /* OEM bitmap */
if (face->fs.fsCsb[0] == 0) /* OEM */
{
elf.elfLogFont.lfCharSet = ntm.ntmTm.tmCharSet = OEM_CHARSET;
load_script_name( IDS_OEM_DOS - IDS_FIRST_SCRIPT, elf.elfScript );

View File

@ -1243,7 +1243,7 @@ static struct unix_face *unix_face_create( const char *unix_name, void *data_ptr
This->style_name = decode_opentype_name( &style_name.face_name );
memset( &full_name, 0, sizeof(full_name) );
style_name.primary_langid = primary_langid;
full_name.primary_langid = primary_langid;
opentype_enum_full_names( tt_name_v0, search_face_name_callback, &full_name );
This->full_name = decode_opentype_name( &full_name.face_name );
@ -1538,9 +1538,10 @@ static UINT parse_aa_pattern( FcPattern *pattern )
static FcPattern *create_family_pattern( const char *name, FcPattern **cached )
{
FcPattern *ret = NULL, *tmp, *pattern = pFcPatternCreate();
FcPattern *ret = NULL, *tmp, *pattern;
FcResult result;
if (*cached) return *cached;
pattern = pFcPatternCreate();
pFcPatternAddString( pattern, FC_FAMILY, (const FcChar8 *)name );
pFcPatternAddString( pattern, FC_NAMELANG, (const FcChar8 *)"en-us" );
pFcPatternAddString( pattern, FC_PRGNAME, (const FcChar8 *)"wine" );
@ -2489,6 +2490,7 @@ static BOOL CDECL freetype_load_font( struct gdi_font *font )
TRACE( "height %d => ppem %d\n", font->lf.lfHeight, font->ppem );
height = font->ppem;
font->ttc_item_offset = get_ttc_offset( ft_face, font->face_index );
font->otm.otmEMSquare = ft_face->units_per_EM;
}
else
{
@ -3952,7 +3954,6 @@ static BOOL CDECL freetype_set_outline_text_metrics( struct gdi_font *font )
font->otm.otmsCharSlopeRise = pHori->caret_Slope_Rise;
font->otm.otmsCharSlopeRun = pHori->caret_Slope_Run;
font->otm.otmItalicAngle = 0; /* POST table */
font->otm.otmEMSquare = ft_face->units_per_EM;
font->otm.otmAscent = SCALE_Y(pOS2->sTypoAscender);
font->otm.otmDescent = SCALE_Y(pOS2->sTypoDescender);
font->otm.otmLineGap = SCALE_Y(pOS2->sTypoLineGap);

View File

@ -3927,6 +3927,25 @@ static void test_text_metrics(const LOGFONTA *lf, const NEWTEXTMETRICA *ntm)
ok(ntm->ntmCellHeight == cell_height, "%s: ntmCellHeight %u != %u, os2.usWinAscent/os2.usWinDescent %u/%u\n",
font_name, ntm->ntmCellHeight, cell_height, ascent, descent);
/* NEWTEXTMETRIC's scaling method is different from TEXTMETRIC's */
#define SCALE_NTM(value) (MulDiv(ntm->tmHeight, (value), cell_height))
size = MulDiv(32, ntm->ntmCellHeight, ntm->ntmSizeEM);
ok(ntm->tmHeight == size, "%s: ntm->tmHeight %d != %d (%u/%u)\n",
font_name, ntm->tmHeight, size, ntm->ntmCellHeight, ntm->ntmSizeEM);
size = SCALE_NTM(ntm->ntmAvgWidth);
ok(ntm->tmAveCharWidth == size, "%s: ntm->tmAveCharWidth %d != %d (%u/%u,%d)\n",
font_name, ntm->tmAveCharWidth, size, ntm->ntmAvgWidth, cell_height, ntm->tmHeight);
size = SCALE_NTM(ascent);
ok(ntm->tmAscent == size, "%s: ntm->tmAscent %d != %d (%u/%u,%d)\n",
font_name, ntm->tmAscent, size, ascent, cell_height, ntm->tmHeight);
size = ntm->tmHeight - ntm->tmAscent;
ok(ntm->tmDescent == size, "%s: ntm->tmDescent %d != %d (%u/%u,%d)\n",
font_name, ntm->tmDescent, size, descent, cell_height, ntm->tmHeight);
size = SCALE_NTM(cell_height - ntm->ntmSizeEM);
ok(ntm->tmInternalLeading == size, "%s: ntm->tmInternalLeading %d != %d (%u/%u,%d)\n",
font_name, ntm->tmInternalLeading, size, cell_height - ntm->ntmSizeEM, cell_height, ntm->tmHeight);
#undef SCALE_NTM
version = GET_BE_WORD(tt_os2.version);
os2_first_char = GET_BE_WORD(tt_os2.usFirstCharIndex);

Binary file not shown.

View File

@ -1,4 +1,4 @@
SplineFontDB: 3.2
SplineFontDB: 3.0
FontName: WineLangNamesRegular
FullName: Wine_Lang_Names_Regular
FamilyName: Wine_Lang_Names

Binary file not shown.

View File

@ -1,4 +1,4 @@
SplineFontDB: 3.2
SplineFontDB: 3.0
FontName: WineLangNamesRegular
FullName: Wine_Lang_Names_Regular
FamilyName: Wine_Lang_Names

Binary file not shown.

View File

@ -1,4 +1,4 @@
SplineFontDB: 3.2
SplineFontDB: 3.0
FontName: WineLangNamesRegular
FullName: Wine_Lang_Names_Regular
FamilyName: Wine_Lang_Names

Binary file not shown.

View File

@ -1,4 +1,4 @@
SplineFontDB: 3.2
SplineFontDB: 3.0
FontName: wine_nul
FullName: wine_nul
FamilyName: wine_nul

Binary file not shown.

View File

@ -1,4 +1,4 @@
SplineFontDB: 3.2
SplineFontDB: 3.0
FontName: Wine_TTF_Names_Long_Family1_Cond_Regular
FamilyName: Wine_TTF_Names_Long_Family1_Cond
Weight: Regular

Binary file not shown.

View File

@ -1,4 +1,4 @@
SplineFontDB: 3.2
SplineFontDB: 3.0
FontName: Wine_TTF_Names_Long_Family1_Cond_Regular
FamilyName: Wine_TTF_Names_Long_Family1_Cond
Weight: Regular

View File

@ -190,7 +190,7 @@ GpStatus WINGDIPAPI GdipCreateFont(GDIPCONST GpFontFamily *fontFamily,
(*font)->unit = unit;
(*font)->emSize = emSize;
(*font)->otm = otm;
(*font)->family = (GpFontFamily *)fontFamily;
GdipCloneFontFamily((GpFontFamily*)fontFamily, &(*font)->family);
TRACE("<-- %p\n", *font);
@ -323,8 +323,7 @@ GpStatus WINGDIPAPI GdipGetFamily(GpFont *font, GpFontFamily **family)
if (!(font && family))
return InvalidParameter;
*family = font->family;
return Ok;
return GdipCloneFontFamily(font->family, family);
}
static REAL get_font_size(const GpFont *font)
@ -746,9 +745,8 @@ GpStatus WINGDIPAPI GdipCreateFontFamilyFromName(GDIPCONST WCHAR *name,
{
if (!wcsicmp(lf.lfFaceName, collection->FontFamilies[i]->FamilyName))
{
*family = collection->FontFamilies[i];
status = GdipCloneFontFamily(collection->FontFamilies[i], family);
TRACE("<-- %p\n", *family);
status = Ok;
break;
}
}
@ -778,6 +776,10 @@ GpStatus WINGDIPAPI GdipCloneFontFamily(GpFontFamily *family, GpFontFamily **clo
TRACE("%p (%s), %p\n", family, debugstr_w(family->FamilyName), clone);
*clone = family;
if (!family->installed)
InterlockedIncrement(&family->ref);
return Ok;
}
@ -796,17 +798,20 @@ GpStatus WINGDIPAPI GdipCloneFontFamily(GpFontFamily *family, GpFontFamily **clo
* FAILURE: InvalidParameter if family is NULL
*
* NOTES
* If name is a NULL ptr, then both XP and Vista will crash (so we do as well)
* If name is NULL, XP and Vista crash but not Windows 7+
*/
GpStatus WINGDIPAPI GdipGetFamilyName (GDIPCONST GpFontFamily *family,
WCHAR *name, LANGID language)
{
static int lang_fixme;
TRACE("%p, %p, %d\n", family, name, language);
if (family == NULL)
return InvalidParameter;
TRACE("%p, %p, %d\n", family, name, language);
if (name == NULL)
return Ok;
if (language != LANG_NEUTRAL && !lang_fixme++)
FIXME("No support for handling of multiple languages!\n");
@ -835,6 +840,11 @@ GpStatus WINGDIPAPI GdipDeleteFontFamily(GpFontFamily *FontFamily)
if (!FontFamily)
return InvalidParameter;
if (!FontFamily->installed && !InterlockedDecrement(&FontFamily->ref))
{
heap_free(FontFamily);
}
return Ok;
}
@ -1079,7 +1089,7 @@ GpStatus WINGDIPAPI GdipDeletePrivateFontCollection(GpFontCollection **fontColle
if (!fontCollection)
return InvalidParameter;
for (i = 0; i < (*fontCollection)->count; i++) heap_free((*fontCollection)->FontFamilies[i]);
for (i = 0; i < (*fontCollection)->count; i++) GdipDeleteFontFamily((*fontCollection)->FontFamilies[i]);
heap_free((*fontCollection)->FontFamilies);
heap_free(*fontCollection);
@ -1541,6 +1551,7 @@ GpStatus WINGDIPAPI GdipGetFontCollectionFamilyList(
for (i = 0; i < numSought && i < fontCollection->count; i++)
{
/* caller is responsible for cloning these if it keeps references */
gpfamilies[i] = fontCollection->FontFamilies[i];
}
@ -1641,6 +1652,8 @@ static INT CALLBACK add_font_proc(const LOGFONTW *lfw, const TEXTMETRICW *ntm,
family->descent = fm.descent;
family->line_spacing = fm.line_spacing;
family->dpi = fm.dpi;
family->installed = param->is_system;
family->ref = 1;
lstrcpyW(family->FamilyName, lfw->lfFaceName);

View File

@ -528,6 +528,8 @@ struct GpFontFamily{
WCHAR FamilyName[LF_FACESIZE];
UINT16 em_height, ascent, descent, line_spacing; /* in font units */
int dpi;
BOOL installed;
LONG ref;
};
/* internal use */

View File

@ -5225,9 +5225,6 @@ GpStatus gdip_format_string(HDC hdc,
hotkeyprefix_count = 0;
for(i = 0, j = 0; i < length; i++){
/* FIXME: This makes the indexes passed to callback inaccurate. */
if(!iswprint(string[i]) && (string[i] != '\n'))
continue;
/* FIXME: tabs should be handled using tabstops from stringformat */
if (string[i] == '\t')

View File

@ -72,7 +72,7 @@ static void test_long_name(void)
GpStatus stat;
GpFontCollection *fonts;
INT num_families;
GpFontFamily *family;
GpFontFamily *family, *cloned_family;
WCHAR family_name[LF_FACESIZE];
GpFont *font;
@ -98,6 +98,10 @@ static void test_long_name(void)
stat = GdipCreateFont(family, 256.0, FontStyleRegular, UnitPixel, &font);
ok(stat == Ok, "GdipCreateFont failed: %d\n", stat);
stat = GdipCloneFontFamily(family, &cloned_family);
ok(stat == Ok, "GdipCloneFontFamily failed: %d\n", stat);
ok(family == cloned_family, "GdipCloneFontFamily returned new object\n");
/* Cleanup */
stat = GdipDeleteFont(font);
@ -106,6 +110,13 @@ static void test_long_name(void)
stat = GdipDeletePrivateFontCollection(&fonts);
ok(stat == Ok, "GdipDeletePrivateFontCollection failed: %d\n", stat);
/* Cloned family survives after collection is deleted */
stat = GdipGetFamilyName(cloned_family, family_name, LANG_NEUTRAL);
ok(stat == Ok, "GdipGetFamilyName failed: %d\n", stat);
stat = GdipDeleteFontFamily(cloned_family);
ok(stat == Ok, "GdipDeleteFontFamily failed: %d\n", stat);
DELETE_FONTFILE(path);
}
@ -377,12 +388,9 @@ static void test_fontfamily (void)
expect (Ok, stat);
expect (0, lstrcmpiW(itsName, L"Tahoma"));
if (0)
{
/* Crashes on Windows XP SP2, Vista, and so Wine as well */
stat = GdipGetFamilyName (family, NULL, LANG_NEUTRAL);
expect (Ok, stat);
}
/* Crashes on Windows XP SP2 and Vista */
stat = GdipGetFamilyName (family, NULL, LANG_NEUTRAL);
expect (Ok, stat);
/* Make sure we don't read old data */
ZeroMemory (itsName, sizeof(itsName));

View File

@ -1,4 +1,4 @@
SplineFontDB: 3.2
SplineFontDB: 3.0
FontName: winegdiptestfont0
FullName: Wine GDI+ Test Font 0
FamilyName: winegdiptestfont

View File

@ -1898,14 +1898,14 @@ WCHAR *decode_html(const char *html_fragment, int html_fragment_len, UINT code_p
while(1)
{
symbol = 0;
amp = strchr(h, '&');
amp = memchr(h, '&', html_fragment + html_fragment_len - h);
if(!amp) break;
len = amp-h;
/* Copy the characters prior to the HTML encoded character */
memcpy(&tmp[tmp_len], h, len);
tmp_len += len;
amp++; /* skip ampersand */
sem = strchr(amp, ';');
sem = memchr(amp, ';', html_fragment + html_fragment_len - amp);
/* Require a semicolon after the ampersand */
if(!sem)
{

View File

@ -254,6 +254,19 @@ static void _test_LocationURL(unsigned line, IWebBrowser2 *wb, const WCHAR *exur
}
}
#define test_LocationName(a,b) _test_LocationName(__LINE__,a,b)
static void _test_LocationName(unsigned line, IWebBrowser2 *wb, const WCHAR *exname)
{
BSTR name = (void*)0xdeadbeef;
HRESULT hres;
hres = IWebBrowser2_get_LocationName(wb, &name);
ok_(__FILE__,line) (hres == (*exname ? S_OK : S_FALSE), "get_LocationName failed: %08x\n", hres);
ok_(__FILE__,line) (!lstrcmpW(name, exname) || broken(is_http && !lstrcmpW(name, current_url)) /* Win10 2004 */,
"expected %s, got %s\n", wine_dbgstr_w(exname), wine_dbgstr_w(name));
SysFreeString(name);
}
#define test_ready_state(a,b) _test_ready_state(__LINE__,a,b)
static void _test_ready_state(unsigned line, READYSTATE exstate, VARIANT_BOOL expect_busy)
{
@ -2785,11 +2798,13 @@ static void test_ConnectionPoint(IWebBrowser2 *unk, BOOL init)
static void test_Navigate2(IWebBrowser2 *webbrowser, const WCHAR *nav_url)
{
const WCHAR *title = L"WineHQ - Run Windows applications on Linux, BSD, Solaris and Mac OS X";
VARIANT url;
BOOL is_file;
HRESULT hres;
test_LocationURL(webbrowser, is_first_load ? L"" : current_url);
test_LocationName(webbrowser, is_first_load ? L"" : (is_http ? title : current_url));
test_ready_state(is_first_load ? READYSTATE_UNINITIALIZED : READYSTATE_COMPLETE, VARIANT_FALSE);
is_http = !memcmp(nav_url, "http:", 5);

View File

@ -539,8 +539,25 @@ static HRESULT WINAPI WebBrowser_put_Height(IWebBrowser2 *iface, LONG Height)
static HRESULT WINAPI WebBrowser_get_LocationName(IWebBrowser2 *iface, BSTR *LocationName)
{
WebBrowser *This = impl_from_IWebBrowser2(iface);
FIXME("(%p)->(%p)\n", This, LocationName);
return E_NOTIMPL;
IHTMLDocument2 *doc;
HRESULT hres;
TRACE("(%p)->(%p)\n", This, LocationName);
if(This->doc_host.document &&
SUCCEEDED(IUnknown_QueryInterface(This->doc_host.document, &IID_IHTMLDocument2, (void **)&doc))) {
hres = IHTMLDocument2_get_title(doc, LocationName);
if(hres == S_OK && !SysStringLen(*LocationName)) {
SysFreeString(*LocationName);
hres = get_location_url(&This->doc_host, LocationName);
}
IHTMLDocument2_Release(doc);
} else {
*LocationName = SysAllocString(L"");
hres = S_FALSE;
}
return hres;
}
static HRESULT WINAPI WebBrowser_get_LocationURL(IWebBrowser2 *iface, BSTR *LocationURL)

View File

@ -44,15 +44,90 @@ BOOL WINAPI BindImage(
/***********************************************************************
* BindImageEx (IMAGEHLP.@)
*/
BOOL WINAPI BindImageEx(
DWORD Flags, PCSTR ImageName, PCSTR DllPath, PCSTR SymbolPath,
PIMAGEHLP_STATUS_ROUTINE StatusRoutine)
BOOL WINAPI BindImageEx(DWORD flags, const char *module, const char *dll_path,
const char *symbol_path, PIMAGEHLP_STATUS_ROUTINE cb)
{
FIXME("(%d, %s, %s, %s, %p): stub\n",
Flags, debugstr_a(ImageName), debugstr_a(DllPath),
debugstr_a(SymbolPath), StatusRoutine
);
return TRUE;
const IMAGE_IMPORT_DESCRIPTOR *import;
LOADED_IMAGE image;
ULONG size;
TRACE("flags %#x, module %s, dll_path %s, symbol_path %s, cb %p.\n",
flags, debugstr_a(module), debugstr_a(dll_path), debugstr_a(symbol_path), cb);
if (!(flags & BIND_NO_UPDATE))
FIXME("Image modification is not implemented.\n");
if (flags & ~BIND_NO_UPDATE)
FIXME("Ignoring flags %#x.\n", flags);
if (!MapAndLoad(module, dll_path, &image, TRUE, TRUE))
return FALSE;
if (!(import = ImageDirectoryEntryToData(image.MappedAddress, FALSE, IMAGE_DIRECTORY_ENTRY_IMPORT, &size)))
{
UnMapAndLoad(&image);
return TRUE; /* no imports */
}
if (image.FileHeader->OptionalHeader.Magic != IMAGE_NT_OPTIONAL_HDR_MAGIC)
{
FIXME("Unhandled architecture %#x.\n", image.FileHeader->OptionalHeader.Magic);
UnMapAndLoad(&image);
return TRUE;
}
for (; import->Name && import->FirstThunk; ++import)
{
char full_path[MAX_PATH];
IMAGE_THUNK_DATA *thunk;
const char *dll_name;
DWORD thunk_rva;
if (!(dll_name = ImageRvaToVa(image.FileHeader, image.MappedAddress, import->Name, 0)))
{
ERR("Failed to get VA for import name RVA %#x.\n", import->Name);
continue;
}
if (cb) cb(BindImportModule, module, dll_name, 0, 0);
if (!SearchPathA(dll_path, dll_name, 0, sizeof(full_path), full_path, 0))
{
ERR("Import %s was not found.\n", debugstr_a(dll_path));
continue;
}
thunk_rva = import->OriginalFirstThunk ? import->OriginalFirstThunk : import->FirstThunk;
if (!(thunk = ImageRvaToVa(image.FileHeader, image.MappedAddress, thunk_rva, 0)))
{
ERR("Failed to get VA for import thunk RVA %#x.\n", thunk_rva);
continue;
}
for (; thunk->u1.Ordinal; ++thunk)
{
if (IMAGE_SNAP_BY_ORDINAL(thunk->u1.Ordinal))
{
/* FIXME: We apparently need to subtract the actual module's
* ordinal base. */
FIXME("Ordinal imports are not implemented.\n");
}
else
{
IMAGE_IMPORT_BY_NAME *name;
if (!(name = ImageRvaToVa(image.FileHeader, image.MappedAddress, thunk->u1.AddressOfData, 0)))
{
ERR("Failed to get VA for name RVA %#x.\n", thunk->u1.AddressOfData);
continue;
}
if (cb) cb(BindImportProcedure, module, full_path, 0, (ULONG_PTR)name->Name);
}
}
}
UnMapAndLoad(&image);
return TRUE;
}

View File

@ -1,5 +1,10 @@
TESTDLL = imagehlp.dll
IMPORTS = imagehlp psapi
C_SRCS = \
testdll_IMPORTS = oleaut32 comdlg32 shlwapi
SOURCES = \
image.c \
integrity.c
integrity.c \
testdll.c \
testdll.spec

View File

@ -24,19 +24,35 @@
#include <winbase.h>
#include <winver.h>
#include <winnt.h>
#include <winuser.h>
#include <imagehlp.h>
#include "wine/test.h"
static HMODULE hImageHlp;
static char *load_resource(const char *name)
{
static char path[MAX_PATH];
DWORD written;
HANDLE file;
HRSRC res;
void *ptr;
static BOOL (WINAPI *pImageGetDigestStream)(HANDLE, DWORD, DIGEST_FUNCTION, DIGEST_HANDLE);
static BOOL (WINAPI *pBindImageEx)(DWORD Flags, const char *ImageName, const char *DllPath,
const char *SymbolPath, PIMAGEHLP_STATUS_ROUTINE StatusRoutine);
static DWORD (WINAPI *pGetImageUnusedHeaderBytes)(PLOADED_IMAGE, LPDWORD);
static PLOADED_IMAGE (WINAPI *pImageLoad)(PCSTR, PCSTR);
static BOOL (WINAPI *pImageUnload)(PLOADED_IMAGE);
GetTempPathA(ARRAY_SIZE(path), path);
strcat(path, name);
file = CreateFileA(path, GENERIC_READ|GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, 0);
ok(file != INVALID_HANDLE_VALUE, "Failed to create file %s, error %u.\n",
debugstr_a(path), GetLastError());
res = FindResourceA(NULL, name, "TESTDLL");
ok(!!res, "Failed to load resource, error %u.\n", GetLastError());
ptr = LockResource(LoadResource(GetModuleHandleA(NULL), res));
WriteFile(file, ptr, SizeofResource( GetModuleHandleA(NULL), res), &written, NULL);
ok(written == SizeofResource(GetModuleHandleA(NULL), res), "Failed to write resource.\n");
CloseHandle(file);
return path;
}
/* minimal PE file image */
#define VA_START 0x400000
@ -155,9 +171,6 @@ struct expected_update_accum
BOOL todo;
};
static int status_routine_called[BindSymbolsNotUpdated+1];
static BOOL WINAPI accumulating_stream_output(DIGEST_HANDLE handle, BYTE *pb,
DWORD cb)
{
@ -280,40 +293,6 @@ static void update_checksum(void)
bin.nt_headers.OptionalHeader.CheckSum = sum;
}
static BOOL CALLBACK testing_status_routine(IMAGEHLP_STATUS_REASON reason, const char *ImageName,
const char *DllName, ULONG_PTR Va, ULONG_PTR Parameter)
{
char kernel32_path[MAX_PATH];
if (0 <= (int)reason && reason <= BindSymbolsNotUpdated)
status_routine_called[reason]++;
else
ok(0, "expected reason between 0 and %d, got %d\n", BindSymbolsNotUpdated+1, reason);
switch(reason)
{
case BindImportModule:
ok(!strcmp(DllName, "KERNEL32.DLL"), "expected DllName to be KERNEL32.DLL, got %s\n",
DllName);
break;
case BindImportProcedure:
case BindForwarderNOT:
GetSystemDirectoryA(kernel32_path, MAX_PATH);
strcat(kernel32_path, "\\KERNEL32.DLL");
ok(!lstrcmpiA(DllName, kernel32_path), "expected DllName to be %s, got %s\n",
kernel32_path, DllName);
ok(!strcmp((char *)Parameter, "ExitProcess"),
"expected Parameter to be ExitProcess, got %s\n", (char *)Parameter);
break;
default:
ok(0, "got unexpected reason %d\n", reason);
break;
}
return TRUE;
}
static void test_get_digest_stream(void)
{
BOOL ret;
@ -322,13 +301,8 @@ static void test_get_digest_stream(void)
DWORD count;
struct update_accum accum = { 0, NULL };
if (!pImageGetDigestStream)
{
win_skip("ImageGetDigestStream function is not available\n");
return;
}
SetLastError(0xdeadbeef);
ret = pImageGetDigestStream(NULL, 0, NULL, NULL);
ret = ImageGetDigestStream(NULL, 0, NULL, NULL);
ok(!ret && GetLastError() == ERROR_INVALID_PARAMETER,
"expected ERROR_INVALID_PARAMETER, got %d\n", GetLastError());
file = create_temp_file(temp_file);
@ -338,16 +312,16 @@ static void test_get_digest_stream(void)
return;
}
SetLastError(0xdeadbeef);
ret = pImageGetDigestStream(file, 0, NULL, NULL);
ret = ImageGetDigestStream(file, 0, NULL, NULL);
ok(!ret && GetLastError() == ERROR_INVALID_PARAMETER,
"expected ERROR_INVALID_PARAMETER, got %d\n", GetLastError());
SetLastError(0xdeadbeef);
ret = pImageGetDigestStream(NULL, 0, accumulating_stream_output, &accum);
ret = ImageGetDigestStream(NULL, 0, accumulating_stream_output, &accum);
ok(!ret && GetLastError() == ERROR_INVALID_PARAMETER,
"expected ERROR_INVALID_PARAMETER, got %d\n", GetLastError());
/* Even with "valid" parameters, it fails with an empty file */
SetLastError(0xdeadbeef);
ret = pImageGetDigestStream(file, 0, accumulating_stream_output, &accum);
ret = ImageGetDigestStream(file, 0, accumulating_stream_output, &accum);
ok(!ret && GetLastError() == ERROR_INVALID_PARAMETER,
"expected ERROR_INVALID_PARAMETER, got %d\n", GetLastError());
/* Finally, with a valid executable in the file, it succeeds. Note that
@ -362,11 +336,11 @@ static void test_get_digest_stream(void)
bin.nt_headers.OptionalHeader.SizeOfInitializedData = 0;
bin.nt_headers.OptionalHeader.SizeOfImage = 0;
ret = pImageGetDigestStream(file, 0, accumulating_stream_output, &accum);
ret = ImageGetDigestStream(file, 0, accumulating_stream_output, &accum);
ok(ret, "ImageGetDigestStream failed: %d\n", GetLastError());
check_updates("flags = 0", &a1, &accum);
free_updates(&accum);
ret = pImageGetDigestStream(file, CERT_PE_IMAGE_DIGEST_ALL_IMPORT_INFO,
ret = ImageGetDigestStream(file, CERT_PE_IMAGE_DIGEST_ALL_IMPORT_INFO,
accumulating_stream_output, &accum);
ok(ret, "ImageGetDigestStream failed: %d\n", GetLastError());
check_updates("flags = CERT_PE_IMAGE_DIGEST_ALL_IMPORT_INFO", &a2, &accum);
@ -375,58 +349,78 @@ static void test_get_digest_stream(void)
DeleteFileA(temp_file);
}
static unsigned int got_SysAllocString, got_GetOpenFileNameA, got_SHRegGetIntW;
static BOOL WINAPI bind_image_cb(IMAGEHLP_STATUS_REASON reason, const char *file,
const char *module, ULONG_PTR va, ULONG_PTR param)
{
static char last_module[MAX_PATH];
if (winetest_debug > 1)
trace("reason %u, file %s, module %s, va %#Ix, param %#Ix\n",
reason, debugstr_a(file), debugstr_a(module), va, param);
if (reason == BindImportModule)
{
ok(!strchr(module, '\\'), "got module name %s\n", debugstr_a(module));
strcpy(last_module, module);
ok(!va, "got VA %#Ix\n", va);
ok(!param, "got param %#Ix\n", param);
}
else if (reason == BindImportProcedure)
{
char full_path[MAX_PATH];
BOOL ret;
todo_wine ok(!!va, "expected nonzero VA\n");
ret = SearchPathA(NULL, last_module, ".dll", sizeof(full_path), full_path, NULL);
ok(ret, "got error %u\n", GetLastError());
ok(!strcmp(module, full_path), "expected %s, got %s\n", debugstr_a(full_path), debugstr_a(module));
if (!strcmp((const char *)param, "SysAllocString"))
{
ok(!strcmp(last_module, "oleaut32.dll"), "got wrong module %s\n", debugstr_a(module));
++got_SysAllocString;
}
else if (!strcmp((const char *)param, "GetOpenFileNameA"))
{
ok(!strcmp(last_module, "comdlg32.dll"), "got wrong module %s\n", debugstr_a(module));
++got_GetOpenFileNameA;
}
else if (!strcmp((const char *)param, "Ordinal117"))
{
ok(!strcmp(last_module, "shlwapi.dll"), "got wrong module %s\n", debugstr_a(module));
++got_SHRegGetIntW;
}
}
else
{
ok(0, "got unexpected reason %#x\n", reason);
}
return TRUE;
}
static void test_bind_image_ex(void)
{
const char *filename = load_resource("testdll.dll");
BOOL ret;
HANDLE file;
char temp_file[MAX_PATH];
DWORD count;
if (!pBindImageEx)
{
win_skip("BindImageEx function is not available\n");
return;
}
/* call with a non-existent file */
SetLastError(0xdeadbeef);
ret = pBindImageEx(BIND_NO_BOUND_IMPORTS | BIND_NO_UPDATE | BIND_ALL_IMAGES, "nonexistent.dll", 0, 0,
testing_status_routine);
todo_wine ok(!ret && ((GetLastError() == ERROR_FILE_NOT_FOUND) ||
(GetLastError() == ERROR_INVALID_PARAMETER)),
"expected ERROR_FILE_NOT_FOUND or ERROR_INVALID_PARAMETER, got %d\n",
GetLastError());
ret = BindImageEx(BIND_ALL_IMAGES | BIND_NO_BOUND_IMPORTS | BIND_NO_UPDATE,
"nonexistent.dll", 0, 0, bind_image_cb);
ok(!ret, "expected failure\n");
ok(GetLastError() == ERROR_FILE_NOT_FOUND || GetLastError() == ERROR_INVALID_PARAMETER,
"got error %u\n", GetLastError());
file = create_temp_file(temp_file);
if (file == INVALID_HANDLE_VALUE)
{
skip("couldn't create temp file\n");
return;
}
ret = BindImageEx(BIND_ALL_IMAGES | BIND_NO_BOUND_IMPORTS | BIND_NO_UPDATE,
filename, NULL, NULL, bind_image_cb);
ok(ret, "got error %u\n", GetLastError());
ok(got_SysAllocString == 1, "got %u imports of SysAllocString\n", got_SysAllocString);
ok(got_GetOpenFileNameA == 1, "got %u imports of GetOpenFileNameA\n", got_GetOpenFileNameA);
todo_wine ok(got_SHRegGetIntW == 1, "got %u imports of SHRegGetIntW\n", got_SHRegGetIntW);
WriteFile(file, &bin, sizeof(bin), &count, NULL);
CloseHandle(file);
/* call with a proper PE file, but with StatusRoutine set to NULL */
ret = pBindImageEx(BIND_NO_BOUND_IMPORTS | BIND_NO_UPDATE | BIND_ALL_IMAGES, temp_file, 0, 0,
NULL);
ok(ret, "BindImageEx failed: %d\n", GetLastError());
/* call with a proper PE file and StatusRoutine */
ret = pBindImageEx(BIND_NO_BOUND_IMPORTS | BIND_NO_UPDATE | BIND_ALL_IMAGES, temp_file, 0, 0,
testing_status_routine);
ok(ret, "BindImageEx failed: %d\n", GetLastError());
todo_wine ok(status_routine_called[BindImportModule] == 1,
"StatusRoutine was called %d times\n", status_routine_called[BindImportModule]);
todo_wine ok((status_routine_called[BindImportProcedure] == 1)
#if defined(_WIN64)
|| broken(status_routine_called[BindImportProcedure] == 0) /* < Win8 */
#endif
, "StatusRoutine was called %d times\n", status_routine_called[BindImportProcedure]);
DeleteFileA(temp_file);
ret = DeleteFileA(filename);
ok(ret, "got error %u\n", GetLastError());
}
static void test_image_load(void)
@ -436,12 +430,6 @@ static void test_image_load(void)
DWORD ret, count;
HANDLE file;
if (!pImageLoad || !pImageUnload || !pGetImageUnusedHeaderBytes)
{
win_skip("ImageLoad functions are not available\n");
return;
}
file = create_temp_file(temp_file);
if (file == INVALID_HANDLE_VALUE)
{
@ -452,7 +440,7 @@ static void test_image_load(void)
WriteFile(file, &bin, sizeof(bin), &count, NULL);
CloseHandle(file);
img = pImageLoad(temp_file, NULL);
img = ImageLoad(temp_file, NULL);
ok(img != NULL, "ImageLoad unexpectedly failed\n");
if (img)
@ -499,13 +487,13 @@ static void test_image_load(void)
"unexpected SizeOfImage, got 0x%x instead of 0x600\n", img->SizeOfImage);
count = 0xdeadbeef;
ret = pGetImageUnusedHeaderBytes(img, &count);
ret = GetImageUnusedHeaderBytes(img, &count);
todo_wine
ok(ret == 448, "GetImageUnusedHeaderBytes returned %u instead of 448\n", ret);
todo_wine
ok(count == 64, "unexpected size for unused header bytes, got %u instead of 64\n", count);
pImageUnload(img);
ImageUnload(img);
}
DeleteFileA(temp_file);
@ -513,23 +501,7 @@ static void test_image_load(void)
START_TEST(image)
{
hImageHlp = LoadLibraryA("imagehlp.dll");
if (!hImageHlp)
{
win_skip("ImageHlp unavailable\n");
return;
}
pImageGetDigestStream = (void *) GetProcAddress(hImageHlp, "ImageGetDigestStream");
pBindImageEx = (void *) GetProcAddress(hImageHlp, "BindImageEx");
pGetImageUnusedHeaderBytes = (void *) GetProcAddress(hImageHlp, "GetImageUnusedHeaderBytes");
pImageLoad = (void *) GetProcAddress(hImageHlp, "ImageLoad");
pImageUnload = (void *) GetProcAddress(hImageHlp, "ImageUnload");
test_get_digest_stream();
test_bind_image_ex();
test_image_load();
FreeLibrary(hImageHlp);
}

View File

@ -26,20 +26,12 @@
#include "winerror.h"
#include "winnt.h"
#include "imagehlp.h"
#define PSAPI_VERSION 1
#include "psapi.h"
static HMODULE hImageHlp, hPsapi, hNtdll;
static HMODULE hNtdll;
static char test_dll_path[MAX_PATH];
static BOOL (WINAPI *pImageAddCertificate)(HANDLE, LPWIN_CERTIFICATE, PDWORD);
static BOOL (WINAPI *pImageEnumerateCertificates)(HANDLE, WORD, PDWORD, PDWORD, DWORD);
static BOOL (WINAPI *pImageGetCertificateData)(HANDLE, DWORD, LPWIN_CERTIFICATE, PDWORD);
static BOOL (WINAPI *pImageGetCertificateHeader)(HANDLE, DWORD, LPWIN_CERTIFICATE);
static BOOL (WINAPI *pImageRemoveCertificate)(HANDLE, DWORD);
static PIMAGE_NT_HEADERS (WINAPI *pCheckSumMappedFile)(PVOID, DWORD, PDWORD, PDWORD);
static BOOL (WINAPI *pGetModuleInformation)(HANDLE, HMODULE, LPMODULEINFO, DWORD);
static PIMAGE_NT_HEADERS (WINAPI *pRtlImageNtHeader)(PVOID);
static const char test_cert_data[] =
@ -193,7 +185,7 @@ static DWORD test_add_certificate(const char *cert_data, int len)
cert->wCertificateType = WIN_CERT_TYPE_PKCS_SIGNED_DATA;
CopyMemory(cert->bCertificate, cert_data, len);
ret = pImageAddCertificate(hFile, cert, &index);
ret = ImageAddCertificate(hFile, cert, &index);
ok(ret, "Unable to add certificate to image, error %x\n", GetLastError());
trace("added cert index %d\n", index);
@ -218,7 +210,7 @@ static void test_get_certificate(const char *cert_data, int index)
return;
}
ret = pImageGetCertificateData(hFile, index, NULL, &cert_len);
ret = ImageGetCertificateData(hFile, index, NULL, &cert_len);
err = GetLastError();
ok ((ret == FALSE) && (err == ERROR_INSUFFICIENT_BUFFER), "ImageGetCertificateData gave unexpected result; ret=%d / err=%x\n", ret, err);
@ -232,7 +224,7 @@ static void test_get_certificate(const char *cert_data, int index)
return;
}
ret = pImageGetCertificateData(hFile, index, cert, &cert_len);
ret = ImageGetCertificateData(hFile, index, cert, &cert_len);
ok(ret, "Unable to retrieve certificate; err=%x\n", GetLastError());
ok(memcmp(cert->bCertificate, cert_data, cert_len - sizeof(WIN_CERTIFICATE)) == 0, "Certificate retrieved did not match original\n");
@ -254,13 +246,13 @@ static void test_remove_certificate(int index)
return;
}
ret = pImageEnumerateCertificates(hFile, CERT_SECTION_TYPE_ANY, &orig_count, NULL, 0);
ret = ImageEnumerateCertificates(hFile, CERT_SECTION_TYPE_ANY, &orig_count, NULL, 0);
ok (ret, "Unable to enumerate certificates in file; err=%x\n", GetLastError());
ret = pImageRemoveCertificate(hFile, index);
ret = ImageRemoveCertificate(hFile, index);
ok (ret, "Unable to remove certificate from file; err=%x\n", GetLastError());
/* Test to see if the certificate has actually been removed */
pImageEnumerateCertificates(hFile, CERT_SECTION_TYPE_ANY, &count, NULL, 0);
ImageEnumerateCertificates(hFile, CERT_SECTION_TYPE_ANY, &count, NULL, 0);
ok (count == orig_count - 1, "Certificate count mismatch; orig=%d new=%d\n", orig_count, count);
CloseHandle(hFile);
@ -275,20 +267,14 @@ static void test_pe_checksum(void)
char buffer[20];
BOOL ret_bool;
if (!pCheckSumMappedFile)
{
win_skip("CheckSumMappedFile not supported, skipping tests\n");
return;
}
SetLastError(0xdeadbeef);
ret = pCheckSumMappedFile(NULL, 0, &checksum_orig, &checksum_new);
ret = CheckSumMappedFile(NULL, 0, &checksum_orig, &checksum_new);
ok(!ret, "Expected CheckSumMappedFile to fail, got %p\n", ret);
ok(((GetLastError() == ERROR_INVALID_PARAMETER)||(GetLastError() == 0xdeadbeef)),
"Expected 0xdeadbeef (XP) or ERROR_INVALID_PARAMETER (Vista+), got %x\n", GetLastError());
SetLastError(0xdeadbeef);
ret = pCheckSumMappedFile((void *)0xdeadbeef, 0, &checksum_orig, &checksum_new);
ret = CheckSumMappedFile((void *)0xdeadbeef, 0, &checksum_orig, &checksum_new);
ok(!ret, "Expected CheckSumMappedFile to fail, got %p\n", ret);
ok(((GetLastError() == ERROR_INVALID_PARAMETER)||(GetLastError() == 0xdeadbeef)),
"Expected 0xdeadbeef (XP) or ERROR_INVALID_PARAMETER (Vista+), got %x\n", GetLastError());
@ -296,53 +282,47 @@ static void test_pe_checksum(void)
/* basic checksum tests */
memset(buffer, 0x11, sizeof(buffer));
checksum_orig = checksum_new = 0xdeadbeef;
ret = pCheckSumMappedFile(buffer, sizeof(buffer), &checksum_orig, &checksum_new);
ret = CheckSumMappedFile(buffer, sizeof(buffer), &checksum_orig, &checksum_new);
ok(ret == NULL, "Expected NULL, got %p\n", ret);
todo_wine ok(checksum_orig == 0, "Expected 0, got %x\n", checksum_orig);
todo_wine ok(checksum_new == 0xaabe, "Expected 0xaabe, got %x\n", checksum_new);
memset(buffer, 0x22, sizeof(buffer));
checksum_orig = checksum_new = 0xdeadbeef;
ret = pCheckSumMappedFile(buffer, sizeof(buffer), &checksum_orig, &checksum_new);
ret = CheckSumMappedFile(buffer, sizeof(buffer), &checksum_orig, &checksum_new);
ok(ret == NULL, "Expected NULL, got %p\n", ret);
todo_wine ok(checksum_orig == 0, "Expected 0, got %x\n", checksum_orig);
todo_wine ok(checksum_new == 0x5569, "Expected 0x5569, got %x\n", checksum_new);
memset(buffer, 0x22, sizeof(buffer));
checksum_orig = checksum_new = 0xdeadbeef;
ret = pCheckSumMappedFile(buffer, 10, &checksum_orig, &checksum_new);
ret = CheckSumMappedFile(buffer, 10, &checksum_orig, &checksum_new);
ok(ret == NULL, "Expected NULL, got %p\n", ret);
todo_wine ok(checksum_orig == 0, "Expected 0, got %x\n", checksum_orig);
todo_wine ok(checksum_new == 0xaab4, "Expected 0xaab4, got %x\n", checksum_new);
memset(buffer, 0x22, sizeof(buffer));
checksum_orig = checksum_new = 0xdeadbeef;
ret = pCheckSumMappedFile(buffer, 11, &checksum_orig, &checksum_new);
ret = CheckSumMappedFile(buffer, 11, &checksum_orig, &checksum_new);
ok(ret == NULL, "Expected NULL, got %p\n", ret);
todo_wine ok(checksum_orig == 0, "Expected 0, got %x\n", checksum_orig);
todo_wine ok(checksum_new == 0xaad7, "Expected 0xaad7, got %x\n", checksum_new);
/* test checksum of PE module */
checksum_orig = checksum_new = 0xdeadbeef;
ret = pCheckSumMappedFile(test_pe_executable, sizeof(test_pe_executable),
ret = CheckSumMappedFile(test_pe_executable, sizeof(test_pe_executable),
&checksum_orig, &checksum_new);
ok((char *)ret == test_pe_executable + 0x80, "Expected %p, got %p\n", test_pe_executable + 0x80, ret);
ok(checksum_orig == 0xabcdef11, "Expected 0xabcdef11, got %x\n", checksum_orig);
ok(checksum_new == 0xaa4, "Expected 0xaa4, got %x\n", checksum_new);
if (!pGetModuleInformation)
{
win_skip("GetModuleInformation not supported, skipping tests\n");
return;
}
ret_bool = pGetModuleInformation(GetCurrentProcess(), GetModuleHandleA(NULL),
ret_bool = GetModuleInformation(GetCurrentProcess(), GetModuleHandleA(NULL),
&modinfo, sizeof(modinfo));
ok(ret_bool, "GetModuleInformation failed, error: %x\n", GetLastError());
SetLastError(0xdeadbeef);
checksum_orig = checksum_new = 0xdeadbeef;
ret = pCheckSumMappedFile(modinfo.lpBaseOfDll, modinfo.SizeOfImage, &checksum_orig, &checksum_new);
ret = CheckSumMappedFile(modinfo.lpBaseOfDll, modinfo.SizeOfImage, &checksum_orig, &checksum_new);
ok(ret != NULL, "Expected CheckSumMappedFile to succeed\n");
ok(GetLastError() == 0xdeadbeef, "Expected err=0xdeadbeef, got %x\n", GetLastError());
ok(checksum_orig != 0xdeadbeef, "Expected orig checksum != 0xdeadbeef\n");
@ -350,7 +330,7 @@ static void test_pe_checksum(void)
SetLastError(0xdeadbeef);
checksum_orig = checksum_new = 0xdeadbeef;
ret = pCheckSumMappedFile((char *)modinfo.lpBaseOfDll + 100, modinfo.SizeOfImage - 100,
ret = CheckSumMappedFile((char *)modinfo.lpBaseOfDll + 100, modinfo.SizeOfImage - 100,
&checksum_orig, &checksum_new);
ok(!ret, "Expected CheckSumMappedFile to fail, got %p\n", ret);
ok(GetLastError() == 0xdeadbeef, "Expected err=0xdeadbeef, got %x\n", GetLastError());
@ -361,27 +341,27 @@ static void test_pe_checksum(void)
checksum_correct = nt_header->OptionalHeader.CheckSum;
checksum_orig = checksum_new = 0xdeadbeef;
ret = pCheckSumMappedFile(modinfo.lpBaseOfDll, (char *)nt_header - (char *)modinfo.lpBaseOfDll,
ret = CheckSumMappedFile(modinfo.lpBaseOfDll, (char *)nt_header - (char *)modinfo.lpBaseOfDll,
&checksum_orig, &checksum_new);
ok(!ret || (ret == nt_header), "Expected CheckSumMappedFile to fail, got %p\n", ret);
ok((checksum_orig == 0) || (checksum_orig == checksum_correct), "Expected %x, got %x\n", checksum_correct, checksum_orig);
ok(checksum_new != 0 && checksum_new != 0xdeadbeef, "Got unexpected value %x\n", checksum_new);
checksum_orig = checksum_new = 0xdeadbeef;
ret = pCheckSumMappedFile(modinfo.lpBaseOfDll, sizeof(IMAGE_DOS_HEADER),
ret = CheckSumMappedFile(modinfo.lpBaseOfDll, sizeof(IMAGE_DOS_HEADER),
&checksum_orig, &checksum_new);
ok(!ret || (ret == nt_header), "Expected CheckSumMappedFile to fail, got %p\n", ret);
ok((checksum_orig == 0) || (checksum_orig == checksum_correct), "Expected %x, got %x\n", checksum_correct, checksum_orig);
ok(checksum_new != 0 && checksum_new != 0xdeadbeef, "Got unexpected value %x\n", checksum_new);
checksum_orig = checksum_new = 0xdeadbeef;
ret = pCheckSumMappedFile(modinfo.lpBaseOfDll, 0, &checksum_orig, &checksum_new);
ret = CheckSumMappedFile(modinfo.lpBaseOfDll, 0, &checksum_orig, &checksum_new);
ok(!ret || (ret == nt_header), "Expected CheckSumMappedFile to fail, got %p\n", ret);
ok((checksum_orig == 0xdeadbeef) || (checksum_orig == checksum_correct), "Expected %x, got %x\n", checksum_correct, checksum_orig);
ok((checksum_new == 0xdeadbeef) || (checksum_new != 0 && checksum_new != 0xdeadbeef), "Got unexpected value %x\n", checksum_new);
checksum_orig = checksum_new = 0xdeadbeef;
ret = pCheckSumMappedFile((char *)modinfo.lpBaseOfDll + 1, 0,
ret = CheckSumMappedFile((char *)modinfo.lpBaseOfDll + 1, 0,
&checksum_orig, &checksum_new);
ok(ret == NULL, "Expected NULL, got %p\n", ret);
ok((checksum_orig == 0) || (checksum_orig == 0xdeadbeef), "Expected 0, got %x\n", checksum_orig);
@ -392,33 +372,11 @@ START_TEST(integrity)
{
DWORD file_size, file_size_orig, first, second;
hImageHlp = LoadLibraryA("imagehlp.dll");
if (!hImageHlp)
{
win_skip("ImageHlp unavailable\n");
return;
}
if (!copy_dll_file())
{
FreeLibrary(hImageHlp);
return;
}
file_size_orig = get_file_size();
pImageAddCertificate = (void *) GetProcAddress(hImageHlp, "ImageAddCertificate");
pImageEnumerateCertificates = (void *) GetProcAddress(hImageHlp, "ImageEnumerateCertificates");
pImageGetCertificateData = (void *) GetProcAddress(hImageHlp, "ImageGetCertificateData");
pImageGetCertificateHeader = (void *) GetProcAddress(hImageHlp, "ImageGetCertificateHeader");
pImageRemoveCertificate = (void *) GetProcAddress(hImageHlp, "ImageRemoveCertificate");
pCheckSumMappedFile = (void *) GetProcAddress(hImageHlp, "CheckSumMappedFile");
hPsapi = LoadLibraryA("psapi.dll");
if (hPsapi)
pGetModuleInformation = (void *) GetProcAddress(hPsapi, "GetModuleInformation");
hNtdll = LoadLibraryA("ntdll.dll");
if (hNtdll)
pRtlImageNtHeader = (void *) GetProcAddress(hNtdll, "RtlImageNtHeader");
@ -450,8 +408,6 @@ START_TEST(integrity)
test_pe_checksum();
if (hPsapi) FreeLibrary(hPsapi);
if (hNtdll) FreeLibrary(hNtdll);
FreeLibrary(hImageHlp);
DeleteFileA(test_dll_path);
}

View File

@ -0,0 +1,30 @@
/*
* Copyright 2021 Zebediah Figura
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
#include <oaidl.h>
#include <commdlg.h>
#include <shlwapi.h>
extern DWORD WINAPI StrCmpCA(const char *, const char *);
void export(void)
{
SysAllocString(NULL);
GetOpenFileNameA(NULL);
SHRegGetIntW(NULL, NULL, 0);
}

View File

@ -0,0 +1,2 @@
@ cdecl export()
@ stdcall VariantInit(ptr) oleaut32.VariantInit

View File

@ -25,6 +25,7 @@
#include "windef.h"
#include "winbase.h"
#include "winsock2.h"
#include "snmp.h"
#include "iphlpapi.h"
#include "wine/debug.h"
@ -1217,7 +1218,7 @@ static void oidToUdpRow(AsnObjectIdentifier *oid, void *dst)
assert(oid && oid->idLength >= 5);
row->dwLocalAddr = oidToIpAddr(oid);
row->dwLocalPort = oid->ids[4];
row->dwLocalPort = htons(oid->ids[4]);
}
static int __cdecl compareUdpRow(const void *a, const void *b)
@ -1225,9 +1226,9 @@ static int __cdecl compareUdpRow(const void *a, const void *b)
const MIB_UDPROW *key = a, *value = b;
int ret;
ret = key->dwLocalAddr - value->dwLocalAddr;
ret = ntohl(key->dwLocalAddr) - ntohl(value->dwLocalAddr);
if (ret == 0)
ret = key->dwLocalPort - value->dwLocalPort;
ret = ntohs(key->dwLocalPort) - ntohs(value->dwLocalPort);
return ret;
}
@ -1269,8 +1270,9 @@ static BOOL mib2UdpEntryQuery(BYTE bPduType, SnmpVarBind *pVarBind,
udpTable->table[tableIndex - 1].dwLocalAddr);
if (ret)
{
UINT id = ntohs(udpTable->table[tableIndex - 1].dwLocalPort);
oid.idLength = 1;
oid.ids = &udpTable->table[tableIndex - 1].dwLocalPort;
oid.ids = &id;
ret = SnmpUtilOidAppend(&pVarBind->name, &oid);
}
}

View File

@ -35,8 +35,8 @@
#endif
#ifdef JSVAL_DOUBLE_LAYOUT_PTR32
/* NaN exponent and our 0x80000 marker */
#define JSV_VAL(x) (0x7ff80000|x)
/* NaN exponent, quiet bit 0x80000 and our 0x10000 marker */
#define JSV_VAL(x) (0x7ff90000|x)
#else
#define JSV_VAL(x) x
#endif
@ -150,10 +150,10 @@ static inline jsval_t jsval_number(double n)
if((ret.u.s.tag & 0x7ff00000) == 0x7ff00000) {
/* isinf */
if(ret.u.s.tag & 0xfffff) {
ret.u.s.tag = 0x7ff00000;
ret.u.s.tag = 0x7ff80000;
ret.u.s.u.as_uintptr = ~0;
}else if(ret.u.s.u.as_uintptr) {
ret.u.s.tag = 0x7ff00000;
ret.u.s.tag = 0x7ff80000;
}
}
#else
@ -191,7 +191,7 @@ static inline BOOL is_string(jsval_t v)
static inline BOOL is_number(jsval_t v)
{
#ifdef JSVAL_DOUBLE_LAYOUT_PTR32
return (v.u.s.tag & 0x7ff80000) != 0x7ff80000;
return (v.u.s.tag & 0x7ff10000) != 0x7ff10000;
#else
return v.type == JSV_NUMBER;
#endif

Some files were not shown because too many files have changed in this diff Show More