[pull] master from microsoft:master#104
Merged
Merged
Conversation
…river code
The ProjFS filter driver and native library are no longer bundled with
the GVFS installer — ProjFS is required as a Windows Optional Feature
(available since Windows 10 1809, our minimum supported OS).
Fix FilterAttach ACCESS_DENIED (bug 62349777):
- Add TryAttachToVolume() that tolerates ACCESS_DENIED when the ProjFS
service is already running (the filter is already attached to the
volume but the caller lacks SE_LOAD_DRIVER_PRIVILEGE).
- The service-side EnableAndAttachProjFSHandler.Run() now uses
TryAttachToVolume instead of raw TryAttach, matching the tolerance
already present in the client-side IsReady() path.
- Fix Run() to preserve the first error from TryEnablePrjFlt instead
of potentially overwriting it with a subsequent attach error.
Remove dead non-inbox ProjFS code paths:
- Remove TryInstallProjFSViaINF (referenced {app}\Filter\prjflt.inf
which is no longer shipped).
- Remove TryCopyNativeLibIfDriverVersionsMatch and supporting methods
(referenced {app}\Filter\prjflt.sys and {app}\ProjFS\ProjectedFSLib.dll
which are no longer shipped).
- Simplify TryEnableOrInstallDriver to always use the Windows Optional
Feature path; keep build number logging as best-effort telemetry.
- Simplify IsNativeLibInstalled to require System32; warn if stale
app-local DLL found from a legacy non-inbox install.
Improve error messaging:
- When ProjFS native library is missing, error now includes the
PowerShell command to enable the optional feature.
- When ProjFS cannot be enabled, error directs user to the optional
feature instead of referencing non-existent bundled files.
Assisted-by: Claude Opus 4.6
Signed-off-by: Tyler Vella <tyrielv@gmail.com>
When GVFS.Mount.exe fails due to authentication (credential fetch failure or 401/403 after credentialed retry), it now exits with ReturnCode.AuthenticationError (9) instead of GenericError (3). The gvfs.exe mount verb captures the GVFS.Mount.exe process handle and propagates its exit code on mount failure, so callers of 'gvfs mount' can distinguish auth failures from other errors. Changes: - Add ReturnCode.AuthenticationError = 9 - Add 'out bool isAuthFailure' to TryInitializeAndQueryGVFSConfig to explicitly classify auth failures (credential fetch failure or 401/403 on credentialed retry) - InProcessMount uses isAuthFailure to select the exit code - StartBackgroundVFS4GProcess returns Process so MountVerb can read the mount process exit code after failure Resolves AB#61375690 Assisted-by: Claude Opus 4.6 Signed-off-by: Tyrie Vella <tyrielv@gmail.com>
GVFS.Service runs as SYSTEM and cannot read the user's global git config (where gvfs.telemetry-pipe is set) at startup. This meant TelemetryDaemonEventListener was never created, and all service telemetry events (PendingUpgradeHandler, etc.) were silently lost. Add two new classes in GVFS.Common.Tracing: - BufferingTelemetryListener: an EventListener that buffers telemetry messages in a bounded ConcurrentQueue, then replays them to a real listener on demand. - DeferredTelemetryAttacher: manages the lifecycle of deferred telemetry pipe attachment. Adds a BufferingTelemetryListener to the tracer, then periodically retries creating the real daemon listener (exponential backoff: 10s, 30s, 1m, 5m steady state). On success, replays buffered messages and stops the timer. Checks HasTelemetryDaemonListener to prevent duplicate listeners when the JsonTracer constructor already attached one. Designed for reuse by both GVFS.Service and GVFS.Mount. TelemetryDaemonEventListener gains a globalConfigPath parameter so callers can read a specific .gitconfig file via --file instead of --global. This lets GVFSService read the logged-on user's config without mutating the process-wide HOME environment variable. GVFSService creates a DeferredTelemetryAttacher at startup and calls TryAttach on session logon events, passing the user's .gitconfig path resolved via RunImpersonated. JsonTracer gains only HasTelemetryDaemonListener (one-liner property) to support the duplicate-listener guard. Assisted-by: Claude Opus 4.6 Signed-off-by: Tyrie Vella <tyrielv@gmail.com>
Test BufferingTelemetryListener: buffer and replay, stop after replay, bounded cap, second replay returns zero. Test DeferredTelemetryAttacher: null gitBinRoot handling, retry interval exponential backoff values. Assisted-by: Claude Opus 4.6 Signed-off-by: Tyrie Vella <tyrielv@gmail.com>
Add unique exit code for mount authentication failures
ProjFS: tolerate ACCESS_DENIED on FilterAttach, remove dead bundled-driver code
GVFS.Service: defer and retry telemetry pipe attachment
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 subscribe to this conversation on GitHub.
Already have an account?
Sign in.
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.
See Commits and Changes for more details.
Created by
pull[bot] (v2.0.0-alpha.4)
Can you help keep this open source service alive? 💖 Please sponsor : )