WEB开发网
开发学院WEB开发ASP.NET ASP.NET模拟指定帐号权限, 删除非本机图片文件 阅读

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

 2009-11-04 16:50:37 来源:WEB开发网   
核心提示: 说明: 执行当前 Web 请求期间,出现未处理的异常,ASP.NET模拟指定帐号权限, 删除非本机图片文件,请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息, 异常详细信息: System.ArgumentException: 不支持 URI 格式,源错误: 行 30: PRotected vo
 说明: 执行当前 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 
    /// 作者:zmh_27@126.com
    /// </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 
    /// 作者:zmh_27@126.com
    /// </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
  }

}

Tags:ASP NET 模拟

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接