/// <summary> /// Tries to impersonate the current process as the user which runs explorer.exe currently. The caller should always call <see cref="IDisposable.Dispose"/> on /// the returned instance to revert identity to self. /// </summary> private static ImpersonationHelper.ImpersonationContext ImpersonateUser(ImpersonationHelper.ImpersonationContext requestedIdentity) { NetworkNeighborhoodResourceProviderSettings settings = _settings.Settings; ImpersonationHelper.ImpersonationContext ctx = null; // Prefer to impersonate current interactive user. if (settings.ImpersonateInteractive) { if (requestedIdentity != null && !ImpersonationHelper.RequiresImpersonate(requestedIdentity.Identity)) { return(null); } ctx = ImpersonationHelper.ImpersonateByProcess("explorer"); } if (ctx != null) { return(ctx); } // Second way based on network credentials. if (settings.UseCredentials) { ctx = ImpersonationHelper.ImpersonateUser(settings.NetworkUserName, settings.NetworkPassword); } return(ctx); }
public NetworkNeighborhoodResourceAccessor(NetworkNeighborhoodResourceProvider parent, string path) { _parent = parent; _path = path; if (IsServerPath(path)) { return; } _impersonationContext = ImpersonateUser(null); IResourceAccessor ra; if (LocalFsResourceProvider.Instance.TryCreateResourceAccessor("/" + path, out ra)) { _underlayingResource = (ILocalFsResourceAccessor)ra; } }