asp.net實現訪問區域網路共用目錄下檔案的解決方案_實用技巧

來源:互聯網
上載者:User

本文以執行個體講述了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();   } }

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.