首页 > 编程 > .NET > 正文

asp.net实现访问局域网共享目录下文件的解决方法

2020-01-17 23:26:10
字体:
来源:转载
供稿:网友

本文以实例讲述了asp.net实现访问局域网共享目录下文件的解决方法,完整代码如下所示:

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; using System.IO; using System.Security.Principal; using System.Runtime.InteropServices; 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")]   public static extern int LogonUserA(String lpszUserName,     String lpszDomain,     String lpszPassword,     int dwLogonType,     int dwLogonProvider,     ref IntPtr phToken);   [DllImport("advapi32.dll", CharSet = CharSet.Auto, SetLastError = true)]   public static extern int DuplicateToken(IntPtr hToken,     int impersonationLevel,     ref IntPtr hNewToken);   [DllImport("advapi32.dll", CharSet = CharSet.Auto, SetLastError = true)]   public static extern bool RevertToSelf();   [DllImport("kernel32.dll", CharSet = CharSet.Auto)]   public static extern bool CloseHandle(IntPtr handle);   public void Page_Load(Object s, EventArgs e)   {     if (impersonateValidUser("lucas", "Workgroup", "lcas"))     {       string path = @"//zhehui001/lu";       foreach (string f in Directory.GetFiles(path))       {         Response.Write(f);       }       undoImpersonation();     }     else     {       //Your impersonation failed. Therefore, include a fail-safe mechanism here.     }   }   private bool impersonateValidUser(String userName, String domain, String password)   {     WindowsIdentity tempWindowsIdentity;     IntPtr token = IntPtr.Zero;     IntPtr tokenDuplicate = IntPtr.Zero;     if (RevertToSelf())     {       if (LogonUserA(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)           {             CloseHandle(token);             CloseHandle(tokenDuplicate);             return true;           }         }       }     }     if (token != IntPtr.Zero)       CloseHandle(token);     if (tokenDuplicate != IntPtr.Zero)       CloseHandle(tokenDuplicate);     return false;   }   private void undoImpersonation()   {     impersonationContext.Undo();   } }
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表