网络存储-Samba、NAS---未知的用户名或错误密码
项目中的文件需要保存到网络存储设备中,之前用的是NAS。因没来得及采购就先用Samba顶上。代码发现通用……
一、定义:
Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成。SMB(Server Messages Block,信息服务块)是一种在局域网上共享文件和打印机的一种通信协议,它为局域网内的不同计算机之间提供文件及打印机等资源的共享服务。SMB协议是客户机/服务器型协议,客户机通过该协议可以访问服务器上的共享文件系统、打印机及其他资源。通过设置“NetBIOS over TCP/IP”使得Samba不但能与局域网络主机分享资源,还能与全世界的电脑分享资源。(百科)
NAS(Network Attached Storage)网络存储基于标准网络协议实现数据传输,为网络中的Windows / Linux / Mac OS 等各种不同操作系统的计算机提供文件共享和数据备份。(百科)
二、二者有什么区别
1、Samba是一个软件,NAS是一个存储解决方案
2、FTP基于windows平台的,Samba是基于linux平台的,NAS是基于存储平台的(硬件)
三、主要代码LogonImpersonateHelper类用于IIS更换运行用户、WNetHelper类用于创建网络映射
public class LogonImpersonateHelper : IDisposable
{
static public string DefaultDomain
{
get
{
return ".";
}
} const int LOGON32_LOGON_INTERACTIVE = ;
const int LOGON32_PROVIDER_DEFAULT = ; [System.Runtime.InteropServices.DllImport("Kernel32.dll")]
extern static int FormatMessage(int flag, ref IntPtr source, int msgid, int langid, ref string buf, int size, ref IntPtr args); [System.Runtime.InteropServices.DllImport("Kernel32.dll")]
extern static bool CloseHandle(IntPtr handle); [System.Runtime.InteropServices.DllImport("Advapi32.dll", SetLastError = true)]
extern static bool LogonUser(
string lpszUsername,
string lpszDomain,
string lpszPassword,
int dwLogonType,
int dwLogonProvider,
ref IntPtr phToken
); IntPtr token;
System.Security.Principal.WindowsImpersonationContext context; public LogonImpersonateHelper(string username, string password)
{
if (username.IndexOf("//") == -)
{
Init(username, password, DefaultDomain);
}
else
{
string[] pair = username.Split(new char[] { '/' }, );//username.Split(new char[] { '//' }, 2);
Init(pair[], password, pair[]);
}
}
public LogonImpersonateHelper(string username, string password, string domain)
{
Init(username, password, domain);
}
void Init(string username, string password, string domain)
{
if (LogonUser(username, domain, password, LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, ref token))
{
bool error = true;
try
{
context = System.Security.Principal.WindowsIdentity.Impersonate(token);
error = false;
}
finally
{
if (error)
CloseHandle(token);
}
}
else
{
int err = System.Runtime.InteropServices.Marshal.GetLastWin32Error(); IntPtr tempptr = IntPtr.Zero;
string msg = null; FormatMessage(0x1300, ref tempptr, err, , ref msg, , ref tempptr); throw (new Exception(msg));
}
}
~LogonImpersonateHelper()
{
Dispose();
}
public void Dispose()
{
if (context != null)
{
try
{
context.Undo();
}
finally
{
CloseHandle(token);
context = null;
}
}
}
}
/// <summary>
/// 网络驱动器 映射帮助类
/// </summary>
public class WNetHelper
{
[DllImport("mpr.dll", EntryPoint = "WNetAddConnection2")]
private static extern uint WNetAddConnection2(NetResource lpNetResource, string lpPassword, string lpUsername, uint dwFlags); [DllImport("Mpr.dll", EntryPoint = "WNetCancelConnection2")]
private static extern uint WNetCancelConnection2(string lpName, uint dwFlags, bool fForce); [StructLayout(LayoutKind.Sequential)]
public class NetResource
{
public int dwScope; public int dwType; public int dwDisplayType; public int dwUsage; public string lpLocalName; public string lpRemoteName; public string lpComment; public string lpProvider;
} /// <summary>
/// 为网络共享做本地映射
/// </summary>
/// <param name="username">访问用户名(windows系统需要加计算机名,如:comp-1/user-1)</param>
/// <param name="password">访问用户密码</param>
/// <param name="remoteName">网络共享路径(如://192.168.0.9/share)</param>
/// <param name="localName">本地映射盘符</param>
/// <returns></returns>
public static uint WNetAddConnection(string username, string password, string remoteName, string localName)
{
NetResource netResource = new NetResource(); netResource.dwScope = ;
netResource.dwType = ;
netResource.dwDisplayType = ;
netResource.dwUsage = ;
netResource.lpLocalName = localName;
netResource.lpRemoteName = remoteName.TrimEnd('\\');
uint result = WNetAddConnection2(netResource, password, username, ); return result;
} public static uint WNetCancelConnection(string name, uint flags, bool force)
{
uint nret = WNetCancelConnection2(name, flags, force); return nret;
}
}
创建文件夹
/// <summary>
/// Samba创建文件夹
/// </summary>
/// <param name="path"></param>
/// <returns></returns>
public static bool CreateDirectory(string path)
{
uint state = ;
if (!Directory.Exists("Z:"))
{
string nasPath = ConfigHelper.NasPath;
string root = Directory.GetDirectoryRoot(nasPath);
state = WNetHelper.WNetAddConnection(ConfigHelper.NasAccount, ConfigHelper.NasPassword, ConfigHelper.NasPath, root.Replace("/", "").Replace("\\", ""));
}
if (state.Equals())
{
Directory.CreateDirectory(path);
return true;
}
else
{
throw new Exception("添加网络驱动器错误,错误号:" + state.ToString());
}
}
四、如何使用
//在访问映射磁盘之前首先调用此类为IIS更换运行用户
LogonImpersonateHelper imper = new LogonImpersonateHelper("qewd", "1,23#$&@qw");
//创建网络映射
WNetHelper.WNetAddConnection(ConfigHelper.NasAccount, ConfigHelper.NasPassword, ConfigHelper.NasPath, root.Replace("/", "").Replace("\\", ""));
五、问题来了
在本地怎么跑怎么成功,放到服务器上就来问题了。环境:windows server2008、IIS7 报错:“未知的用户名或错误密码。”
折腾了半天,折腾的事情就不说了,做个笔记
解决方案:
1、IIS 7 标示改了最高权限(暂无
办法先这样解决)
2、把Samba账号、密码添加到计算机本地用户组中

六、结果-成功

网络存储-Samba、NAS---未知的用户名或错误密码的更多相关文章
- win7 链接打印机时提示未知的用户名或错误密码
使用win7系统时,访问局域网内的计算机 \\ip 要求输入正确用户名和密码,输入用户名和密码后,还是一直提示“未知的用户名或错误密码”. 解决方法: 开始---->运行 打开组策略编辑器 gp ...
- Windows任务计划向远程服务器拷贝文件,报登录失败: 未知的用户名或错误密码
问题产生很奇怪,当你登录到系统时,执行自动化作业是正常 但到了晚上凌晨自动执行作业时,则报登录失败: 未知的用户名或错误密码 解决方案: 在拷贝脚本中加及一行,创建net use 命名,每次文件拷贝前 ...
- win7访问windows server 2003服务器出现未知的用户名或者错误的密码(转载)
直接放答案,感谢网友提供答案,否则自已还一直在纳闷,为什么? win7系统的安全机制限制了登陆.只要系统时间和win2003服务器的系统时间相差很多,系统就会阻止其登陆,并显示错误信息:"未 ...
- (4.15)存储DAS,NAS,SAN在数据库存储上的应用
关键词:存储,硬盘接口类型,磁盘类型,网络类型,DAS,DNS,SAN 转自:http://blog.51cto.com/qianzhang/1254617 一. 硬盘接口类型 1. 并行接口还是串行 ...
- 网络存储结构简明分析—DAS、NAS和SAN 三者区别
存储的总体分类 主流存储结构 网络存储结构大致分为三种:直连式存储(DAS:Direct Attached Storage).存储区域网络(SAN:Storage Area Network ...
- 区域存储网络(SAN)与 网络直接存储(NAS)
随着互联网及网络应用的飞速发展,数据信息存储系统所需处理的数据类型也呈爆炸性增长,这使数据信息存储系统面临前所未有的挑战.附加式网络存储装置(Network Attached Storage,缩写为N ...
- NAS网络存储
NAS(Network Attached Storage)网络存储基于标准网络协议实现数据传输,为网络中的Windows / Linux / Mac OS 等各种不同操作系统的计算机提供文件共享和数据 ...
- windows windows计划任务访问网络存储NAS的问题
windows 计划任务访问网络存储NAS的问题 WINDOWS 计划任务访问网络存储(NAS),程序找不到路径解决办法 Windows 服务器端运行的软件,大多时需要开机自启,这时Windows 计 ...
- 网络存储技术介绍(2) ( based on zt)
http://www.educity.cn/tx/429084.html 互联网技术DAS.NAS和SAN存储方案的比较 按照设备位置和接入方式,磁盘存储可以分为内置存储和外挂存储,外挂存储又分为直连 ...
随机推荐
- Dynamic CRM 2013学习笔记(三十三)自定义审批流4 - 规则节点 -有分支的流程处理
上次介绍过节点的基本配置<Dynamic CRM 2013学习笔记(三十二)自定义审批流3 - 节点及实体配置>,这次介绍下规则节点,因为有时流程里会有一些分支.合并,这时就要用到规则节点 ...
- Unity3D DF根据名称获取多个子控件代码
dfPanel control = gameObject.GetComponent<dfPanel>(); dfLabel avatarName = control.Find<dfL ...
- 设计模式之美:Command(命令)
索引 别名 意图 结构 参与者 适用性 效果 相关模式 实现 实现方式(一):直接注入 Receiver 对象,Command 决定调用哪个方法. 实现方式(二):注入 Receiver 的指定方法, ...
- Java面试题(1)
1.编写一个程序,将d:\java 目录下的所有.java 文件复制到d:\jad 目录下,并将原来文件的扩展名从.java 改为.jad. import java.io.File; import j ...
- ActiveMQ第四弹:在HermesJMS中创建ActiveMQ Session
Hermes JMS是一个开源免费的跨平台的JMS消息监听工具.它可以很方便和各种JMS框架集成和交互,可以用来监听.发送.接收.修改.存储消息等.这篇文章将讲解HermesJMS如何集成Active ...
- AngularJS快速入门指南06:过滤器
thead>tr>th, table.reference>tbody>tr>th, table.reference>tfoot>tr>th, table ...
- 使用SVG生成的奔跑吧兄弟的动画效果
在线演示 本地下载 缩放一下在线演示效果窗口,看看不同大小下的动画是不是都显示的非常完美? 体验一下SVG的强大之处吧!
- js图片时间翻转
带素材 代码一: <!-- Author: XiaoWen Create a file: 2016-12-12 10:08:02 Last modified: 2016-12-12 11:30: ...
- paip.sqlite 管理最好的工具 SQLite Expert 最佳实践总结
paip.sqlite 管理最好的工具 SQLite Expert 最佳实践总结 一般的管理工具斗可以...就是要是sqlite没正常地关闭哈,有shm跟wal文件..例如ff的place.sqlit ...
- Activemq 平台搭建与C#示列
ActiveMQ ActiveMQ 是Apache出品,最流行的,能力强劲的开源消息总线.ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范的 JMS Provider实现,尽管JMS ...