指定账户访问共享文件

访问共享文件夹的方法有很多

1>这边在本地测试通过,用这个方法不是用net use命令模拟,而是类似credential来装扮一个权限的账户来访问网络路径的文件。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

using System.Runtime.InteropServices;
using System.IO;

public class FromSharedFoldersInDomain : 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 FromSharedFoldersInDomain(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);
    }

    /// <summary>
    /// 获取共享目录下的文件名
    /// </summary>
    /// <param name="remotePath">共享目录:"\\192.168.1.110\project"</param>
    /// <param name="userName"></param>
    /// <param name="userPassword"></param>
    public static void GetFiles(string remotePath, string userName, string userPassword)
    {
        using (FromSharedFoldersInDomain iss = new FromSharedFoldersInDomain(
          userName, remotePath, userPassword))
        {
            DirectoryInfo Dir = new DirectoryInfo(remotePath);
            foreach (FileInfo item in Dir.GetFiles())
            {
                HttpContext.Current.Response.Write(item.Name + "<br/>");
            }
        }
    }
}

  

2>

string localpath = "X:";
        string serverPath = @"\\192.168.199.173\Project";
        string loginUser = "administrator";
        string loginPassword = "430016";
        int status = NetworkConnection.Connect(serverPath, localpath, loginUser, loginPassword);
        if (status == (int)ERROR_ID.ERROR_SUCCESS)
        {
            FileStream fs = new FileStream(localpath + @"\123.txt", FileMode.OpenOrCreate);
            using (StreamWriter stream = new StreamWriter(fs))
            {
                stream.WriteLine("你好呀,成功了");
                stream.Flush();
                stream.Close();
            }
            fs.Close();
        }
        else
        {
            Console.WriteLine(status);
        }
        NetworkConnection.Disconnect(localpath);

  

3>

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

using System.IO;
using System.Diagnostics;

/// <summary>
///FileShare 的摘要说明
/// </summary>
public class FileShare
{
    public FileShare() { }

    public static bool connectState(string path)
    {
        return connectState(path, "administrator", "430016");
    }

    public static bool connectState(string path, string userName, string passWord)
    {
        bool Flag = false;
        Process proc = new Process();
        try
        {
            proc.StartInfo.FileName = "cmd.exe";
            proc.StartInfo.UseShellExecute = false;
            proc.StartInfo.RedirectStandardInput = true;
            proc.StartInfo.RedirectStandardOutput = true;
            proc.StartInfo.RedirectStandardError = true;
            proc.StartInfo.CreateNoWindow = true;
            proc.Start();
            string dosLine = string.Format("net use \"{0}\" /User:{1} {2} /PERSISTENT:YES", path, userName, passWord);
            proc.StandardInput.WriteLine(dosLine);
            proc.StandardInput.WriteLine("exit");
            while (!proc.HasExited)
            {
                proc.WaitForExit(1000);
            }
            string errormsg = proc.StandardError.ReadToEnd();
            proc.StandardError.Close();
            if (string.IsNullOrEmpty(errormsg))
            {
                Flag = true;
            }
            else
            {
                throw new Exception(errormsg);
            }
        }
        catch (Exception ex)
        {
            throw ex;
        }
        finally
        {
            proc.Close();
            proc.Dispose();
        }
        return Flag;
    }

    //read file
    public static void ReadFiles(string path)
    {
        try
        {
            // Create an instance of StreamReader to read from a file.
            // The using statement also closes the StreamReader.
            using (StreamReader sr = new StreamReader(path))
            {
                String line;
                // Read and display lines from the file until the end of
                // the file is reached.
                while ((line = sr.ReadLine()) != null)
                {
                    Console.WriteLine(line);

                }
            }
        }
        catch (Exception e)
        {
            // Let the user know what went wrong.
            Console.WriteLine("The file could not be read:");
            Console.WriteLine(e.Message);
        }

    }

    //write file
    public static void WriteFiles(string path)
    {
        try
        {
            // Create an instance of StreamWriter to write text to a file.
            // The using statement also closes the StreamWriter.
            using (StreamWriter sw = new StreamWriter(path))
            {
                // Add some text to the file.
                sw.Write("This is the ");
                sw.WriteLine("header for the file.");
                sw.WriteLine("-------------------");
                // Arbitrary objects can also be written to the file.
                sw.Write("The date is: ");
                sw.WriteLine(DateTime.Now);
            }
        }
        catch (Exception e)
        {
            // Let the user know what went wrong.
            Console.WriteLine("The file could not be read:");
            Console.WriteLine(e.Message);
        }
    }
}

  

时间: 2024-11-14 12:47:08

指定账户访问共享文件的相关文章

在DataWorks中实现指定UDF只能被指定账户访问

在DataWorks中实现指定资源被指定账户访问背景之前写过一篇文章是关于"DataWorks和MaxCompute内部权限体系的区别"有兴趣的朋友可以点击阅读查看详情.但是还是有些同学会问,我如何在DataWorks中实现我的具体某个Resource,Table还是UDF只能被我指定的用户所使用的权限管控.这个UDF可能涉及到数据的加解密算法,属于数据安全管控范围了. 常见方案package方案,通过打包授权进行权限精细化管控.DataWorks上新建角色(管理>MaxComp

Linux系统下授权MySQL账户访问指定数据库和数据库操作

Linux系统下授权MySQL账户访问指定数据库 需求: 1.在MySQL中创建数据库mydata 2.新建MySQL账户admin密码123456 3.赋予账户admin对数据库mydata具有完全操作权限 ====================================================================== 操作如下: 1.登录MySQL数据库 mysq  -uroot  -p    #在终端命令行输入 123456         #输入密码 2.sh

win7访问共享文件,登录失败:禁用当前用户 解决方法

访问win7上面的共享文件时,出现登陆失败:禁用当前用户的错误 原因分析: 1.Win7操作系统,默认禁用了管理员和来宾账户 2.无法访问共享的机器,访问共享文件时使用的是默认的管理员,没有设置密码 由于win7共享服务器端的同名账户是禁用的,当客户端还用同名账户(普遍来说都是administrator账户同名)去验证的时候,服务器返回这个账户禁止,客户端就不提示用户输入用户名和密码,直接终止就了共享访问..... 解决办法:方法1:最简单的解决方法就是--本机建立一个新账户,这样通过新账户而不

切换用户访问共享文件夹

1.现在登录用户A访问了共享文件夹 2.删除已登录的访问账号 3.再次访问共享文件夹,提示输入密码 4.使用命令进行切换访问共享文件夹 5.切换用户访问成功 6.如果之前登录时候,选择了记住密码 7.进入用户账户-管理您的凭据 8.从保管库中删除 9.确认删除 10.如果删除凭据后,仍可访问共享文件夹,再运行一次删除命令(发现还是有连接存在的)即可

IIS/ASP.NET访问共享文件夹的可用方式

[截止2014-10-14] 网上搜索了很多篇文章,所提及的总共有两种方式: 1.Asp.Net模拟登陆: 例如: 实战ASP.NET访问共享文件夹(含详细操作步骤) 实现一个2008serve的IIS的虚拟目录(通过网络路径(UNC)的形式,共享在另外一个2008服务器上 2.调用Windows API 的 WNetAddConnection2 .WNetCancelConnection2函数: 例如: ASP.NET网络映射驱动器无权限访问的解决方案 ASP.NET访问网络驱动器(映射磁盘)

FTP文件服务器的匿名、本地、虚拟,账户访问

FTP服务器(File Transfer Protocol Server)是在互联网上提供文件存储和访问服务的计算机,它们依照FTP协议提供服务. FTP是File Transfer Protocol(文件传输协议).顾名思义,就是专门用来传输文件的协议.简单地说,支持FTP协议的服务器就是FTP服务器. 实验准备 两台虚拟机,Windows7和linux(Red Hat Enterprise 6.5) 两台虚拟机都选择仅主机模式,确保两台虚拟机能够互相ping通 利用rpm安装为Linux虚拟

samba服务本地用户访问共享文件夹

1 这里是接着之前的匿名访问继续做的实验,首先还是对smb.conf文件进行配置,将share改为user 2 接着参照之前的模板对另一个文件夹进行配置,注意这里是本地用户访问,所以不需要加匿名访问这条限制,同时这里因为只对zhangsan用户给以写入权限,所以之前的文件自身写入权限也不能添加 3 文件权限设置完成后添加zhangsan lisi 两个用户,注意这里设置密码时要用smbpasswd -a这条命令,设置完成后再创建文件夹与权限,最后再重启服务器 4 这里可以看到访问共享文件时需要账

linux 使用msmtp登陆指定账户发送邮件

linux可以直接用mail发送邮件给对方,但是这种邮件,容易被QQ邮箱或者其他邮箱拦截掉 所以必须用指定账户发送邮件,才不会拦截. msmtp 是一个SMTP 客户端. 在默认情况下,它把邮件送给负责发邮件的SMTP 服务器 安装msmtp 下载最新版本 http://iweb.dl.sourceforge.net/project/msmtp/msmtp/1.6.3/msmtp-1.6.3.tar.xz tar xvf msmtp-1.6.3.tar.xz -C /usr/src cd /us

IIS访问共享文件详解

本文出自:http://www.cnblogs.com/knowledgesea/p/5145087.html 前言 公司同事做了一个报表系统,需要做集群部署,本来是一件挺容易的事,但是部署过程中却遇到啦种种蛋疼问题. 问题1.我们的报表使用的是微软的水晶报表,需要上传报表的配置文件,然后水晶报表提供的控件来读取文件,不支持直接图片服务器提供的http:www.xxxx.com/a.jpg.但是他支持\\192.168.10.11\ImgShare\a.jpg. 问题2.IIS使用共享文件的时候