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;//域控中的需要用:Interactive = 2
    
        private bool disposed;
    
        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);
    
        }
    
    }
    
    
    
    //调用;指定共享机器上的用户名,机器名,密码,(不在域控中的.)
    
    using (IdentityScope c = new IdentityScope("userId", "192.168.0.1", "psw"))
    
    {//在此就可以访问了.
    
    	string[] filelist = System.IO.Directory.GetDirectories(@"\\192.168.0.1\folderName");
    
    }
  • 相关阅读:
    Could not find the Qt platform plugin windows错误解决方法
    解决MySQL 8.0数据库出现乱码的问题
    C# Winform程序设计运行在高分屏下模糊解决办法
    如何配置SQL Server数据库远程连接
    PyCharm安装及使用教程
    Chrome谷歌浏览器实用插件
    Visual Studio 2017中如何创建安装打包项目
    Python如何打包EXE可执行文件
    C#中控制线程池的执行顺序
    .net core 部署在Centos 7/8 的几个小坑
  • 原文地址:https://www.cnblogs.com/huigll/p/1993596.html
Copyright © 2011-2022 走看看