A drive was \Device\HarddiskVolumeN with N counted over the drives present
for QueryDosDevice but from the letter (C first) for the process image and
mapped file names, so Z: had two device names, and NtQueryObject answered
an empty name for every file. NativePaths now gives each drive one volume
device (C is 1 and the drives after it follow in letter order, A and B
last) and turns a Win32 path into the NT name the object manager uses: a
drive path on its volume device, a UNC path on \Device\Mup. QueryDosDevice,
the image and mapped file names and NtQueryObject (ObjectNameInformation of
a file) use it; the drive list QueryDosDevice and GetLogicalDrives share
moved there as well. Zig reads a file name this way to find its own path.
Assisted-by: Claude Code:claude-opus-5-5
AI-Scope: the volume device naming and its callers
(cherry picked from commit 02cce32c5ee2b0c341e44ae6fa691f28aa51b62f)
NtQueryInformationProcess asked the child process itself, so once a child
had ended its ProcessBasicInformation failed and Zig could not read the
exit status of its linker. A child that has ended answers from its process
object: the exit status, its id and this process as its parent.
Assisted-by: Claude Code:claude-opus-5-5
AI-Scope: the exited-child case
(cherry picked from commit e204ad514a444c3140b0592243e3dad16d26fac1)
GetModuleBaseName with no module names the file the process was started
from; Raven looked for a module at address zero and failed, for the calling
process and for others. It now takes the name from the process's image path,
as QueryFullProcessImageName does, which also answers for child processes.
Assisted-by: Claude Code:claude-opus-5-5
AI-Scope: the change
(cherry picked from commit 0b78cce5023888c44414fd585337810558c3ff14)
procs asks every process for its I/O counts. Raven's host process performs a
program's I/O, so the counters come from its Linux ones (/proc/<pid>/io):
read and write system calls and bytes; nothing is counted as "other".
Assisted-by: Claude Code:claude-opus-5-5
AI-Scope: the handler
(cherry picked from commit 35a6322c72c0077aa523f4e2d1cddd207a65ecfc)
CreateToolhelp32Snapshot named another runtime process by the last argument on its host command line. For
`raven --run-process ... cmd.exe -- /c dir`, that is `dir`, so tasklist and process lookups by name missed it.
Assisted-by: Claude Code:claude-opus-5-5
AI-Scope: Took the first argument that is not an option as the program, and extended the snapshot test to start a child that checks its parent's name, for both widths.