首页 > 编程 > .NET > 正文

asp.net访问网络路径方法(模拟用户登录)

2024-07-10 13:27:58
字体:
来源:转载
供稿:网友
这篇文章主要介绍了asp.net访问网络路径方法,其实就是模拟用户登录,需要的朋友可以参考下
 
 

核心代码:

public class IdentityScope : IDisposable{    // obtains user token    [DllImport("advapi32.dll", SetLastError = true)]    static extern bool LogonUser(string pszUsername, string pszDomain, string pszPassword,int dwLogonType, int dwLogonProvider, ref IntPtr phToken);    // closes open handes returned by LogonUser    [DllImport("kernel32.dll", CharSet = CharSet.Auto)]    extern static bool CloseHandle(IntPtr handle);    [DllImport("Advapi32.DLL")]    static extern bool ImpersonateLoggedOnUser(IntPtr hToken);    [DllImport("Advapi32.DLL")]    static extern bool RevertToSelf();    const int LOGON32_PROVIDER_DEFAULT = 0;    const int LOGON32_LOGON_NEWCREDENTIALS = 9;//域ò控?中D的?需è要a用?:Interactive = 2    private bool disposed;    /// <summary>    /// 登?录?    /// </summary>    /// <param name="sUsername">用?户§名?</param>    /// <param name="sDomain">域ò名?,?如?果?不?在ú域ò中D就í使1用?机ú器÷IP地?址·</param>    /// <param name="sPassword">密ü码?</param>    public IdentityScope(string sUsername, string sDomain, string sPassword)    {      // initialize tokens      IntPtr pExistingTokenHandle = new IntPtr(0);      IntPtr pDuplicateTokenHandle = new IntPtr(0);      try      {        // get handle to token        bool bImpersonated = LogonUser(sUsername, sDomain, sPassword,LOGON32_LOGON_NEWCREDENTIALS, LOGON32_PROVIDER_DEFAULT, ref pExistingTokenHandle);        if (true == bImpersonated)        {          if (!ImpersonateLoggedOnUser(pExistingTokenHandle))          {            int nErrorCode = Marshal.GetLastWin32Error();            throw new Exception("ImpersonateLoggedOnUser error;Code=" + nErrorCode);          }        }        else        {          int nErrorCode = Marshal.GetLastWin32Error();          throw new Exception("LogonUser error;Code=" + nErrorCode);        }      }      finally      {        // close handle(s)        if (pExistingTokenHandle != IntPtr.Zero)          CloseHandle(pExistingTokenHandle);        if (pDuplicateTokenHandle != IntPtr.Zero)          CloseHandle(pDuplicateTokenHandle);      }    }    protected virtual void Dispose(bool disposing)    {      if (!disposed)      {        RevertToSelf();        disposed = true;      }    }    public void Dispose()    {      Dispose(true);    }  }

第二个参数是域名,有域名的话写域名,没有域名写目标机器的IP就可以了

using (IdentityScope c = new IdentityScope("administrator", "192.168.0.1", "11111")){ string[] filelist = System.IO.Directory.GetDirectories(@"//192.168.0.1/folderName");}
 

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表