15 Commits
Author SHA1 Message Date
mirkobrombin 1ac83441a2 docs: note how component behaviour can be checked
Assisted-by: Claude Code:claude-opus-5-5
AI-Scope: reference notes in comments of raven-dwrite, seh and environment
2026-11-02 05:57:19 +00:00
Raymond Bennett 01577e440e feat: serve ntdll's critical sections from the guest RTL and give the PEB its lock
Zig's standard library calls RtlEnterCriticalSection and
RtlLeaveCriticalSection on the PEB's FastPebLock before it reads the process
parameters, and stopped at the first call. ntdll's critical section functions
now forward to the guest RTL, which already serves kernel32's (the Rtl
forms answer an NTSTATUS), and the PEB names a free critical section at
FastPebLock (PEB+0x38, PEB+0x1c for 32-bit programs) next to the loader lock.

Assisted-by: Claude Code:claude-opus-5-5
AI-Scope: the RTL exports, the ntdll forwarding rule and the PEB field
(cherry picked from commit bd07c49ed7df6c38fa76c4a27597811eb9b76ea6)
2026-10-30 08:34:15 -07:00
mirkobrombin eb54ee27a2 fix: keep every shared user data page current from one thread
Assisted-by: Claude Code:claude-opus-5-5
AI-Scope: Moved the shared user data clock updates to a single host thread that serves every page, so a host running several guest processes keeps one thread.
2026-10-30 07:36:01 +00:00
Raymond Bennett f84e160586 fix: keep the clocks in the shared user data page current
KUSER_SHARED_DATA held the tick count, interrupt time and system time of the
moment the process started. Go reads its monotonic and wall clocks straight
from the page, so time stood still in every Go program: restic's scrypt
calibration never saw time pass and asked for parameters too large to use,
and the scheduler never saw a goroutine run long.

The page is now shared with the host, which rewrites the clock fields every
millisecond, in the order KSYSTEM_TIME readers rely on (second high word,
low word, first high word). The tick count counts ticks of 15.625 ms, as the
TickCountMultiplier the page declares says. map_shared can place a view at a
given address for this.

Assisted-by: Claude Code:claude-opus-5-5
AI-Scope: the shared page, its clock updates and the fixed-address view
(cherry picked from commit 9238cbcfb1c5611df67b295b71085176f5ddbebc)
2026-10-28 23:16:28 -07:00
mirkobrombin 4d0e2b4be1 fix: preserve thread context during served API calls 2026-10-24 23:29:27 +02:00
mirkobrombin 0a0fe4be89 feat: add shared Windows process state and parallel guest execution 2026-10-24 16:24:23 +00:00
Mirko Brombin ca7c6a3f13 feat: dispatch exceptions and unwind generated code as Windows does, with the shared user data page 2026-09-23 00:12:49 +00:00
Mirko Brombin ead54d6b10 feat: run Google Chrome with NT object queries, COM apartments, file completion ports and SDDL descriptors 2026-09-03 21:44:05 +02:00
Mirko Brombin 26fbeabc78 feat: run Steam's web UI with cross-process handles, per-thread message queues, socket events and process identity 2026-09-03 16:48:12 +02:00
Mirko Brombin bc37ed5e58 feat: add time slice guest threads and wait on events through the scheduler 2026-08-02 05:26:50 +02:00
Mirko Brombin 8789133e17 feat: run guest threads, critical sections, heap and ANSI window calls in 32-bit programs 2026-08-02 00:07:11 +02:00
Mirko Brombin efc6104b5b feat: add kernel32 services, guest threads and structured exceptions for PE64 processes 2026-07-31 21:45:18 +02:00
Mirko Brombin b003ca207d feat: run PE32 executables through native compatibility mode 2026-07-31 17:32:59 +02:00
Mirko Brombin 98e8b4b9c4 feat: add native standard file handles and process exit status 2026-07-31 17:13:19 +02:00
Mirko Brombin 154272073d feat: preserve native C++ migration 2026-07-31 16:46:25 +02:00