Commit graph

121 commits

Author SHA1 Message Date
Mark Jansen
3d3bd4e77e
[WIN32K] Work around GCC builds inventing dead keys.
CORE-14948
2018-09-23 20:03:14 +02:00
Joachim Henze
ef016bfe0a [WIN32K:NTUSER] Fix WIN32K BSOD mentioned in CORE-15027
Fixes accessing nullptr / invalid handle in Window->SystemMenu
I could trigger this occasionally when moving Opera 12.18 window
in front of Spotify 1.0.29.92 window.

Fix was:
authored by Thomas Faber (Thank you!)
tested by me
reviewed by James Tabor
2018-09-21 03:04:31 +02:00
Katayama Hirofumi MZ
31019e8c0c [TRANSLATION] Update Romanian translation (#851)
Translation from Stefan Fulea.
CORE-15023
2018-09-14 11:04:36 +02:00
Katayama Hirofumi MZ
a244e4f6dd [WIN32SS][COMCTL32] Fix button text Y positioning (#766)
Fixes the vertical position of button text.
CORE-14906
2018-09-09 17:37:37 +02:00
Hermès Bélusca-Maïto
4d48b88bfb
[WIN32K:NTUSER] co_UserDestroyWindow(): Simplify the destruction of the owned windows. 2018-09-01 23:46:21 +02:00
Hermès Bélusca-Maïto
e286c4c520
[WIN32K:NTUSER] Optimize IntWinListOwnedPopups() a little bit. Improve a trace. 2018-09-01 23:46:20 +02:00
Hermès Bélusca-Maïto
f644a50cd7
[WIN32K:NTUSER] Code formatting only. 2018-09-01 23:46:17 +02:00
Baruch Rutman
e7d2bbe726 [WIN32SS][LPK] Add BiDi support to menus and window captions (#738)
Added callback function that redirects calls to GreExtTextOutW that didn't went through lpk BiDi processing, calls that are from the kernel.

Completely solves JIRA issue CORE-6910.
2018-08-23 19:43:12 +02:00
Hermès Bélusca-Maïto
d0632b0bca
[WIN32K:NTUSER] In UserSetProcessWindowStation(), use a duplicated window station handle to be set in the EPROCESS:Win32WindowStation cache.
Fixes most of the user32:desktop window station handle reference count tests.
2018-08-19 22:18:42 +02:00
Hermès Bélusca-Maïto
e3b9152935
[WIN32K:NTUSER] For processes that start without any window station and no desktops but manage these (e.g. winlogon.exe), assign their startup desktop when they assign a desktop to one of their threads. 2018-08-19 22:18:41 +02:00
Hermès Bélusca-Maïto
3270979327
[WIN32K:NTUSER] Add a temporary winsta/desktop-connection hack for CSRSS/USERSRV (connection to WinSta0).
Normally CSRSS must not be connected to any winsta or desktop by default. It should manually connect
to a winsta/desktop only when it has to do some GUI operations, and then disconnect afterwards.

[USERSRV] Temporarily hackfix the harderror dialog display to the current input desktop.
2018-08-19 22:18:40 +02:00
Hermès Bélusca-Maïto
fd39f92fcb
[INCLUDE][WINLOGON] Rename the STARTF_SCRNSAVER flag to STARTF_SCREENSAVER,
as documented in "Advanced Windows NT" by Jeffrey M. Richter (Microsoft Press),
and in https://is.muni.cz/el/1433/jaro2010/PB167/um/cv5/undocumented_CreateProcess.pdf .

[INCLUDE][SERVICES][WIN32K:NTUSER] Add an undocumented STARTF_INHERITDESKTOP flag
for the STARTUPINFO::dwFlags structure member, whose purpose is to tell Win32k
that the created handles to the window station and desktop to which the
process is connecting to, can be inherited by its child processes.
It is used when starting interactive services.
Observed via API monitoring on Windows 2003.
2018-08-19 22:18:40 +02:00
Hermès Bélusca-Maïto
f3699c3838
[WIN32K:NTUSER] NtUserCloseDesktop(): Use ObCloseHandle instead. 2018-08-19 22:18:39 +02:00
Hermès Bélusca-Maïto
c697f191cf
[WIN32K:NTUSER] Make NtUserResolveDesktop() and IntResolveDesktop() work in a more Win2k3-compatible manner.
CORE-11933 and PR #621.

Since this API is also called from WINSRV when calling the AllocConsole() API,
it can be tested more-or-less easily. The internal helper IntResolveDesktop()
is also tested during process connection to a window station, when such process
first calls a USER32 or GDI32 function.
This is also the functionality tested by the user32:desktop apitest.

- Adjust how IntResolveDesktop() is called.
2018-08-19 22:18:37 +02:00
Hermès Bélusca-Maïto
83104d9f00
[WIN32K:NTUSER] Code style fixes only. 2018-08-19 22:18:36 +02:00
Hermès Bélusca-Maïto
bc7810a97e
[WIN32K:NTUSER] Rename some variables with more natural names. 2018-08-19 22:18:36 +02:00
Hermès Bélusca-Maïto
1abeb905c3
[WIN32K:NTUSER] Split NtUserCreateDesktop() into the part that captures the user-mode data and the internal worker IntCreateDesktop() function, which will also be used later. 2018-08-19 22:18:35 +02:00
Hermès Bélusca-Maïto
7bc2ddd669
[WIN32K:NTUSER] Fixes for NtUserCreateWindowStation(), IntCreateWindowStation() and NtUserOpenWindowStation().
CORE-11933 and PR #621.

We are potentially going to modify the window station name to be
created or opened, by one with the format "Service-0x<luidhigh>-<luidlow>$",
in case the user provides an empty name.
Since we want to use the user-mode ObjectAttributes structure pointer so
that the Object manager can correctly perform the access checks and the
capture, we actually need to construct the new window station name in the
user memory space! This allows us then to fetch the new name in the
ObjectAttributes structure so that Ob can use it.
All of this is performed under SEH.

For NtUserOpenWindowStation(), we also need to be Windows-compatible and
detect whether user-mode gave instead the special "Service-0x00000000-00000000$"
name (observed via API monitoring) that is used when one tries to open a
window station with empty name.
2018-08-19 22:18:35 +02:00
Hermès Bélusca-Maïto
26933a0965
[WIN32K:NTUSER] Similarly to what was done in USERSRV for harderrors, introduce the _scwprintf() helper function based on the imported _vscwprintf(). 2018-08-19 22:18:34 +02:00
Hermès Bélusca-Maïto
43e2ab208a
[WIN32K:NTUSER] Get rid of the cached window station Name member, and instead just use the name stored in the NT Object's header.
CORE-11933 and PR #621.

- Remove the related hack-FIXMEs;
- Adjust NtUserGetObjectInformation() in accordance.
- Retrieve the window-station/desktop object type string in NtUserGetObjectInformation()
  also from the NT Object's header.

Also simplify the UOI_FLAGS case of NtUserGetObjectInformation() by reading
the handle inheritance information directly from the OBJECT_HANDLE_INFORMATION
structure returned by ObReferenceObjectByHandle().
2018-08-19 22:18:32 +02:00
Hermès Bélusca-Maïto
dae57caa36
[WIN32K:NTUSER] Detect when the NtUserCreateWindowStation() caller has provided an empty window station name, and if so, generate a name in the format: "Service-0x<luidhigh>-<luidlow>$" .
CORE-11933 and PR #621.
2018-08-19 22:18:32 +02:00
Hermès Bélusca-Maïto
ba018294d3
[WIN32K:NTUSER] Split NtUserCreateWindowStation() into the part that captures the user-mode data and the internal worker IntCreateWindowStation() function, which will also be used later.
Add a FIXME note about how we currently handle the window station name.
2018-08-19 22:18:31 +02:00
Hermès Bélusca-Maïto
f47afc3b61
[WIN32K:NTUSER] In UserCreateWinstaDirectory(), use a string-safe printf, and use OBJ_KERNEL_HANDLE as well as a suitable desired access value in a ZwCreateDirectoryObject() call. 2018-08-19 22:18:30 +02:00
Hermès Bélusca-Maïto
2345d63ce3
[WIN32K:NTUSER] Add an extra optional "Process" parameter to the GetProcessLuid() function to be used alternatively in place of "Thread" to retrieve the LUID. 2018-08-19 22:18:30 +02:00
Hermès Bélusca-Maïto
d77c493213
[WIN32K:NTUSER] Move the GetProcessLuid() function to the miscellaneous module. 2018-08-19 22:18:29 +02:00
Hermès Bélusca-Maïto
9c0564063d
[USER32] Implement the special case in CreateWindowStationW() that, when no window station name is provided (either NULL or empty string), does not open any WindowStation directory handle to be passed to the Win32k function.
Observed via API monitoring.
This corresponds to the case where Win32k creates a window station whose name is based on the logon session identifier for the calling process.

Add also a note about the fact that we need to use a per-session-based WindowStation directory name, as done already in Win32k.

CORE-11933 and PR #621.
2018-08-19 22:18:22 +02:00
Manuel Bachmann
71ab0b5d4c [NTDLL][NTUSER] Fix unselected text after WM_CBLOSTTEXTFOCUS
When we unselect text after the WM_CBLOSTTEXTFOCUS message,
make sure we also forget we have been focused at all;
otherwise the edit may become focused again, but with an
empty text selection.

CORE-10266
2018-08-19 14:24:34 +02:00
Thomas Faber
9bffdcb6e7
[USER32] Log the text of message boxes to help figure out some test bot timeouts. 2018-08-19 12:02:24 +02:00
Timo Kreuzer
27c3a4d26a [USER32] Fix copying from WNDCLASS to WNDCLASSEX
This must be done field by field, since the alignment of the structures is different on _WIN64
2018-08-17 22:13:18 +02:00
Hermès Bélusca-Maïto
36174f926b
[USER32] Implement support for the MB_SERVICE_NOTIFICATION flag in the MessageBox*() APIs. 2018-08-17 21:50:09 +02:00
Hermès Bélusca-Maïto
9b4673a3ca
[USER32] Update file description. 2018-08-17 17:12:25 +02:00
Hermès Bélusca-Maïto
2be262bfb1
[USER32] Implement SoftModalMessageBox() based on the original MessageBoxTimeoutIndirectW().
Additional changes:

- Adapt the message-box dialog procedure to correctly take into account
  the presence or absence of a CANCEL button and take appropriate actions.

- Cache the strings retrieved by MB_GetString() (add FIXME notices too).
2018-08-17 17:12:24 +02:00
Hermès Bélusca-Maïto
4f7318b759
[USER32] Code refactoring for MessageBoxTimeoutIndirectW(), in preparation for SoftModalMessageBox() implementation.
- Remove usage of ButtonLen and ibtn-pointer arrays, to make the code
  more generic and less dependent on the (maximal) number of buttons
  in the message boxes.

- Move around the code that computes the positions and sizes of the
  window controls.
2018-08-17 17:12:22 +02:00
Hermès Bélusca-Maïto
e3fee2db82
[USER32] Get rid of the old MSGBOXINFO structure and use the new internal MSGBOXDATA structure instead. 2018-08-17 17:12:21 +02:00
Hermès Bélusca-Maïto
b55cf70340
[USER32] Code formatting only. 2018-08-17 17:12:21 +02:00
Hermès Bélusca-Maïto
cb77cc707f
[USER32] Specify the font to be used for the message-box in its dialog template, using DS_SETFONT and a font point size of 0x7FFF, instead of passing a font handle and setting the font of each control manually.
Also improve the flags used in the DrawTextW() call for calculating
the size to be taken by the message-box text.
2018-08-17 17:12:20 +02:00
Hermès Bélusca-Maïto
fcfcf7a5c9
[USER32] Move related functions close to each other. 2018-08-17 17:12:19 +02:00
Hermès Bélusca-Maïto
5e4b3c7cf0
[USER32] Code formatting/indentation fixes only. 2018-08-17 17:12:15 +02:00
Thomas Faber
7b2bb85ceb
[WIN32K:NTUSER] Fix type confusion in MsgMemorySize. 2018-08-16 14:13:47 +02:00
Katayama Hirofumi MZ
11b7619a71 [WIN32SS] Fix DrawText wrt DT_CALCRECT | DT_VCENTER (#745)
The test program: https://jira.reactos.org/secure/attachment/47925/TnB3.zip
CORE-14896
2018-08-15 19:50:19 +02:00
Denis Malikov
9e198799d4 [WIN32SS][USER] fixing couple typos for WINVER >= 0x600
CORE-12596
2018-08-15 18:27:31 +02:00
Katayama Hirofumi MZ
35f62fc5ba [WIN32SS][FONT] Fix font metrics (#713)
Fix vertical alignment and Aspect penalty; improve font penalty system; fixes for Wine tests.
This is an update of #706. See CORE-11536 for more details.

The display of the following programs is fixed:
- Total Commander 8.52 setup: font displayed too large - CORE-11620.
- Effective File Search 6.8.1 german localization text rendering issues - CORE-14378.
- Font garbage in register splash screen in Foxit Reader 7.1.5 - CORE-9767.
- Calipers-1 is not displayed correctly - CORE-14302.
- Some MSI-installers draw their dialogs too large (example: Click-N-Type Virtual Keyboard 3.03.0412) - CORE-13161.
- Irfanview 4.50: font in zoom combobox displayed too large - CORE-14396.
- Rufus: The window and controls are displayed larger than necessary - CORE-14461.
2018-08-12 15:12:13 +02:00
Katayama Hirofumi MZ
83891d2843
[CONSRV] Implement support for file/directory drag-and-drop (#692).
CORE-14833
2018-08-09 14:08:05 +02:00
Hermès Bélusca-Maïto
1a89a3e731
[CONSRV] Minor code re-organization. 2018-08-08 20:46:41 +02:00
Hermès Bélusca-Maïto
a9064d3283
[CONSRV] Add a PasteText() helper function and use it. 2018-08-08 20:46:34 +02:00
Timo Kreuzer
3323d117c3 [WINSRV] Fix 64 bit issues 2018-08-04 19:19:34 +02:00
Timo Kreuzer
e9ad66d52f [USER32] Fix 64 bit issues 2018-08-04 19:19:34 +02:00
Katayama Hirofumi MZ
bfc6b719cf [USER32][WIN32SS] Implement TileWindows function (#678)
CORE-14815
2018-07-26 14:34:00 +02:00
Hermès Bélusca-Maïto
b003d68ca5
[WIN32SS:NTUSER] Update SetWindowStationUser() and NtUserSetWindowStationUser() prototypes.
Also, improve NtUserSetWindowStationUser() capture order, make psid optional as it should (and avoid a user-mode triggered BSOD), and initialize luidUser only when everything succeeded.
2018-07-22 19:26:53 +02:00
Hermès Bélusca-Maïto
9bf7fb6f42
[WIN32SS:USER] Code formatting only. 2018-07-22 19:26:50 +02:00