/// <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); }
private void InitModel() { IServerSettingsClient settingsManager = ServiceRegistration.Get <IServerSettingsClient>(); NetworkNeighborhoodResourceProviderSettings settings = settingsManager.Load <NetworkNeighborhoodResourceProviderSettings>(); ImpersonateInteractive = settings.ImpersonateInteractive; UseCredentials = settings.UseCredentials; NetworkUserName = settings.NetworkUserName; NetworkPassword = settings.NetworkPassword; }
/// <summary> /// Saves the current state to the settings file. /// </summary> public void SaveSettings() { IServerSettingsClient settingsManager = ServiceRegistration.Get <IServerSettingsClient>(); NetworkNeighborhoodResourceProviderSettings settings = settingsManager.Load <NetworkNeighborhoodResourceProviderSettings>(); settings.ImpersonateInteractive = ImpersonateInteractive; settings.UseCredentials = UseCredentials; settings.NetworkUserName = NetworkUserName; settings.NetworkPassword = NetworkPassword; settingsManager.Save(settings); }