admin管理员组

文章数量:1130349

C# 访问共享文件夹或者磁盘(需要用户名密码)

边界流浪者 2016-10-10

Windows的API:

SharedTool:

using System;  
using System.Collections.Generic;  
using System.Linq;  
using System.Text;  
using System.Runtime.InteropServices;  
  
namespace ConsoleApplication5  {  
    public class SharedTool : 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 SharedTool(string username, string password, string ip)  
        {  
            // initialize tokens       
            IntPtr pExistingTokenHandle = new IntPtr(0);  
            IntPtr pDuplicateTokenHandle = new IntPtr(0);  
  
            try  
            {  
                // get handle to token       
                bool bImpersonated = LogonUser(username, ip, password,  
                    LOGON32_LOGON_NEWCREDENTIALS, LOGON32_PROVIDER_DEFAULT, ref pExistingTokenHandle);  
  
                if (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 System;  
using System.Collections.Generic;  
using System.Linq;  
using System.Text;  
using System.IO;  
  
namespace ConsoleApplication5  {  
    class Program  {  
        static void Main(string[] args)  {  
            using (SharedTool tool = new SharedTool("administrator", "12345678", "192.168.1.101"))  {  
                string selectPath = @"\\192.168.1.101\c$";  
  
                var dicInfo = new DirectoryInfo(selectPath);//选择的目录信息  
  
                DirectoryInfo[] dic = dicInfo.GetDirectories("*.*", SearchOption.TopDirectoryOnly);  
                foreach (DirectoryInfo temp in dic)  {  
                    Console.WriteLine(temp.FullName);  
                }  
  
                Console.WriteLine("---------------------------");  
                FileInfo[] textFiles = dicInfo.GetFiles("*.*", SearchOption.TopDirectoryOnly);//获取所有目录包含子目录下的文件  
                foreach (FileInfo temp in textFiles)  {  
                    Console.WriteLine(temp.Name);  
                }  
            }  
            Console.ReadKey();  
        }  
    }  
}  

 

使用NET USE 来访问共享目录

使用

string [_Service=@"\\192.168.0.200](mailto:_Service=@"\\192.168.0.200)";
string _Path = "CallCenter";
ConnectLan(_Service, "Guest", "");
​
DirectoryInfo _Direct = new DirectoryInfo(_Service + "\\" + _Path);
foreach (DirectoryInfo _SubDirect in _Direct.GetDirectories()){
    MessageBox.Show(_SubDirect.Name);
}

方法

public string ConnectLan(string p_Path,string p_UserName,string p_PassWord){
    System.Diagnostics.Process _Process = new System.Diagnostics.Process();
    _Process.StartInfo.FileName = "cmd.exe";     
    _Process.StartInfo.UseShellExecute = false;
    _Process.StartInfo.RedirectStandardInput = true;
    _Process.StartInfo.RedirectStandardOutput = true;
    _Process.StartInfo.CreateNoWindow = true;
    _Process.Start();
    //NET USE \\192.168.0.1 PASSWORD /USER:UserName
    _Process.StandardInput.WriteLine("net use " + p_Path + " " + p_PassWord + " /user:" + p_UserName);
​
    _Process.StandardInput.WriteLine("exit");
    _Process.WaitForExit();
    string _ReturnText = _Process.StandardOutput.ReadToEnd();// 得到cmd.exe的输出 
    _Process.Close();
    return _ReturnText;
} 

C# 访问共享文件夹或者磁盘(需要用户名密码)

边界流浪者 2016-10-10

Windows的API:

SharedTool:

using System;  
using System.Collections.Generic;  
using System.Linq;  
using System.Text;  
using System.Runtime.InteropServices;  
  
namespace ConsoleApplication5  {  
    public class SharedTool : 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 SharedTool(string username, string password, string ip)  
        {  
            // initialize tokens       
            IntPtr pExistingTokenHandle = new IntPtr(0);  
            IntPtr pDuplicateTokenHandle = new IntPtr(0);  
  
            try  
            {  
                // get handle to token       
                bool bImpersonated = LogonUser(username, ip, password,  
                    LOGON32_LOGON_NEWCREDENTIALS, LOGON32_PROVIDER_DEFAULT, ref pExistingTokenHandle);  
  
                if (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 System;  
using System.Collections.Generic;  
using System.Linq;  
using System.Text;  
using System.IO;  
  
namespace ConsoleApplication5  {  
    class Program  {  
        static void Main(string[] args)  {  
            using (SharedTool tool = new SharedTool("administrator", "12345678", "192.168.1.101"))  {  
                string selectPath = @"\\192.168.1.101\c$";  
  
                var dicInfo = new DirectoryInfo(selectPath);//选择的目录信息  
  
                DirectoryInfo[] dic = dicInfo.GetDirectories("*.*", SearchOption.TopDirectoryOnly);  
                foreach (DirectoryInfo temp in dic)  {  
                    Console.WriteLine(temp.FullName);  
                }  
  
                Console.WriteLine("---------------------------");  
                FileInfo[] textFiles = dicInfo.GetFiles("*.*", SearchOption.TopDirectoryOnly);//获取所有目录包含子目录下的文件  
                foreach (FileInfo temp in textFiles)  {  
                    Console.WriteLine(temp.Name);  
                }  
            }  
            Console.ReadKey();  
        }  
    }  
}  

 

使用NET USE 来访问共享目录

使用

string [_Service=@"\\192.168.0.200](mailto:_Service=@"\\192.168.0.200)";
string _Path = "CallCenter";
ConnectLan(_Service, "Guest", "");
​
DirectoryInfo _Direct = new DirectoryInfo(_Service + "\\" + _Path);
foreach (DirectoryInfo _SubDirect in _Direct.GetDirectories()){
    MessageBox.Show(_SubDirect.Name);
}

方法

public string ConnectLan(string p_Path,string p_UserName,string p_PassWord){
    System.Diagnostics.Process _Process = new System.Diagnostics.Process();
    _Process.StartInfo.FileName = "cmd.exe";     
    _Process.StartInfo.UseShellExecute = false;
    _Process.StartInfo.RedirectStandardInput = true;
    _Process.StartInfo.RedirectStandardOutput = true;
    _Process.StartInfo.CreateNoWindow = true;
    _Process.Start();
    //NET USE \\192.168.0.1 PASSWORD /USER:UserName
    _Process.StandardInput.WriteLine("net use " + p_Path + " " + p_PassWord + " /user:" + p_UserName);
​
    _Process.StandardInput.WriteLine("exit");
    _Process.WaitForExit();
    string _ReturnText = _Process.StandardOutput.ReadToEnd();// 得到cmd.exe的输出 
    _Process.Close();
    return _ReturnText;
} 

本文标签: 磁盘共享文件夹用户名密码