示例#1
0
        /// <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);
        }
示例#2
0
        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;
            }
        }