Commit Graph

1415 Commits

Author SHA1 Message Date
Doug Lyons
3bb1e64408
[NTGDI:FREETYPE] Account for non-breaking spaces in x-dim of IntExtTextOutW (#7479)
CORE-19768
Follow up of PR #7274. This stop WARN's from FF 28 as well.

* Make del and nbsp const's based on reviewer comments.
2024-10-26 16:44:39 -05:00
Tomáš Veselý
cf955094b4
[NTUSER] IntSetTimer(): Use timer IDs range [256,32767] as on Windows (#7277)
Based on the Doug Lyons' test in #7087, I found that my previous fix stopped working partially. Or rather, it would only work until the 32767 indexes were exhausted. It seems to me that the behavior of the bitfield has changed, because when I published the previous patch, it passed my tests.

- Bit array generates free ID cyclically, in the previous code after 32767 indexes expired the same index was returned, because of this the previous fix would stop working after expiration, so change the logic of calculating the next index.
- Change the index range to 256-32767 to match Windows, indexes 0-255 can theoretically be used as reserved for system purposes.

Addendum to fd327db20f. CORE-9141
2024-10-22 18:10:34 +03:00
Timo Kreuzer
e4930be4ff [REACTOS] Use the ISO C and C++ conformant names: _wcsicmp, _stricmp
Stop using non-conforming wcsicmp, stricmp, strcasecmp
2024-10-20 14:12:25 +03:00
Timo Kreuzer
fb9571ee3c [WIN32K] Use UserRefObjectCo in co_UserFreeWindow 2024-10-20 09:35:14 +03:00
Timo Kreuzer
08b9354ff3 [WIN32K/USER] Fix callout object referencing in co_IntUpdateWindows
Move UserRefObjectCo, so that it covers co_IntSendMessage as well.
This caused a use-after-free during testing.
2024-10-20 09:35:14 +03:00
Timo Kreuzer
9eca7c52f6 [WIN32K] ASSERT that all callout references have been cleaned up on thread exit 2024-10-20 09:35:14 +03:00
Justin Miller
690783179e [SDK][WIN32SS] Make Them Build 2024-10-19 13:45:59 -07:00
Timo Kreuzer
a2a8ce4947 [WINSPOOL.DRV] Improve some stubs 2024-10-17 18:39:37 +03:00
Hervé Poussineau
42914af218 [WIN32SS:ENG] Only accept VGASave service (ie vga.sys driver) as the real VGA device
CORE-19796
2024-10-14 23:26:11 +02:00
Hervé Poussineau
b4e781d72d [WIN32SS:ENG] Make gpPrimaryGraphicsDevice variable static 2024-10-14 23:26:11 +02:00
Hervé Poussineau
6e71e94242 [WIN32SS:ENG] Make gpVgaGraphicsDevice variable static 2024-10-14 23:26:10 +02:00
Hervé Poussineau
0d8e26588a [WIN32SS:USER] Remove assignation of gpPrimaryGraphicsDevice (already done in EngpUpdateGraphicsDeviceList) 2024-10-14 23:26:10 +02:00
Hervé Poussineau
08a6834075 [VIDEOPRT] Allow conflicting resources if this is the video base driver
CORE-18960
2024-10-11 20:35:23 +02:00
Julen Urizar Compains
d3ec7cdd48
[USER32] Hackfix for CORE-17902 - The cursoricon (copyimage) that returns NULL to render - LR_COPYFROMRESOURCE (#6886)
* [USER32] Hackfix for CORE-17902 - The cursoricon (copyimage) that returns NULL to render - LR_COPYFROMRESOURCE

---------

Co-authored-by: Hermès BÉLUSCA - MAÏTO <hermes.belusca-maito@reactos.org>
2024-10-07 05:46:02 -05:00
Timo Kreuzer
db419efbf2 [WIN32K] Fix protection of USER heap
Create the section with PAGE_READWRITE, not PAGE_EXECUTE_READWRITE and map in user mode with PAGE_READONLY, not PAGE_EXECUTE_READ.
Original commit was ea5261f in 2006. The comments suggest that back then the heap code had issues with it, which is not the case anymore.
2024-09-24 13:32:28 +03:00
Timo Kreuzer
dbb72f4923 [NTUSER] Fix unaligned access in co_IntSetWindowLongPtr 2024-09-15 12:09:09 +03:00
Timo Kreuzer
201f00ab6f [USER32][NTUSER] Implement (NtUser)SetClassLongPtr(A/W) 2024-09-15 12:09:09 +03:00
Timo Kreuzer
402bc38ba7 [NTGDI] Rewrite NtGdiPolyDraw
It is now a wrapper around GdiPolyDraw, which implements the main body of the function, while the Nt function only probes and captures the user mode data into safe kernel mode buffers.
Previously some people thought it was a great idea to just wrap the entire implementation in SEH, so when something throws an exception somewhere for whatever reason, we can just catch it here... and LEAK ALL RESOURCES IN THE PROCESS!
TODO: Rewrite all of this. It's broken everywhere.
2024-09-12 15:52:30 +03:00
Timo Kreuzer
7774a249ba [WIN32K:ENG] Fix return value in EngAlphaBlend 2024-09-09 22:16:00 +03:00
Timo Kreuzer
9414fb6b59 [NTGDI] Prevent NULL pointer dereference in CLIPPING_UpdateGCRegion
This can happen, when the paged pool is full. This will probably cause drawing issues, but at least we don't crash (in this place).
2024-09-08 03:20:52 +03:00
Timo Kreuzer
b385fc5985 [NTUSER] Fix a 64 bit bug in timer code
The return value of RtlFindClearBitsAndSet is an ULONG, assigning it to an ULONG_PTR will not sign extend it. The error value will stay 0xFFFFFFFF. Comparing it to (UINT_PTR)-1 will sign extend and thus compare it to 0xFFFFFFFFFFFFFFFF on x64.
Also use NUM_WINDOW_LESS_TIMERS to initialize the bitmap, rather than the calculated size. This does not make a difference with the current value (32768), but if it was not the case, the bitmap would be larger than this, resulting in invalid bitmap indices being returned, which would cause bugs later on. Finally remove an ASSERT that can be triggered by tests.
2024-09-08 01:52:50 +03:00
Timo Kreuzer
6ca6088f2c [NTUSER] Increase desktop heap size
Distinguish between the following 3 scenarios:
1. Interactive Winsta0, "Winlogon" desktop: use 128 KB
2. Interactive Winsta0, "Default" & other desktop: use 3 MB (x86) / 20 MB (x64)
3. Non-interactive winsta: use 128 KB

This is what Windows 2003 uses for the interactive desktops on x86 and what Windows 7 uses for x64. Fixes desktop heap exhaustion during testing. The previous value was 512 KB for all desktops.
It doesn't handle the even smaller "Disconnected" desktop, which is only meaningful for RDP sessions and we don't use it anyway.
See comments in the file for references.
2024-09-07 18:47:49 +03:00
Doug Lyons
07abea90d9
[NTUSER] Optimize BroadcastSystemMessage a bit. Follow-up of #6884 (#7215)
Optimize BroadcastSystemMessage with Environment parameter.
Minimize processing when UserModeMsg->lParam is NULL and KernelModeMsg->message != WM_WININICHANGE
Make sure that we have a UNICODE_NULL within lParamMsg based on comment from @whindsaks
2024-09-01 13:24:22 -05:00
Doug Lyons
a1bff5b94e
[NTGDI:FREETYPE] Account for spaces in x-dimension of IntExtTextOutW function (#7274)
@I_Kill_Bugs fix

CORE-11787, CORE-17721 and CORE-19721

For function IntExtTextOutW with space character, the x-dimension should be taken into account.
Fixes HexEdit 1.2.1 right side of display window not being cleared.

Account for x-dimension if TA_UPDATECP flag set and 'String' is not NULL.

Clarify 'etx' is ASCII End of Text
2024-09-01 13:18:23 -05:00
Marek Benc
633d2e6d0c
[NTUSER] Address memory leak in co_WinPosSetWindowPos(). (#7284)
CORE-19723
2024-08-31 15:07:33 -05:00
Timo Kreuzer
34586814ab [GDI32][NTUSER] Demote noisy debug prints 2024-08-30 16:06:41 +03:00
Doug Lyons
9c0eee0333
[NTUSER] Fix window not updating when scrollbars created and removed. (#7245)
* Revise conditions for window complete redraw.

CORE-19669

Co-authored-by: Oleg Dubinskiy <oleg.dubinskij30@gmail.com>
Co-authored-by: Vitaly Orekhov <7opex0@mail.ru>
2024-08-28 02:56:28 -05:00
Tomáš Veselý
fd327db20f
[NTUSER] IntSetTimer: Update HintIndex on each call (#7087)
* fix CORE-9141 - adding a change to IDEvent after each pass
If the first index is 0 the first returned ID will be 0x8000, which is fine.
Co-authored-by: Joachim Henze <joachim.henze@reactos.org>
2024-08-27 01:14:51 -05:00
Serge Gautherie
44662eaf62 [CMAKE] Use COMPILE_OPTIONS instead of superseded COMPILE_FLAGS
for set_source_files_properties().
2024-08-21 11:34:48 +03:00
Gabriele Lo Re
fbcbbd8768
[TRANSLATION] Improve Italian (it-IT) translation part 2 (#7248) 2024-08-21 01:29:34 +02:00
Whindmar Saksit
82a45262bf
[NTUSER] Correctly store original unsnap position (#7244)
A small change before PR #5705 was merged caused a severe downgrade in the snap/unsnap handling. Win key handling should work correctly now.

CORE-19165 CORE-19166
2024-08-15 12:33:17 +02:00
Serge Gautherie
6756c2ad03 [*_VISTA] Add/Improve version resources 2024-08-13 12:39:42 +02:00
Whindmar Saksit
f3d03760e9
[NTUSER] Rewrite Window Snap handling (#5705)
Fixes many Window Snap related bugs and uses the WS_EX2_VERTICALLYMAXIMIZED* styles to remember which edge it is snapped to.

The most significant change is that GetWindowPlacement lies about the normal position when it is snapped, just like Windows.

CORE-19160 CORE-19165 CORE-19166
2024-08-11 20:21:58 +02:00
Doug Lyons
9ee30c57fd
[NTUSER] Fix popup menu placement when part way off right edge of screen (#7220)
* Move the popup menu to the right edge of the screen when it is past the screen edge on the right.

CORE-19706
2024-08-10 16:00:44 -05:00
Doug Lyons
90de2b660b
[NTUSER] Implement BroadcastSystemMessage with 'Environment' parameter (#6884)
* [NTUSER] Implement BroadcastSystemMessage with 'Environment' parameter

CORE-19372
CORE-19583

* Changes based on reviewer comments.

* Make sure that lParamMsg has a UNICODE_NULL in it.

* Skip extra handling of 1 word messsages.
2024-08-04 02:53:04 -05:00
Katayama Hirofumi MZ
7e8de0466d
[NTUSER] Use co_UserActivateKeyboardLayout in loading (#7200)
Refactoring on keyboard layout.
JIRA issue: CORE-19268
- Delete co_UserActivateKbl function.
Use co_UserActivateKeyboardLayout
  function instead of
  co_UserActivateKbl in
  co_IntLoadKeyboardLayoutEx
  function.
- Improve
  co_UserActivateKeyboardLayout.
2024-08-02 04:35:05 +09:00
Katayama Hirofumi MZ
063e5e2514
[USER32] Simplify CliSaveImeHotKey (#7199)
Code diet. RegCreateKeyExW will
create sub-keys recursively, so
this code is okay.
JIRA issue: CORE-19268
Simplify registry key creation code.
2024-07-31 03:50:29 +09:00
Katayama Hirofumi MZ
dcf0788f59
[IMM32][SDK][USER32] Fix ImmFreeLayout parameter (#7195)
JIRA issue: CORE-19268
- Define ImmFreeLayout parameter special
  values (HKL_SWITCH_TO_NON_IME and
  HKL_RELEASE_IME) at <imm32_undoc.h>.
- Make ImmFreeLayout parameter an HKL.
2024-07-30 11:45:23 +09:00
Katayama Hirofumi MZ
7dd081e945
[SDK][NTUSER] s/KLF_UNLOAD/KL_UNLOAD/ (#7196)
JIRA issue: CORE-19268
- Rename KLF_UNLOAD as KL_UNLOAD.
- Move it from win32ss/user/ntuser/input.h
  to sdk/include/reactos/undocuser.h.
- Add UKL_NOACTIVATENEXT constant
  and use it.
2024-07-29 19:30:49 +09:00
Katayama Hirofumi MZ
ec24b54731
[IMM32][NTUSER] Use HandleToUlong, UlongToHandle etc. macros (#7180)
Respect coding standard.
JIRA issue: N/A
- Use HandleToUlong, UlongToHandle,
  UlongToPtr etc. macros for type
  casting.
- Remove redundant casts.
2024-07-29 07:15:44 +09:00
Tomáš Veselý
466a19817f
[COMCTL32][USER32] STATIC: Fix grayed drawing (#7024)
CORE-15298

Use DrawTextW() to correctly render disabled grayed text.
Applies to both dll\win32\comctl32\static.c and win32ss\user\user32\controls\static.c

A similar solution is already used by button.c!BUTTON_DrawLabel().
2024-07-18 22:03:36 +02:00
Serge Gautherie
c6298321a3
[NTUSER] Fix IntDefWindowProc()'s WM_MOUSEACTIVATE case (#7038)
CORE-17545

Clang 13.0.1 was warning about broken 'Ret' handling.
Also remove an unrelated redundant 'else ...'.

Addendum to commit 6dfa71c487 (r68904).
2024-07-18 20:35:04 +02:00
Serge Gautherie
5385f32794
[NTUSER] defwnd.c: Trivial formatting fixes (#7038)
And (re)move 2 'break;'.
2024-07-18 20:33:11 +02:00
Doug Lyons
fb87f0f88c
[NTUSER] Fix popup menu position when menu item is half off the left side of the screen (#7108)
[CORE-16729](https://jira.reactos.org/browse/CORE-16729)
2024-07-16 14:36:45 -05:00
Andrei Miloiu
fc7bc3bbbd
[LOCALMON] Update Romanian (ro-RO) translation (#6877) 2024-07-16 21:20:16 +02:00
George Bișoc
4093d0e164
[NTUSER] Estabilish power callouts and invoke the cleanup procedure when unloading Win32k 2024-07-13 11:30:19 +02:00
George Bișoc
181b666fc4
[NTUSER] Stubplement the Win32 power manager
In order for the NT power manager to interact with the Win32 subsystem (thus the whole rest of the system), the Win32 kernel-mode subsystem provides a mechanism that communicates with the kernel power manager via power callouts (aka power requests as per Windows' PDB symbols).
Such mechanism enters in action as soon as Win32 callout routines are estabilished with the PsEstablishWin32Callouts() function.

The NT power manager, the power policy manager respectively, invokes a power callout to denote an exceptional phenomena as a result of power policies or capabilities changes, turning ON/OFF the display, a system time change has occurred, etc.
Such scenarios are described as power events of which the NT power manager sends a WIN32_POWEREVENT_PARAMETERS packet to Win32k via the estabilished "PowerEventCallout" pointer function callout.
For other callouts that inform the Win32 subsystem of impeding power state changes across the system or devices, these are sent as WIN32_POWERSTATE_PARAMETERS packets with its own separate callout.

The purpose of such mechanism is to give Win32k the opportunity to do power related tasks and alert every application of such power events in accordance with what it gets notified by the NT power manager.
Currently this patch stubplements this mechanism in ROS, it is only just the barebones for now. The development of the Win32 power manager will go in parallel with the kernel power manager development (expand, improve, fix the code of issues that whatever may arise).
So far only the PsW32SystemTime power event is implemented for the moment being. This work was decoupled from PR #5719 to avoid clobbering it too much.

=== TODO ===

- Implement power states management communication with the kernel power manager
- Implement the rest of the power events in IntHandlePowerEventWorker
- Implement power event handling in CSRSS (or WinSrv?) which handles any of the events that could not be handled by Win32k otherwise
- Estabilish the power state callout in PsEstablishWin32Callouts() (currently there is no a pointer function that gets assigned to such callout)

CORE-18969
2024-07-13 11:30:19 +02:00
George Bișoc
560428e250
[WIN32K] Add debug switch for the Win32 power manager 2024-07-13 11:30:07 +02:00
Oleg Dubinskiy
04f04efc96
[NTGDI] FontLink: avoid invalid font name buffer freeing (#7131)
Don't free the linked font name if it's already NULL. Since it is allocated only once (when loading the font name from Registry), it should be freed only once too. All subsequent freeing attempts will result in invalid pool freeing.
This fixes the 0xC2 BAD_POOL_CALLER bugcheck when trying to resize window (and draw more text) from soundcloud.com in K-Meleon 76.5.4 Goanna engine and when switching between channels (during redrawing the text) in DiscordMessenger v1.06 Beta.
Addendum to 0f9e889736.
CORE-19681
2024-07-11 14:27:26 +02:00
Hermès Bélusca-Maïto
c02289a08a
[UXTHEME][NTUSER] Check class style for CS_NOCLOSE instead of window style (#7130)
CORE-11569, CORE-19684

Addendum to commit 71bed0f5f8 (PR #7123).

The problem in uxtheme was introduced in commit 685084b63c (as part
of a fix for CORE-17203), because it was a copy-paste and adaptation
of the corresponding code in `ntuser/nonclient.c!NC_DoButton()`.

The bugs in `win32ss/user/ntuser/defwnd.c` (and `nonclient.c` as fixed by
the previous commit) were in turn introduced from the migration of menu
and related code from user32 to win32k, see commit 6dfa71c487 (r68904).
2024-07-10 19:49:09 +02:00