[codex] add windows minifilter overlay backend#1
Conversation
|
Update: added directory listing merge support in the minifilter path. The post directory callback now rewrites lower query results by removing whiteout/upper-shadowed entries and appending upper entries; the Windows smoke script now verifies listing behavior. Re-ran local checks: cargo fmt --all -- --check, cargo check --workspace, cargo check -p agent-core -p agentctl -p agent-forkd -p agent-minifilterctl --target x86_64-pc-windows-msvc, cargo test -p agent-core -p agentctl. Windows host SSH still times out at 100.123.154.79:22, so WDK load/smoke remains pending on the real machine. |
|
Update: fixed a kernel-safety issue in the minifilter driver. The callbacks now snapshot the registered env roots under the env-list lock and perform name resolution / FltCreateFile / ZwReadFile / ZwWriteFile work after releasing the lock. This avoids doing filesystem work while holding the FAST_MUTEX. Validation rerun: cargo fmt --all -- --check, cargo check --workspace, cargo check -p agent-core -p agentctl -p agent-forkd -p agent-minifilterctl --target x86_64-pc-windows-msvc, cargo test -p agent-core -p agentctl. Windows SSH to 100.123.154.79:22 still times out, so WDK driver build/load smoke is still pending. |
|
Windows minifilter follow-up status:
|
|
Update after e0abe0f:
|
|
Update after 074c094:
Runtime overlay verification is still blocked by the host's Secure Boot/test-signing policy, not by build/package failures. |
|
Update after b6f9794:
|
|
Update after 651282a:
|
|
Update after b9b2b53:
|
|
Update after 40804d6:
|
|
Update after 1116322:
|
|
Update after e69f70b:
|
|
Update after 116aee8:
|
|
Update after 58bbda3:
|
|
Added and pushed What changed:
Validation:
Remaining blocker is unchanged: |
|
Added and pushed What changed:
Validation:
Remaining blocker is unchanged: |
|
Added and pushed What changed:
Validation:
Remaining blocker is unchanged: |
|
Windows minifilter update: pushed c0fdc2c (Fail closed on name resolution errors). This makes registered-process create, set-information, and reparse FSCTL paths fail closed when Filter Manager name lookup/parse fails instead of passing the operation through to the host path.\n\nValidation:\n- Local Windows host build/sign/install path reached the known load blocker: Rust helpers OK, WDK driver build OK, inf2cat OK, signtool OK, pnputil OK, then fltmc load agentfs failed because SecureBoot=True and TestSigning=off for the local test certificate.\n- GitHub Actions Windows minifilter run passed: https://github.com/IPA-CyberLab/IPA-RS-IsolatedAgent/actions/runs/27600538048\n\nCurrent blocker remains runtime driver loading on agent@100.93.230.32 due to Secure Boot blocking the locally test-signed driver. I did not change boot/test-signing settings. |
|
Windows minifilter update: pushed 10ba641 (Fail closed on redirect selection errors). After a registered process path is confirmed to be under the managed source root, PreCreate now completes with the redirect-selection error instead of passing through to the host path. This keeps copy-on-write isolation intact on internal redirect failures.\n\nValidation:\n- Local Windows host: Rust helpers OK, WDK driver build OK, inf2cat OK, signtool OK, pnputil OK; runtime load still reaches the known blocker at fltmc load agentfs because SecureBoot=True and TestSigning=off for the local test certificate.\n- GitHub Actions Windows minifilter run passed: https://github.com/IPA-CyberLab/IPA-RS-IsolatedAgent/actions/runs/27601043346\n\nI did not change boot, Secure Boot, or test-signing settings. |
|
Windows minifilter update: pushed fb4dc30 (Fail closed on directory hide errors). Directory enumeration now propagates errors from whiteout/upper hide checks and upper merge opening instead of treating failures as visible entries or a successful empty merge. This reduces lower-entry leaks when merge bookkeeping fails.\n\nValidation:\n- Local Windows host: Rust helpers OK, WDK driver build OK, inf2cat OK, signtool OK, pnputil OK; runtime load still reaches the known blocker at fltmc load agentfs because SecureBoot=True and TestSigning=off for the local test certificate.\n- GitHub Actions Windows minifilter run passed: https://github.com/IPA-CyberLab/IPA-RS-IsolatedAgent/actions/runs/27601423806\n\nI did not change boot, Secure Boot, or test-signing settings. |
|
Windows minifilter update: pushed 9273604 (Fail closed on delete overlay errors). Managed source delete handling now completes with the overlay operation error if upper deletion or whiteout path construction fails, instead of passing the delete through to the host path. This keeps delete isolation intact on internal overlay failures.\n\nValidation:\n- Local Windows host: Rust helpers OK, WDK driver build OK, inf2cat OK, signtool OK, pnputil OK; runtime load still reaches the known blocker at fltmc load agentfs because SecureBoot=True and TestSigning=off for the local test certificate.\n- GitHub Actions Windows minifilter run passed: https://github.com/IPA-CyberLab/IPA-RS-IsolatedAgent/actions/runs/27601823594\n\nI did not change boot, Secure Boot, or test-signing settings. |
|
Windows minifilter update: pushed e3ceffd (Preserve visible path conversion errors). AgentFsVisiblePathFromName now only falls back from upper-root classification to lower-root classification when the upper path simply does not match. Other conversion failures, such as allocation errors, are preserved instead of being masked as a lower lookup miss.\n\nValidation:\n- Local Windows host: Rust helpers OK, WDK driver build OK, inf2cat OK, signtool OK, pnputil OK; runtime load still reaches the known blocker at fltmc load agentfs because SecureBoot=True and TestSigning=off for the local test certificate.\n- GitHub Actions Windows minifilter run passed: https://github.com/IPA-CyberLab/IPA-RS-IsolatedAgent/actions/runs/27602168400\n\nI did not change boot, Secure Boot, or test-signing settings. |
|
Windows minifilter update: pushed 190086a (Fail closed on visible path errors). PreSetInformation and PreFileSystemControl now pass through only when visible-path classification returns STATUS_NOT_FOUND. Other classification failures are completed with the error instead of being treated as unmanaged paths, preventing internal lookup/allocation failures from escaping to host operations.\n\nValidation:\n- Local Windows host: Rust helpers OK, WDK driver build OK, inf2cat OK, signtool OK, pnputil OK; runtime load still reaches the known blocker at fltmc load agentfs because SecureBoot=True and TestSigning=off for the local test certificate.\n- GitHub Actions Windows minifilter run passed: https://github.com/IPA-CyberLab/IPA-RS-IsolatedAgent/actions/runs/27602747599\n\nI did not change boot, Secure Boot, or test-signing settings. |
|
Windows minifilter update: pushed d419607 (Fail closed on directory state errors). Directory merge state updates now return status. If the driver cannot record the upper merge state or single-entry cursor, the directory query fails closed instead of returning a successful result that could repeat or mis-merge upper entries on subsequent calls.\n\nValidation:\n- Local Windows host: Rust helpers OK, WDK driver build OK, inf2cat OK, signtool OK, pnputil OK; runtime load still reaches the known blocker at fltmc load agentfs because SecureBoot=True and TestSigning=off for the local test certificate.\n- GitHub Actions Windows minifilter run passed: https://github.com/IPA-CyberLab/IPA-RS-IsolatedAgent/actions/runs/27603197941\n\nI did not change boot, Secure Boot, or test-signing settings. |
Summary
Adds a Windows path-preserving overlay backend based on a minifilter driver and a user-mode launcher/control helper.
agent-minifilterctl, which launches processes suspended, registers PID/env lower/upper/whiteout roots with the filter, assigns the process to a Job Object, then resumes it.drivers/windows-minifilterwith process-tree env inheritance, create redirect, write copy-up, delete whiteouts, and rename-to-upper behavior.AGENT_WINDOWS_BLOCK_CLONE=1as a compatibility fallback for CI and driverless machines.Validation
cargo fmt --all -- --checkcargo check --workspacecargo check -p agent-core -p agentctl -p agent-forkd -p agent-minifilterctl --target x86_64-pc-windows-msvccargo test -p agent-core -p agentctlNotes
The Windows real-machine smoke script is included as
scripts/windows-minifilter-smoke.ps1, but SSH to the provided host timed out from this environment, so the WDK driver load/smoke still needs to be run on the Windows machine.