feat(windows): implement Windows Services collector - #12
Merged
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
User outcome
SystemDiff now captures and compares Registry Run/RunOnce startup entries and Windows service configuration in the normal Snapshot pipeline.
Collector scope
windows.servicesv1 for Win32 services visible to the current token.Evidence
Each atomic observation preserves the service name, display name, raw service/start/error values, unexpanded binary path, account, dependency sequence, load-order group, tag ID, delayed-auto-start flag, and description. If any selected query is unreadable, malformed, unstable, or over budget, the item is omitted with a scoped diagnostic while complete siblings remain.
Coverage semantics
Because Windows can silently omit services for which the caller lacks status-query access, real Services coverage is never claimed complete. A one-sided absence therefore becomes Inconclusive instead of a false Removed result. Synthetic complete-coverage fixtures separately test generic Added/Removed behavior.
Validation
cargo fmt --all --checkcargo clippy --locked --workspace --all-targets -- -D warningscargo test --locked --workspace --all-targets(113 passed)Explicit non-goals
No Scheduled Tasks Collector, service writes/remediation, runtime state/history/session tracking, command execution, signature or risk analysis, GUI, installer, release, or signing is added.
Closes #11