网络驱动器上访问文件
背景:我有了从文件的网络驱动器上读取(Z :)网络驱动器上访问文件
这工作在我的办公室域伟大的应用程序,但它不工作的网站(在不同的域中)。据我所知,域用户和网络驱动器的设置方式相同,但我无法访问客户域中的用户等。
当我无法访问网络驱动器时,我想我需要一个令牌给用户。这是我impersionate用户:
[DllImport("advapi32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
public static extern bool LogonUser(String lpszUsername, String lpszDomain, String lpszPassword, int dwLogonType, int dwLogonProvider, ref IntPtr phToken);
...
const string userName = "USER";
const string pass = "PASS";
const string domainName = "VALIDDOMAIN.local" //tried with valid domain name and with null, same result
const int LOGON32_PROVIDER_DEFAULT = 0;
const int LOGON32_LOGON_INTERACTIVE = 2;
IntPtr tokenHandle = new IntPtr(0);
bool returnValue = LogonUser(userName, domainName, pass,
LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT,
ref tokenHandle);
if (!returnValue)
throw new Exception("Logon failed.");
WindowsImpersonationContext impersonatedUser = null;
try
{
WindowsIdentity wid = new WindowsIdentity(tokenHandle);
impersonatedUser = wid.Impersonate();
}
finally
{
if (impersonatedUser != null) impersonatedUser.Undo();
}
现在这里是有趣/怪异的一部分。在我的网络中,应用程序可以访问网络驱动器,如果我尝试模拟活动用户(完全相同的用户,包括相同的域),它将无法访问网络驱动器。
这让我感到无助,因为现在我不知道什么可行,什么不可行,更重要的是,它会在现场工作吗?
我错过了什么?
编辑:我忘了写这篇而原本提出质疑:我曾尝试输入有效的域名,并没有工作,所以在那之后我试图进入空,以获得相同的用户名,因为我会不此代码(因为它在我们的域中默认工作)。这没有帮助,这就是域= null;结束了这个问题。
的几点思考:
- 不要使用逻辑驱动器的路径从代码中访问网络资源。始终使用UNC路径(例如
\\SERVER\Share\Filename.ext
)。 - 从本地安全策略启用审核登录/注销事件,以便当您调用模拟方法时,可以详细跟踪失败/成功
- 您最好在自己的域中创建一个帐户,与其他域中的帐户具有相同的用户名和密码。验证您的域名和传递身份验证会让您访问其他域上的网络共享。
将测试UNC路径。不过,我确实觉得你误解了我的域名。在测试环境中有两个独立的域,一个在现场,从不互相通信。用户在双方都在它试图访问的域中。 – 2010-03-25 20:31:04
另外,我不是100%确定我将拥有UNC路径 - 客户系统管理员已经建立了一个域用户,因此我可以拥有映射的网络驱动器。我还可以UNC访问它吗? – 2010-03-26 11:04:57
这听起来很愚蠢,但您是否试图改变访问驱动器的方式? 也许安装某种形式的虚拟处理程序,可让您查看驱动器上的信息。例如SSH?
我敢打赌,超级用户会争论相反(因为这有代码)。 – Codesleuth 2010-03-23 15:45:55
为什么不让执行此代码的帐户对驱动器有读取权限?然后你的代码变成这样:'File.ReadAllBytes(filePath);' – ChaosPandion 2010-03-23 15:47:26
我曾经问过类似的问题;你可能会觉得它很有用:http://stackoverflow.com/questions/659013/accessing-a-shared-file-unc-from-a-remote-non-trusted-domain-with-credentials – Randolpho 2010-03-23 15:47:38