• 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.1folderName"); }
  • 相关阅读:
    23种设计模式(3)-原型模式
    23种设计模式(4)-生成器模式
    优秀程序员应具备的15个特性
    23种设计模式(5)-适配器模式
    23种设计模式(6)-装饰者模式
    23种设计模式(7)-代理模式
    SSH框架面试题集锦
    List,Set和Map详解及其区别和他们分别适用的场景
    (转) 网页浏览速度慢的排查原因
    (转)局域网的某个机器无法上网,的排错思路
  • 原文地址:https://www.cnblogs.com/mschen/p/5126956.html
Copyright © 2020-2023  润新知