94 Commits
Author SHA1 Message Date
mirkobrombin dc1f9c1c85 feat: answer what an updater bootstrapper asks of the system
Assisted-by: Claude Code:claude-opus-5-5
AI-Scope: registry, security, shell and system answers an updater bootstrapper needs, with its test client
2026-11-03 15:48:46 +00:00
mirkobrombin 85604c2ae5 feat: list processes and their threads through NtQuerySystemInformation
Assisted-by: Claude Code:claude-opus-5-5
AI-Scope: process and thread listing in NtQuerySystemInformation and its test client
2026-11-03 12:36:15 +00:00
mirkobrombin 61a3c08744 fix: answer 32-bit heap calls in the guest
Assisted-by: Claude Code:claude-opus-5-5
AI-Scope: guest-side x86 HeapAlloc, HeapFree and GetProcessHeap paths and their test
2026-11-02 18:53:06 +00:00
mirkobrombin 8d03604833 fix: answer the calls the .NET runtime makes while starting
Assisted-by: Claude Code:claude-opus-5-5
AI-Scope: halftone palette, system search load flag and message wait mask
2026-11-02 10:04:16 +00:00
mirkobrombin 00a9989496 feat: add GetNetworkParams 2026-10-30 11:23:30 +00:00
mirkobrombin 4e74ee4863 fix: let 32-bit programs enumerate font families
Assisted-by: Claude Code:claude-opus-5-5
AI-Scope: Passed the guest call service to the 32-bit desktop, so font enumeration reaches the callback that GDI+ relies on, and added a test.
2026-10-30 10:34:51 +00:00
mirkobrombin 8e6eb23925 chore: merge pull request #73 from rayzorben/feat/ntdll-kernel32-forms 2026-10-30 06:32:59 +00:00
mirkobrombin 38c47764ad chore: merge pull request #69 from rayzorben/fix/standard-handles-inheritable 2026-10-30 06:32:59 +00:00
mirkobrombin da35d9f548 chore: merge pull request #43 from rayzorben/fix/module-handle-by-path 2026-10-30 06:32:58 +00:00
mirkobrombin a6fd705da6 chore: merge pull request #27 from rayzorben/pr/app-local-dll-precedence 2026-10-30 06:32:58 +00:00
mirkobrombin 1d561e2ecd fix: give each window its own GPU surface, hidden ones included 2026-10-29 23:18:44 +00:00
mirkobrombin 0bb7dd6f04 feat: serve Windows Runtime system classes Office asks for at startup
Assisted-by: Claude Code:claude-opus-5-5
AI-Scope: Wrote the twinapi Windows Runtime system classes, their shell and netlist hooks and the twinapi client test, after Office stopped at startup on missing runtime classes.
2026-10-29 17:10:05 +00:00
mirkobrombin ba02478235 feat: compile HLSL through an own d3dcompiler_47 2026-10-29 11:10:04 +00:00
Raymond Bennett eddfb6a619 feat: answer the ntdll forms of kernel32 functions programs call directly
Programs built without kernel32 imports, Zig's among them, call ntdll's
RtlUpcaseUnicodeChar, RtlQueryPerformanceCounter and
RtlQueryPerformanceFrequency, RtlAddVectoredExceptionHandler and its
relatives, and leave through RtlExitUserProcess. Each is the function
kernel32 has (CharUpper of one character, QueryPerformanceCounter and
QueryPerformanceFrequency, AddVectoredExceptionHandler and the others,
ExitProcess) and now runs the same handler.

Assisted-by: Claude Code:claude-opus-5-5
AI-Scope: the added names
(cherry picked from commit 6b9a401a7364d6aa1a360ee6217ef53bb3aa9456)
2026-10-29 01:30:24 -07:00
Raymond Bennett 4b98555fa6 fix: make a program's standard handles inheritable
A program's standard handles came from its creator by inheritance, so on
Windows they carry the inherit flag. Raven made them without it, and Dart's
`dart run`, which re-executes itself with its standard handles in a
PROC_THREAD_ATTRIBUTE_HANDLE_LIST, was refused with ERROR_INVALID_PARAMETER.

Assisted-by: Claude Code:claude-opus-5-5
AI-Scope: the change
(cherry picked from commit dc01c2417b95a583baec65bb82200323ba785f62)
2026-10-29 00:08:39 -07:00
Raymond Bennett 59b96ac618 fix: find a module named by its path in GetModuleHandleExW, as GetModuleHandleW does
GetModuleHandleExW looked modules up by file name only, so a full path never
matched, and on 64 bits GetModuleHandleW had no path lookup either. The .NET
host loads hostfxr.dll by its full path and then pins it with
GetModuleHandleExW(GET_MODULE_HANDLE_EX_FLAG_PIN, path), so PowerShell 7
stopped with "Failed to pin library".

Both now use GetModuleHandle's own lookup: by name, with API sets and the
trailing-dot rule, or by path, where the 64-bit loader matches the module of
that file name to the file it was loaded from (or, for the libraries Raven
serves, to the system folder GetModuleFileName reports for them).

Assisted-by: Claude Code:claude-opus-5-5
AI-Scope: the shared lookup and the 64-bit path lookup
(cherry picked from commit 9ea61e7f3c61546be696103a103181cd6ed3e5c3)
2026-10-28 23:16:13 -07:00
Raymond Bennett fd3875f197 feat: replace only listed system libraries with a program's own copy
A copy in the program's folder now loads for d3d8, d3d9, d3d10core, d3d11,
dxgi, ddraw, dinput, dinput8, winmm, version, xinput1_3 and xinput1_4,
the libraries graphics wrappers and mod loaders ship. Every other system
library stays the runtime's whatever the program ships, as before this
series, so a bundled dbghelp.dll or winhttp.dll is still answered by
Raven. RAVEN_PREFER_LOCAL_DLLS=1 loads the program's copy of any system
library outside the core list instead.

The program's folder is no longer read file by file at each start: it is
listed once, on the first listed name the runtime asks about, and only a
file that matches such a name is mapped to check that it is a DLL of the
program's width. The C runtime ordering change in main.cpp is dropped, as
msvcrt.dll and ucrtbase.dll are again never looked for there.

Assisted-by: Claude Code:claude-opus-5-5
AI-Scope: Reworked the change to the maintainer's review: the allowlist,
 the RAVEN_PREFER_LOCAL_DLLS setting, the per-name ProgramLibraries
 lookup shared by the x64 and x86 paths, and the dependencies_test case
 and CTest entry for both modes.
2026-10-28 14:20:02 -04:00
Raymond Bennett 10515aecda feat: load a program's own copy of a non-core system library
On Windows only the KnownDLLs are protected from a copy in the program's
folder; graphics wrappers, overlays and plugin loaders ship their own
winmm.dll, version.dll, dinput8.dll, d3d9.dll or dxgi.dll there and
forward to the system copy. Raven served every system library itself.

A short core list (ntdll, kernel32, kernelbase, user32, gdi32, comctl32,
advapi32, msvcrt, ucrtbase, ole32, oleaut32, combase, rpcrt4, shell32,
shlwapi, setupapi, comdlg32) is still always Raven's. For any other
system library a copy beside the program loads, and Raven's own
implementation stays reachable under its System32 or SysWOW64 path and
through LOAD_LIBRARY_SEARCH_SYSTEM32. Copies an installer leaves in the
prefix's system directory are still ignored. The x86 path shares the
program-folder scan, which replaces the d3d9.dll special case.

Assisted-by: Claude Code:claude-opus-5-5
AI-Scope: Wrote the loader, provider and dependency changes and the new
 dependencies_test case, after a program's own winmm.dll was found to be
 replaced by Raven's. Prompt: find what stops the program's own DLL
 from loading and fix it in Raven.
2026-10-28 14:13:17 -04:00
Ray Bennett 4699a741c1 feat: give console programs the terminal as their console (#31)
* feat: give console programs the terminal as their console

A standard handle that is a terminal, and CONIN$, CONOUT$ and CON, now act as a console: modes map to terminal settings,
reads and writes convert between UTF-16 and the terminal's UTF-8, terminal input becomes key events, and Ctrl+C runs the
control handlers. Files and pipes still fail the console functions, as on Windows.

Assisted-by: Claude Code:claude-opus-5-5
AI-Scope: Wrote the console functions over the terminal, their pty test and the guest test program from the public console API documentation.

* test: let the console client run by hand, saying which step failed

Assisted-by: Claude Code:claude-opus-5-5
AI-Scope: Made the exact size and cursor checks optional and gave each step an instruction and a failure number.

* feat: follow the console cursor through the output instead of asking the terminal

Programs that redraw their command line read and move the cursor on every key; asking the terminal each time was slow, and
wrong on terminals that never answer. The terminal is now asked only when the position may be stale.

Assisted-by: Claude Code:claude-opus-5-5
AI-Scope: Wrote the cursor tracker, WriteConsoleOutputCharacter, ScrollConsoleScreenBuffer, the resize events and their tests.
2026-10-28 17:11:25 +01:00
mirkobrombin b387f9f6f2 feat: serve App-V package files from their virtual file system folders 2026-10-27 16:10:47 +00:00
mirkobrombin 7ebf58957c feat: add RegSetKeyValue and the key and value information classes of the native registry API 2026-10-27 14:46:45 +00:00
mirkobrombin c895d8e91c feat: add PathCchCanonicalize and the command line argument helpers 2026-10-27 14:32:31 +00:00
mirkobrombin 7a8f280f1f feat: add Windows Runtime strings and app package queries
Assisted-by: Claude Code:claude-opus-5-5
AI-Scope: Fixed the string header layout and wrote the activation factory registry, device family and package queries from the public headers.
2026-10-27 09:20:47 +00:00
mirkobrombin 06553d4e9b feat: add the AccPropServices class, COM global streams and CoInitializeSecurity
Assisted-by: Claude Code:claude-opus-5-5
AI-Scope: Wrote the AccPropServices component, the global stream and CoInitializeSecurity handlers and their tests from the public headers and documentation.
2026-10-27 08:46:04 +00:00
mirkobrombin 6ae62f2dbe feat: give 32-bit programs the task allocator through CoGetMalloc
Assisted-by: Claude Code:claude-opus-5-5
AI-Scope: Wrote the IMalloc object for 32-bit programs.
2026-10-27 08:09:12 +00:00
mirkobrombin 212559e5df feat: add a WinHTTP client over the WinINet engine with kept-alive connections
Assisted-by: Claude Code:claude-opus-5-5
AI-Scope: Wrote the WinHTTP layer over the existing WinINet client, connection reuse, header queries and the test against a local server.
2026-10-27 08:06:59 +00:00
mirkobrombin d709d8dc74 feat: add Punycode domain names and the locale name table 2026-10-27 08:01:30 +00:00
mirkobrombin 48636a234b feat: show theme names in the API trace 2026-10-27 03:59:26 +00:00
mirkobrombin 5378f9b89b feat: fetch over HTTP and HTTPS with WinINet 2026-10-27 02:55:04 +00:00
mirkobrombin d4adc44e8d feat: give an SSH client's dialogs double clicks, split buttons and drop-down lists 2026-10-27 01:17:41 +00:00
mirkobrombin 44a593867c feat: run an SSH client's terminal and file transfer windows 2026-10-26 23:13:38 +00:00
mirkobrombin bcae123e00 feat: keep the runtime's libraries as files in the system directories
Closes #22
2026-10-26 14:17:44 +00:00
mirkobrombin 915726b147 docs: explain how to build the components installers need
Closes #18
2026-10-26 14:17:43 +00:00
mirkobrombin 609a4ae4c4 feat: receive socket messages and wait on socket events 2026-10-26 14:17:43 +00:00
mirkobrombin 5ca60c6e94 feat: add an experimental X11 desktop backend
Refs #10

Assisted-by: Claude Code:claude-opus-5.5
AI-Scope: wrote the XCB presentation, Vulkan and EGL surface support, the --desktop=x11 option and the Xvfb tests from the issue #10 plan
2026-10-25 16:17:49 +00:00
mirkobrombin 1fc462a544 fix: preserve handles and security tokens across processes 2026-10-25 08:52:34 +01:00
mirkobrombin 61927c1cc8 fix: handle shared waits and semaphore wakeups 2026-10-25 06:09:55 +01:00
mirkobrombin acddd36586 fix: wait for matching window messages without busy polling
Assisted-by: Codex:GPT-6
AI-Scope: Implement blocking message waits and cover message filters and wakeups.
2026-10-25 04:38:33 +01:00
mirkobrombin 14d44fb628 feat: add a native OpenGL bridge 2026-10-25 01:39:15 +02:00
mirkobrombin 2e076d674f feat: add process enumeration and ETW controller APIs 2026-10-25 00:01:22 +02:00
mirkobrombin 5cb1d1b313 fix: reserve TLS slot zero for executable storage 2026-10-24 16:24:28 +00:00
mirkobrombin 0a0fe4be89 feat: add shared Windows process state and parallel guest execution 2026-10-24 16:24:23 +00:00
mirkobrombin f9f3a67f1c fix: serve the Windows calls that Inno Setup, 7-Zip and VLC make 2026-10-23 21:27:15 +00:00
Mirko Brombin c17a04a8a6 fix: publish the shell functions installers take by number and report WOW64 through IsOS 2026-10-17 13:01:45 +00:00
Mirko Brombin 657815ab15 chore: trace registry names and compared strings of 32-bit programs 2026-10-16 16:48:16 +00:00
Mirko Brombin 93acf0d441 feat: load libraries only mapped, as data or through their own manifest, and read plain files through the LZ functions 2026-10-03 10:21:49 +00:00
Mirko Brombin f4509d0c1f feat: implement the Windows APIs that .NET programs and their installers call 2026-09-23 00:12:56 +00:00
Mirko Brombin a7372ea452 feat: add print debugger output and component traces when asked, with the arguments of failing reads 2026-09-22 02:53:35 +00:00
Mirko Brombin f6fb246628 feat: read whole strings in lstrlenW, lstrcpyW and the shlwapi search functions 2026-09-22 02:53:35 +00:00
Mirko Brombin 1a2ffde613 feat: answer waveform device queries with no capture device, and none at all for 32-bit programs 2026-09-21 23:52:38 +00:00