using System; using System.Collections; using System.Configuration; using System.Data; using System.IO; 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.Security.Principal; using System.Runtime.InteropServices; namespace WebApplication1 ... { public partial class _Default : System.Web.UI.Page ...{ 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 = CharSet.Auto, SetLastError = true)] public extern static int DuplicateToken(IntPtr hToken, int impersonationLevel, ref IntPtr hNewToken); private bool impersonateValidUser(String userName, String domain, String password) ...{ 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) ...{ WindowsIdentity tempWindowsIdentity; 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();//回退为未更改前账户 } protected void Page_Load(object sender, EventArgs e) ...{ //临时更改为 跟 网络硬盘相同用户名密码的账户(此账户必须在网络盘有写入权限)本机也需要同样帐号密码的帐户 if (impersonateValidUser("administrator", "192.168.1.102", "kuqu123456")) ...{ Response.Write(System.IO.File.Exists(@"/192.168.1.102shareC#高级编程C#高级编程(第四版).pdf")); undoImpersonation(); } else ...{ Response.Write("登陆失败"); } } } }