This is an alternate solution to avoid creating shared memory and thread in the server. A new service is introduced and started as early as possible. It will setup read-only shared memory for other processes when they request it through an ioctl, initializing the pages with the provided data, and then update the timestamps there on a regular basis.
If the service is not yet started - which can happen for the initial processes and other services, then the process uses the current user shared data implementation, where no timestamp update is done.
Andrew Wesie (1): ntdll/tests: Test updating TickCount in user_shared_data.
Rémi Bernon (2): wineusd.sys: Add new service to update user shared data continuously. ntdll: Use the new WineUsd service to map user shared data.
configure.ac | 1 + dlls/ntdll/ntdll_misc.h | 1 + dlls/ntdll/server.c | 2 + dlls/ntdll/tests/time.c | 26 +++ dlls/ntdll/thread.c | 34 ++++ dlls/wineusd.sys/Makefile.in | 6 + dlls/wineusd.sys/wineusd.sys.spec | 1 + dlls/wineusd.sys/wineusd_main.c | 274 ++++++++++++++++++++++++++++++ include/wine/usd.h | 27 +++ loader/wine.inf.in | 12 ++ 10 files changed, 384 insertions(+) create mode 100644 dlls/wineusd.sys/Makefile.in create mode 100644 dlls/wineusd.sys/wineusd.sys.spec create mode 100644 dlls/wineusd.sys/wineusd_main.c create mode 100644 include/wine/usd.h