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

yipeiwu_com7年前PHP代码库

核心代码:

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");
}

相关文章

php中的单引号、双引号和转义字符详解

PHP单引号及双引号均可以修饰字符串类型的数据,如果修饰的字符串中含有变量(例$name);最大的区别是: 双引号会替换变量的值,而单引号会把它当做字符串输出。 例如: <&#...

php实现发送微信模板消息的方法

本文实例讲述了php实现发送微信模板消息的方法。分享给大家供大家参考。具体如下: 该方法基于thinkphp实现实现,具体OrderPush.class.php文件如下: 复制代码 代码...

PHP SOCKET编程详解

1. 预备知识 一直以来很少看到有多少人使用php的socket模块来做一些事情,大概大家都把它定位在脚本语言的范畴内吧,但是其实php的socket模块可以做很多事情,包括做ftpli...

PHP中addcslashes与stripcslashes函数用法分析

本文实例分析了PHP中addcslashes与stripcslashes函数用法。分享给大家供大家参考,具体如下: 在写一个网站的英文版时,写完后填加英文资料,我随便填写时一点问题没有,...

PHP中常见的缓存技术实例分析

本文实例分析了PHP中常见的缓存技术。分享给大家供大家参考。具体如下: JBLOG在开发的过程中,对性能的优化做了不少工作。为了尽量减少不必要的数据库查询,我对一些数据进行了缓存和静态化...