Commit Graph
52 Commits
Author SHA1 Message Date
Katayama Hirofumi MZ 19b19ec305 [USER32][COMCTL32] Edit control: Fix alignment mask (#9115)
Based on JIRA user I_Kill_Bug's "Edit Alignment.patch".
JIRA issue: CORE-20631
- Add (ES_LEFT | ES_RIGHT | ES_CENTER) flags to
  style_change_mask variable.
2026-06-09 13:52:46 +09:00
Timo Kreuzer 104d889c7a [ROSTESTS] Do not compile tests that should not run
With automatic test list creation, whatever is built will also run.
2026-05-15 16:50:48 +00:00
Timo Kreuzer 1cf31524d5 [REACTOS] Stop using non-conforming swprintf / vswprintf
Use the underscored versions instead.
2026-05-07 06:27:58 +00:00
Ratin Gao 36ffee8ea3 [WIN32SS:NTUSER] Implement SharedUserData->LastSystemRITEventTickCount (#8537)
This field was introduced in NT5.1, records the tick count of the last user input
(system-wide), updated at most once per minute (or once per second since NT6.0).

Unlike `GetLastInputInfo` which is designed for providing session-specific
user input information, `SharedUserData->LastSystemRITEventTickCount` provides
system-wide time, used by:
- [Task Schedule (TASK_EVENT_TRIGGER_ON_IDLE)](https://learn.microsoft.com/en-us/windows/win32/taskschd/i)
- [Inactivity Monitoring](https://learn.microsoft.com/en-us/windows/win32/devnotes/inactivity-monitoring)
- Maybe some places I don't know...

See also:
- [KUSER_SHARED_DATA - Geoff Chappell](https://www.geoffchappell.com/studies/windows/km/ntoskrnl/inc/api/ntexapi_x/kuser_shared_data/index.htm)
- [TASK_TRIGGER_TYPE enumeration - Microsoft Learn](https://learn.microsoft.com/en-us/windows/win32/api/mstask/ne-mstask-task_trigger_type)
- [Task Scheduler: idle conditions](https://learn.microsoft.com/en-us/windows/win32/taskschd/i)
- [GetLastInputInfo function - Microsoft Learn](https://learn.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-getlastinputinfo)
- [Inactivity Monitoring](https://learn.microsoft.com/en-us/windows/win32/devnotes/inactivity-monitoring)

## Proposed changes

Before this PR, `SharedUserData->LastSystemRITEventTickCount` is never used
and always 0, `gpsi->dwLastSystemRITEventTickCountUpdate` is never used too.
After this PR, `SharedUserData->LastSystemRITEventTickCount` updates correctly
by using `gpsi->dwLastSystemRITEventTickCountUpdate` to record previous update
time, the behavior is the same as on Windows.
2026-03-08 18:58:37 +01:00
Timo Kreuzer f5d44e1081 [REACTOS] Remove unneeded __ROS_LONG64__ 2025-12-01 22:10:06 +02:00
Hermès Bélusca-Maïto ba36b907ad [WINLOGON][WLNTFYTESTS] Implement loading notification DLLs in safe-boot mode (#8278)
Historical note:
Investigation shows that this functionality, introduced between builds
1902 and 1906 of Windows NT 5.0 (future 2000) Beta 3, has always been
"nop-ed" and has remained this way till Windows Server 2003.
The value read from the "SafeMode" registry value is unconditionally
overridden afterwards, causing the notification DLLs to always be loaded.

In ReactOS, this functionality is restored, and only the notifications
tagged as such are loaded in SafeMode.

Furthermore:
Analysis of strings in Win2000 and WinXP/2003 winlogon.exe, show that
the "Safe" registry value doesn't exist for notifications; instead,
it is named "SafeMode".
The "Safe" value appears only for the SensLogn (SENS Winlogon Event) handler
registry entry. My hypothesis is that the value name is a typo for the
"SafeMode" value. It has been introduced in the `\Winlogon\Notify\SensLogn`
registry entry for SensLogn around Windows NT 5.0 build 1946.
2025-07-30 17:46:54 +02:00
Hermès Bélusca-Maïto b74e243579 [WINLOGON][WLNTFYTESTS] The "Enabled" registry value doesn't exist for notifications (#8276)
Analysis of strings in Win2000 and WinXP/2003 winlogon.exe, show that
the "Enabled" registry value doesn't exist for notifications.

This value is actually only used by the ScCertProp (Smart Card Certificate
Propagation) notifications, in wlnotify.dll, to enable or disable certificate
progagation.[^1]

Note that whatever the "Enabled" registry value is, the notification DLL
is still loaded within winlogon.exe.

We however keep the `bEnabled` internal flag, so as to be able to disable
at runtime notifications that could not be delay-loaded, or that behave
erratically, etc.

[WLNOTIFY] Add a comment about the "Enabled" value in scard.c!SCardStartCertProp()

[^1]: For more information, see:
https://www.microfocus.com/documentation/securelogin/9.0/administration_guide/blm54qb.html?view=print
https://www.betaarchive.com/wiki/index.php?title=Microsoft_KB_Archive/925884
2025-07-30 12:37:23 +02:00
Hermès Bélusca-Maïto 50b1242e99 [WLNTFYTESTS] Add extended tests for the Winlogon notifications
Introduce and use a minimal testing framework (minitest.h) based on
an updated version of `wine/test.h`.

Each notification handler becomes its own test. Useful macro and
function helpers have been introduced to simplify the code that is
duplicated for each handler.

See commit 38d07d3a24 (PR #8234) for the details of how to install
and use the notification dll.

These tests can exercise the notifications in the four cases, where
asynchronous events and user impersonation can be independently
enabled or disabled. To do this, the `Asynchronous` and `Impersonate`
registry `REG_DWORD` values, inside the `WLNotifyTests` subkey of:
  `HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\Notify`
must be set to their intended values[^1].

----

[^1]: https://learn.microsoft.com/en-us/windows/win32/secauthn/registry-entries

----

Current test results:

- When each notification is emitted, the DLL is loaded then unloaded:
  ```
  err:(modules\rostests\win32\winlogon\wlntfytests\wlntfytests.c:1307)
  WLNOTIFY(ac.b0):  Entering `DllMain`(hInst: 0x10000000, dwReason: 0x1, pReserved: 0x00000000)
  ...
  err:(modules\rostests\win32\winlogon\wlntfytests\wlntfytests.c:1307)
  WLNOTIFY(ac.b0):  Entering `DllMain`(hInst: 0x10000000, dwReason: 0x0, pReserved: 0x00000000)
  ```
  This doesn't happen on Windows. And indeed, it should _not_ happen,
  because otherwise the DLL would loose any of its internal global state
  between consecutive notification calls. This currently happens in
  ReactOS, where we can observe the following:
  ```
  modules\rostests\win32\winlogon\wlntfytests\wlntfytests.c:788: Test failed: **** WLEventLogon: ERROR: Wrong state NON-INITIALIZED, expected Startup or Logoff
  ...
  err:(modules\rostests\win32\winlogon\wlntfytests\wlntfytests.c:1036) **** WLEventLogon: Changing state NON-INITIALIZED to Logon
  ```
  and similar for every other notification.

- Test results for each notification:
  ```
  WLEventStartup: 30 tests executed (0 marked as todo, 1 failure), 0 skipped.
  WLEventLogon: 30 tests executed (0 marked as todo, 4 failures), 2 skipped.
  WLEventStartShell: 30 tests executed (0 marked as todo, 4 failures), 2 skipped.
  -- Note: missing WLEventPostShell --
  WLEventLock: 30 tests executed (0 marked as todo, 4 failures), 2 skipped.
  WLEventUnlock: 30 tests executed (0 marked as todo, 4 failures), 2 skipped.
  WLEventStartScreenSaver: 30 tests executed (0 marked as todo, 10 failures), 0 skipped.
  WLEventStopScreenSaver: 30 tests executed (0 marked as todo, 9 failures), 0 skipped.
  WLEventLogoff: 30 tests executed (0 marked as todo, 5 failures), 2 skipped.
  WLEventShutdown: 31 tests executed (0 marked as todo, 5 failures), 0 skipped.
  ```
2025-07-28 22:04:05 +02:00
Hermès Bélusca-Maïto 38d07d3a24 [WINLOGON/WLNTFYTESTS] Add semi-"interactive" tests for Winlogon notifications (#8234)
Add a `wlntfytests.dll` in `ReactOS\bin\suppl`, containing tests for Winlogon notifications.

To use it:
- Register the dll with `regsvr32 <path_to>\wlntfytests.dll` and reboot
  the machine.
- With a debugger, observe the traces emitted by the dll, whenever any
  Winlogon notification is emitted. If Winlogon debugging is enabled,
  a debug-break is made everytime a notification is invoked.
- Once testing is done, unregister the dll with `regsvr32 /u <path_to>\wlntfytests.dll`
  and reboot the machine.

For each received notification, the handlers dump the contents of the
`WLX_NOTIFICATION_INFO` structure, and verify that the notifications
are received in the correct expected order. This is done by keeping
what the previous received notification was, before comparing it with
the expected one(s) that must precede the new notification being received.

References:
- https://learn.microsoft.com/en-us/windows/win32/secauthn/creating-a-winlogon-notification-package
- https://learn.microsoft.com/en-us/windows/win32/secauthn/winlogon-notification-events
- https://rsdn.org/article/baseserv/winlogon.xml
2025-07-08 21:21:11 +02:00
Hermès Bélusca-Maïto 9c053ec989 [ROSTESTS] Add the interactive buttonvistest to the build 2025-07-07 19:28:14 +02:00
Mark Jansen 49c40a2941 [PROGMAN][MSPORTS][VFDLIB][CONSRV] Update resource encoding to be utf8 2025-03-26 16:39:43 +01:00
Katayama Hirofumi MZ fe11f7a2e5 [REACTOS] Refresh old URLs (#7632)
URLs are getting old. We have to
update URLs for documentation
purpose.
JIRA issue: CORE-19963
- Refresh old URLs.
- Add " (DEAD_LINK)" labels
  to dead links.
- Use MS Learn links rather
  than MSDN ones.
- Some dead links revived by
  Web Archive.
- Don't change Wine Tests
  and Wine Sync.
- Don't change 3rd party libraries.
- Don't append "redirected" labels.
2025-01-28 13:36:45 +09:00
Timo Kreuzer 0c2cdcae83 [REACTOS] Add missing line breaks at end of file 2024-10-06 10:47:11 +03:00
Timo Kreuzer 73c6e99e14 [TESTS] Disable cmd:reactos, it's broken 2024-09-18 10:22:26 +03:00
Andrei Miloiu 416e6ef814 [MYEVENTPROVIDER_DLL][MC] Update MyEventProvider.mc (#5929) 2023-11-08 11:18:07 +00:00
Joachim HenzeandKatayama Hirofumi MZ 0eecebb1cc [KBDLAYOUT] Avoid (DLGPROC) cast (#5698)
- Avoid DLGPROC-cast
- Bring header-section closer to our coding guidelines
- Strip inconsistent empty-lines
- Strip useless return at the end of void func

Co-authored-by: Katayama Hirofumi MZ <[email protected]>
2023-09-18 11:48:33 +00:00
Andrei Miloiu cdfd8f4e1b [MYEVENTPROVIDER_DLL][MC] Add Romanian (ro-RO) translation to message table (#5430) 2023-07-13 23:16:27 +03:00
Hermès Bélusca-Maïto 9393fc320e [FORMATTING] Remove trailing whitespace. Addendum to 34593d93.
Excluded: 3rd-party code (incl. wine) and most of the win32ss.
2021-09-13 03:52:22 +02:00
Hermès Bélusca-Maïto bbabe2489e [FORMATTING][TRANSLATION] Remove trailing whitespace. Addendum to 34593d93.
Excluded: 3rd-party code (incl. wine).
2021-09-13 03:52:21 +02:00
Hermès Bélusca-Maïto 9b1edceae1 [REACTOS] Fix some instances of DPRINTs with trailing whitespace before newlines. 2021-09-13 03:52:19 +02:00
Hermès Bélusca-Maïto 4f4af5d271 [CMD_ROSTEST] Add tests for CALL label parsing, and for CALL and GOTO behaviour.
Tests adapted from https://stackoverflow.com/q/31987023/13530036
and from https://stackoverflow.com/a/38938416/13530036 .

- Test when CALL with a label containing /? actually calls GOTO's help,
  and test when CALL's help is displayed instead.

- Test when CALL with a label containing /?, but specified by variables,
  do NOT trigger GOTO's or CALL's help.

- Test the effect of the presence of escape carets in CALL label string.

- Test that CALL indeed supports double delayed expansion. Adapted from
  https://stackoverflow.com/a/31990563/13530036 .
2020-09-27 19:04:51 +02:00
Adam Słaboń 50ff453434 [TRANSLATION] Polish translation update (#3233) 2020-09-26 21:42:36 +03:00
Hermès Bélusca-Maïto 7988a2ac54 [CMD_ROSTEST] Add more tests for the command echoer and new tests for the parser. 2020-09-26 17:51:07 +02:00
Hermès Bélusca-Maïto f5cf67f455 [CMD_ROSTEST] Add tests for SET /A errorlevels. 2020-09-23 00:22:48 +02:00
Hermès Bélusca-Maïto 0b400bbb98 [CMD_ROSTEST] Add tests for particular ERRORLEVEL behaviour in some commands. 2020-09-23 00:22:45 +02:00
Hermès Bélusca-Maïto 69258973e0 [CMD_ROSTEST] Add tests for the FOR /F "tokens=" command. See commit 0695ecbf. 2020-09-22 23:08:13 +02:00
Hermès Bélusca-Maïto 014efdf7e8 [CMD_ROSTEST] Add tests for delayed expansion. 2020-09-19 19:44:53 +02:00
Hermès Bélusca-Maïto 4c9d322c68 [CMD_ROSTEST] Add tests for EXIT and CMD returned exit code values.
CORE-10495 CORE-13672

See also commits 8cf11060 (r40474), 26ff2c8e and 7bd33ac4.

More information can be also found at:
https://stackoverflow.com/a/34987886/13530036
and
https://stackoverflow.com/a/34937706/13530036
2020-08-19 20:36:02 +02:00
Hermès Bélusca-Maïto 71cd64d66a [CMD_ROSTEST] Add tests for GOTO label parsing. 2020-08-19 20:36:01 +02:00
Hermès Bélusca-Maïto aee1dd2972 [CMD_ROSTEST] Add tests for GOTO :EOF 2020-08-19 20:36:00 +02:00
Hermès Bélusca-Maïto 8ed9a46dc2 [CMD_ROSTEST] Add tests for GOTO and CALL label search ordering. 2020-08-19 20:35:59 +02:00
Hermès Bélusca-Maïto 7f8792e005 [CMD_ROSTEST] Add tests for batch execution flow with GOTO and CALL commands.
- Tests for GOTO across IF parenthesized block (parser test with line
  continuation at closing parenthesis).

- Tests for showing how FOR-loops stop when a GOTO is encountered.

- Tests for EXIT command within IF block.
2020-08-19 20:35:58 +02:00
Hermès Bélusca-Maïto 988f8bd2f6 [CMD_ROSTEST] Add tests for the command echoer. 2020-08-19 20:35:55 +02:00
Hermès Bélusca-Maïto 23a52b2285 [CMD_ROSTEST] Minor improvements for the echo-ed info of the builtins tests. 2020-08-19 20:35:53 +02:00
Hermès Bélusca-Maïto d85d991679 [CMD_ROSTEST] Sync batch.c with cmd_winetest' counterpart. 2020-08-19 20:35:53 +02:00
Timo Kreuzer 42d2d5ec9c [ROSTESTS] fix x64 build and fix/disable warnings 2020-01-26 11:50:37 +01:00
Mark Jansen 67d10c5b17 Change whitespace so gcc 8.3 wont falsely complain about misleading indentation 2019-12-27 19:50:23 +01:00
Doug Lyons 79d67dc846 Merge pull request #1889 from Doug-Lyons/find_regression_test
Add Regression test for "find" using BAT with Conditionals "&&" and "||"
2019-09-01 23:03:16 +02:00
Jérôme Gardou 23373acbb9 [CMAKE] Use modules instead of shared libraries
There is no need to compile our DLLs as shared libraries since we are
managing symbols exports and imports through spec files.

On my system, this reduces the configure-time by a factor of two.
2019-04-06 17:43:38 +02:00
Baruch Rutman acb1f24085 [ROSTESTS] Add a test program. (#890)
Add a test program that shows how the *PSMTextOut() functions draw
the strings by a side by side comparison between LpkPSMTextOut() and
UserLpkPSMTextOut().
2018-10-08 16:17:55 +02:00
Baruch Rutman 1fc041c91a [BIDITEXT] Add more demo code. (#842)
Add code that demonstrates the use of the lpOrder and lpCaretPos struct members of GCP_RESULTS w/ and  w/o GCP_REORDER flag.
Changed demo string literals to arrays containing character unicode values.
2018-09-09 18:03:48 +02:00
Hermès Bélusca-Maïto c035f4648b [ROSTESTS] Add a test for the MB_SERVICE_NOTIFICATION flag of the MessageBox*() APIs. 2018-08-17 21:50:08 +02:00
Hermès Bélusca-Maïto f8f08f3e9b [ROSTESTS] Rename the "softmodalmsgbox" test to "messagebox". 2018-08-17 21:50:07 +02:00
Hermès Bélusca-Maïto 5fedabbf0a [ROSTESTS] Add an interactive test for the user32.dll API SoftModalMessageBox(). 2018-08-17 17:12:23 +02:00
Hermès Bélusca-Maïto 67adf7ab78 [ROSTESTS] Add an interactive test for window stations. See also PR #621. 2018-07-22 19:03:17 +02:00
Baruch Rutman a4a59ad413 [GDI32][LPK] BiDi support for ExtTextOut and GetCharacterPlacement (#534)
Introduce BiDi (bi-directional text) support for ExtTextOut and GetCharacterPlacement, using Wine's GDI BIDI_Reorder function.
Solves the main issue with CORE-7003.

To be compatible with Win2k3+, introduce the "Language Pack" (LPK) dll.
- All the bidi code is removed from gdi32 and replaced by calls to LPK.
  Gdi32 uses dynamic linking to lpk.dll. In case of linking failure no bidi processing will be available.
- Implemented LpkGetCharacterPlacement.
- Implement LpkExtTextOut.
- Add a demo test program to show how the apis should function.
- Added all the remaining code, added special case for lpDx calculation if also GCP_GLYPHSHAPE flag was called.
  Applications that call GCP that use GCP_GLYPHSHAPE flags should also use the GCP_REORDER flag.
  (As written in https://msdn.microsoft.com/en-us/library/windows/desktop/dd144860(v=vs.85).aspx )
- Add ETO_RTLREADING flag handling.
  Imported the ETO_RTLREADING flag handling from wine, which changes the string part order (runs).
  A RRR1LLLRRR2 string without will show as RRR1LLLRRR2 without it, with it RRR2LLLRRR1.
2018-05-30 14:41:22 +02:00
Timo Kreuzer d281d14fd1 [REACTOS] Fix a number of Get/SetWindowsLong*Ptr* issues and use GWLP_* instead of GWL_* where appropriate. 2018-02-19 22:36:36 +01:00
Giannis Adamopoulos b4d691ba96 [BUTTONVISTEST] Add visual tests for buttons 2017-11-22 11:34:29 +02:00
Hermès Bélusca-Maïto aa04c84f62 [ROSTESTS] Move the tests unsupported by rosautotest under a "suppl" (supplementary) sub-directory of "reactos/bin".
Indeed, rosautotest has an annoying tendency to fail with:
    Invalid test file name: <testname>.exe
    SYSREG_ROSAUTOTEST_FAILURE
when <testname>.exe is a test that do not comply with the rosautotest
interface.
This is indeed the case for all the tests under /rostests/win32/, with the
exception of cmd_rostest.

Addendum to 8dd89c7.
2017-11-17 01:26:02 +01:00
Hermès Bélusca-Maïto 8dd89c7cfc [ROSTESTS] Start adding ReactOS-owned tests for cmd.exe, based on Wine's.
CORE-7998

Based on Wine's cmd_winetest code, this first bunch of tests check how the
"for" command should process the newlines inside its parenthesed set.
Adapted by Doug Lyons.
2017-11-17 00:58:45 +01:00