·您现在的位置: 云翼网络 >> 文章中心 >> 网站建设 >> 网站建设开发 >> ASP.NET网站开发 >> ASP.NET模拟指定帐号权限, 删除非本机图片文件

ASP.NET模拟指定帐号权限, 删除非本机图片文件

作者:佚名      ASP.NET网站开发编辑:admin      更新时间:2022-07-23
 说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

异常详细信息: System.ArgumentException: 不支持 URI 格式。

源错误:

行 30:     PRotected void BTNCLick(object sender, EventArgs e)
行 31:     {
行 32:         System.IO.File.Delete(path + "200911313360.jpg");
行 33:         ScriptManager.RegisterStartupScript(Page, typeof(Page), "ok", "alert('删除成功');", true);
行 34:     }


不支持 URI 格式。
using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.xml.Linq;

public partial class _Default : System.Web.UI.Page
{
    protected System.Web.UI.WebControls.Label lbExist;
        protected System.Web.UI.WebControls.Label Label2;
        public const int LOGON32_LOGON_INTERACTIVE = 2;
        public const int LOGON32_PROVIDER_DEFAULT = 0;
        WindowsImpersonationContext impersonationContext;  
        [DllImport("advapi32.dll", CharSet=CharSet.Auto)]
        public static extern int LogonUser(String lpszUserName,String lpszDomain,
        String lpszPassWord,int dwLogonType,int dwLogonProvider,
        ref IntPtr phToken);
        [DllImport("advapi32.dll", CharSet=System.Runtime.InteropServices.CharSet.Auto,  
        SetLastError=true)]
        public extern static int DuplicateToken(IntPtr hToken,int impersonationLevel, ref IntPtr hNewToken);
         
        private void Page_Load(object sender, System.EventArgs e) {
            //noImpersonate();
            //ImpersonateIIS();
            ImpersonateUser();
        }
         
        private void noImpersonate() {
            try
            {
                if(File.Exists("c:\\Documents and Settings\\shaozhidong\\test.txt"))
                    lbExist.Text = "存在!";
                else
                    lbExist.Text = "该文件不存在!";
            }
            catch(Exception) {
                lbExist.Text = "没有权限!";
            }
        }
         
        /// <summary>
        /// 说明:.
        /// 函数:ImpersonateIIS
        /// 时间:2009-11-4  
        /// 作者:[email protected]
        /// </summary>
        private void ImpersonateIIS() {
            // 在代码中模拟IIS认证帐号
            System.Security.Principal.WindowsImpersonationContext impersonationContext;
            impersonationContext = ((System.Security.Principal.WindowsIdentity)User.Identity).Impersonate();

            if(File.Exists("c:\\Documents and Settings\\shaozhidong\\test.txt"))
            lbExist.Text = "存在!";
            else
            lbExist.Text = "该文件不存在!";

            impersonationContext.Undo();
        }

        /// <summary>
        /// 说明:.
        /// 函数:ImpersonateUser
        /// 时间:2009-11-4  
        /// 作者:[email protected]
        /// </summary>
        private void ImpersonateUser() {
            //在代码中模拟指定账号
            if(impersonateValidUser("shaozhidong", "shaozhd", "111")) {    
                if(File.Exists("c:\\Documents and Settings\\shaozhidong\\test.txt"))
                    lbExist.Text = "存在!";
                else
                    lbExist.Text = "该文件不存在!";
                undoImpersonation();
            } else {
                lbExist.Text = "权限不够!";
            }
        }

        private bool impersonateValidUser(string userName, string domain, string password) {
            WindowsIdentity tempWindowsIdentity;
            IntPtr token = IntPtr.Zero;    
            IntPtr tokenDuplicate = IntPtr.Zero;
            if(LogonUser(userName, domain, password, LOGON32_LOGON_INTERACTIVE,         LOGON32_PROVIDER_DEFAULT, ref token) != 0) {
                if(DuplicateToken(token, 2, ref tokenDuplicate) != 0) {
                    tempWindowsIdentity = new WindowsIdentity(tokenDuplicate);
                    impersonationContext = tempWindowsIdentity.Impersonate();
                    if (impersonationContext != null)  
                        return true;  
                    else
                        return false;   
                } else
                    return false;   
            } else
                return false;
        }

        private void undoImpersonation() {      
            impersonationContext.Undo();
        }

        #region Web Form Designer generated code
        override protected void OnInit(EventArgs e) {
            //
            // CODEGEN:该调用是 asp.net Web 窗体设计器所必需的。
            //
            InitializeComponent();
            base.OnInit(e);
        }

        ///  
        /// 设计器支持所需的方法 - 不要使用代码编辑器修改
        /// 此方法的内容。
        ///  
        private void InitializeComponent() {     
            this.Load += new System.EventHandler(this.Page_Load);
        }
        #endregion
    }

}