zoukankan      html  css  js  c++  java
  • 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");
    }
  • 相关阅读:
    wince嵌入式应用程序开发环境搭建
    用户 'NT AUTHORITY\NETWORK SERVICE' 登录失败
    git# 建立个人级服务器仓库 git init bare
    Bind和Eval的区别详解
    控件包含代码块(即 <% ... %>),因此无法修改控件集合 (转自http://blog.csdn.net/wangchao1982/archive/2007/11/19/1892472.aspx)
    Sys.ArgumentOutOfRangeException: Value must be an integer 错误的原因
    判断Cookies是否处于开启状态
    多个解决方案引用同一工程文件时冲突的解决方法
    javascript无提示的关闭页面
    Server.MapPath()
  • 原文地址:https://www.cnblogs.com/HeroBeast/p/1867469.html
Copyright © 2011-2022 走看看