访问网络驱动器上的文件

2024-04-13

背景:我有一个必须从网络驱动器 (Z:) 上的文件读取的应用程序

这在我的办公室域中工作得很好,但是它在现场(在不同的域中)不起作用。据我所知,域用户和网络驱动器的设置方式相同,但是我无权访问客户域中的用户等。

当我无法访问网络驱动器时,我想我需要用户的令牌。这就是我模拟用户的方式:

[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();
}

现在这是有趣/奇怪的部分。在我的网络中,应用程序已经可以访问网络驱动器,如果我尝试模拟活动用户(完全相同的用户,包括相同的域),它将无法访问网络驱动器。

这让我很无助,因为现在我不知道什么有效,什么无效,更重要的是,它在现场有效吗?

我缺少什么?

EDIT:我在最初提出问题时忘记写这个:我尝试输入有效的域名,但它不起作用,所以之后我尝试输入 null 以获得与没有此代码时相同的用户名(因为它默认工作)在我们的域中)。这没有帮助,这就是domain = null;的方式。最终出现在这个问题上。


一些想法:

  • 不要使用逻辑驱动器路径从代码访问网络资源。始终使用 UNC 路径(例如\\SERVER\Share\Filename.ext).
  • 从本地安全策略启用登录/注销事件审核,以便在调用 Impersonate 方法时,可以详细跟踪失败/成功
  • 您最好在自己的域中创建一个帐户,该帐户与其他域中的帐户具有相同的用户名和密码。在您的域中进行身份验证,直通身份验证将使您能够访问其他域上的网络共享。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

访问网络驱动器上的文件 的相关文章

随机推荐

  • 如何在java中将事件插入事件调度线程队列的开头?

    我已经知道怎么做了事件调度线程 http docs oracle com javase tutorial uiswing concurrency index html作品 如果事件调度线程中存在如下所示的短事件和长事件 则应用程序无法响应
  • RangeError:使用 valueChanges.subscribe 时超出最大调用堆栈大小

    我正在使用带有反应式表单的 Angular 5 并且需要使用 valueChanges 来动态禁用所需的验证 组件类 export class UserEditor implements OnInit public userForm For
  • 如何将 Gradle 项目外部依赖项下载到特定文件夹?

    我想将依赖项下载到构建中的特定文件夹 作为构建过程的一部分 例如构建 库 我找不到说明如何执行此操作的文档 我确信我缺少一种简单的方法来执行此操作 我当前 缩短的 build gradle 如下 该项目正确编译并执行测试 apply plu
  • git push 忽略 cocoapods

    我开发 iOS 应用程序已有几个月了 现在 我想将其推送到 bitBucket 上 问题是 git push 忽略与 cocoapods 相关的所有文件 例如 project xcworkspace Podfile Podfile lock
  • 在页面中多次获取相同数据的最佳方法是什么?

    我想在多次从 MySQL 获取数据的页面中显示相同的数据 首先我想使用MySQL从MySQL获取数据mysql fetch assoc 在 while 循环中 然后将其显示为菜单 第二次我想在页脚中显示与站点地图相同的数据 我现在正在打电话
  • Ember Data:重写 Save 方法

    您好 Ember 数据世界 我一直在研究自定义适配器 试图找出如何覆盖保存方法 根据我的理解 你似乎需要做这样的事情 DS RESTAdapter extend save function return this super 但是 当我尝试
  • Bootstrap 4 多个固定顶部导航栏

    Bootstrap 4 中是否可以有多个固定顶部导航栏相互显示 1 目前覆盖了另一个 这不是我想要的 是的 这是可能的 但你必须相应地定位第二个 导航栏的高度约为 56 像素 fixed top 2 margin top 56px body
  • 阿迪和苏比之间到底是什么“关系”?

    我应该回答这个问题 经过一番研究后发现 add 和 sub 具有相同的操作码 仅在功能领域有所不同 这是答案还是其他什么 Update Nios II CPU 手册中提供了它 subi subtract immediate Operatio
  • 如何配置 jshint 才不会出现错误“之前换行错误”?

    它给了我错误 之前的错误换行 因为我有如下代码 var one 1 two 2 three 3 如果我把 在行的末尾而不是下一行的开头 它不会抱怨 但我想这样编码 有什么办法可以让它不显示此警告吗 我虽然看了JSHint 的选项 http
  • 使用 MediaCodec 截断视频

    我使用Android MediaCodec库对视频文件进行转码 主要是改变分辨率示例代码在这里 https stackoverflow com questions 29943121 mediamuxer video compression
  • sc.textFile 之后的 zipWithIndex 会给出正确的行号吗?

    说如果我这样做 如下所示 val rdd sc textFile someFile txt val rddWithLines rdd zipWithIndex zipWithIndex 添加的索引是否对应于输入文件中的行号 第一行当然是 0
  • Powershell:递归替换目录的选择子文件中的字符串

    我在 Windows XP 上使用 Powershell 并尝试编写一个命令来 1 read all bat cfg and config files 2 replace a string it s actually the path th
  • 尝试对变量列表进行所有操作组合

    我有一个值列表 例如 values 1 2 3 4 我想尝试此列表中的所有组合 例如 1 2 1 3 1 4 1 2 1 3 1 4 1 2 3 1 2 4 1 3 4 etc 以最简洁的方式获得所有这些可能的操作组合的最直接的方法是什么
  • Mongodb子文档之间的多对多关系

    TL DR 想象一下第一个 match 阶段给了你几个文档 但你想要refine他们在里面 就像 redact做 但问题是你的子文档有关系 而你想要 where就像他们之间的检查一样 怎样才能做到这一点呢 我无法 unwind 因为它会导致
  • RxJava 中的 n 元笛卡尔积

    现在我持有一个Observable
  • 算术恒等式和 EFLAGS

    因为 x not x 1 意味着 a b a not b 1 那么 sub rax rcx 相当于 mov temp rcx not temp add rax temp add rax 1 其中 temp 是一些被认为是易失性的寄存器 换句
  • 在“UITableView”中选择行时调用新视图

    我目前正在编写我的第一个 iPhone 应用程序 但遇到了问题 我有一个包含 UITableView 的视图 这是我第一次尝试这样做 这是我试图实现的行为 当用户选择其中一行时 我希望调用一个新视图 将用户带到另一个页面 显示参考他们选择的
  • iOS 16 FairPlay 变化

    FairPlay 逻辑有任何变化吗 我的应用程序具有受 FairPlay 保护的视频和音频 它们在 iOS 15 7 之前完美运行 但在 iOS 16 中 makeStreamingContentKeyRequestData is thro
  • 如何通过 JavaScript 文件将所有 JavaScript 文件包含在目录中?

    我有一堆 JavaScript 文件 我想将它们包含在页面中 但我不想继续编写 那么有没有办法包含目录中的所有文件 大小未知 我可以做一些像 getScript js js 获取 js 目录中的所有 JavaScript 文件 我怎样才能使
  • 访问网络驱动器上的文件

    背景 我有一个必须从网络驱动器 Z 上的文件读取的应用程序 这在我的办公室域中工作得很好 但是它在现场 在不同的域中 不起作用 据我所知 域用户和网络驱动器的设置方式相同 但是我无权访问客户域中的用户等 当我无法访问网络驱动器时 我想我需要