将运行 EXE 的当前 Windows 用户替换为另一个用户

2023-12-01

假设我构建了一个从网络文件夹读取文件的 Windows 应用程序。网络折叠限制只有一个用户“fooUser”的访问。该应用程序安装在网络上的多台计算机上。

我需要将当前用户替换为“fooUser”,以便能够通过代码访问网络文件夹上的文件。


这是一个非常简单的模拟方案,可以让您在一段时间内成为任何人(前提是您拥有适当的凭据。)
本课程将为您完成所有繁重的工作......

  public class Impersonator : IDisposable
  {

    const int LOGON32_PROVIDER_DEFAULT = 0;
    const int LOGON32_LOGON_INTERACTIVE = 2;

    [DllImport("advapi32.dll", SetLastError = true)]
    public static extern bool LogonUser(String lpszUsername, String lpszDomain, String lpszPassword, int dwLogonType, int dwLogonProvider, ref IntPtr phToken);

    [DllImport("kernel32.dll", CharSet = CharSet.Auto)]
    public extern static bool CloseHandle(IntPtr handle);

    private IntPtr token = IntPtr.Zero;
    private WindowsImpersonationContext impersonated;
    private readonly string _ErrMsg = "";

    public bool IsImpersonating
    {
      get { return (token != IntPtr.Zero) && (impersonated != null); }
    }

    public string ErrMsg
    {
      get { return _ErrMsg; }
    }

    [PermissionSetAttribute(SecurityAction.Demand, Name = "FullTrust")]
    public Impersonator(string userName, string password, string domain)
    {
      StopImpersonating();

      bool loggedOn = LogonUser(userName, domain, password, LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, ref token);
      if (!loggedOn)
      {
        _ErrMsg = new System.ComponentModel.Win32Exception().Message;
        return;
      }

      WindowsIdentity identity = new WindowsIdentity(token);
      impersonated = identity.Impersonate();
    }

    private void StopImpersonating()
    {
      if (impersonated != null)
      {
        impersonated.Undo();
        impersonated = null;
      }

      if (token != IntPtr.Zero)
      {
        CloseHandle(token);
        token = IntPtr.Zero;
      }
    }

    public void Dispose()
    {
      StopImpersonating();
    }
  }

你可以像这样使用它;

using (Impersonator = new Impersonator(yourName,yourPassword,yourDomain))
{
 // Read files from network drives.
 // Other activities....
}

将模拟程序放在“使用”块中非常重要,或者在完成模拟任务后将其丢弃,否则系统将无限期地继续模拟,这将导致各种问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将运行 EXE 的当前 Windows 用户替换为另一个用户 的相关文章

  • 轮廓积分算法 C++

    我正在尝试编写一个应用数学程序来计算复平面中的轮廓积分 对于初学者来说 我想为梯形方法编写一个算法 但我有点坚持理解它会是什么样子 毕竟 我们通常将梯形方法视为 2D 图 而这里我们有 f C gt C 所以我们谈论的是 4D 最终我希望用
  • 类型定义存在于两个库中

    我正在使用 NET 4 5 构建 ASP NET Web 窗体网站 错误 The type System ComponentModel DataAnnotations Schema ForeignKeyAttribute exists in
  • 使用 boost::asio 是否有一种可移植的方法来查找空闲端口号

    我目前正在尝试找出一种方法来查找空闲端口号以建立连接 最好使用 boost asio 然后 该端口号将用于侦听 只有这样我才能打开套接字 大致来说 有没有办法做到 tcp resolver query query localhost por
  • C# - 如何从 Steam 交易 API 获取图标的 URL(编码)

    以下是 API 为每个项目返回的 XML 部分
  • flowlayoutpanel和水平滚动条问题

    我正在使用一个 flowlayoutpanel 它有很多逻辑上的按钮 我遇到的问题是 当我调整窗口大小时 当窗口变小时 我无法看到所有水平排列的按钮 相反 当窗口变小时 按钮会下降到下一行 谁能帮我解决这个问题 我只是希望按钮水平排列 当窗
  • 在 C++ 中从另一个数组初始化结构内的数组[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions struc
  • System.NotSupportedException:“集合是只读的。”从 iList 中删除对象时抛出

    运行下面的代码片段时抛出异常 我有一个 iListof webelements 如果该元素包含字符串 WSC 我想将其从 iList 中删除 谁能帮我吗 代码如下 IList
  • 将私有部分保留在 C++ 标头之外:纯虚拟基类与 pimpl

    我最近从 Java 和 Ruby 切换回 C 令我惊讶的是 当我更改私有方法的方法签名时 我必须重新编译使用公共接口的文件 因为私有部分也位于 h 文件中 我很快想出了一个解决方案 我想这对于 Java 程序员来说是典型的 接口 纯虚拟基类
  • Inno Setup中如何处理带空格的路径?

    我想允许带有空格的路径 例如program files 当使用 Inno Setup 安装我的程序时 但是 带有空格的路径会让我安装的服务崩溃 Inno 安装文件如下所示 Setup AppName Demo DefaultDirName
  • 批量修改XML文件

    好的 所以我不太熟悉使用 For F 如果文件是静态的并且有一组可以跳过然后从中提取数据的行 我可以修改它 我目前正在尝试修改 XML 文件 该文件将具有不同数量的行 但始终具有以下内容
  • 将控制台输入和输出重定向到文本框

    您好 提前致谢 我正在尝试 非常努力 将控制台输入和输出重定向到文本框 到目前为止 输出工作正常 但问题在于输入 例如 我无法执行一个简单的程序来执行以下操作 Console WriteLine 请输入您的姓名 字符串名称 Console
  • os.path.expanduser("~") 的替代方案?

    在Python 2 7 x中 os path expanduser Unicode 已损坏 这意味着如果 的扩展中包含非 ASCII 字符 则会出现异常 http bugs python org issue13207 http bugs p
  • 在 4.x 内核上的 64 位内存中查找系统调用表

    我正在尝试编写一个简单的内核模块来查找 Linux 中的 sys call table 但遇到了一些麻烦 我在这里找到了 32 位 Linux 的基本指南 https memset wordpress com 2011 03 18 sysc
  • BlueZ D-Bus C,应用 BLE

    我正在尝试编写一个应用程序来搜索附近的蓝牙设备并与它们通信 我的应用程序将用 C 语言编写 并打算在 Linux 下工作 是否有通过 C 中的 D Bus 使用 BlueZ 的教程或示例 此应用程序的目的是从 BLE 中的文件发送数据 你能
  • 允许使用 AutoMapper 或类似工具映射动态类型吗?

    我已经开始使用https github com robconery massive https github com robconery massive对于一个项目 我想知道是否有任何映射工具可以支持动态到静态类型的映射 我以前使用过 Au
  • 30000 毫秒后量角器超时

    我正在尝试将量角器 e2e 测试集成到我的巡航控制中 我正在使用以下测试规范 describe index function var ptor it should have a title function browser get http
  • System.IndexOutOfRangeException:索引超出了数组的范围[重复]

    这个问题在这里已经有答案了 我正在开发一个 ATM 软件作为家庭作业 我想知道今天处理的交易总量 为此我编写了以下代码 public decimal getDayTransaction int accountid string date s
  • 实例着色器矩阵的设置

    我想绘制实例立方体 我可以打电话GL DrawArraysInstanced PrimitiveType Triangles 0 36 2 成功地 我的问题是所有立方体都绘制在相同的位置和相同的旋转 我如何为每个立方体单独更改它 要创建不同
  • 所有区域的启用保护模式必须设置为相同的值(启用或禁用)

    我正在尝试使用Selenium Internet Explorer驱动程序 但当我尝试实例化它时它崩溃了 TestInitialize public void TestInitialise ieDriver new InternetExpl
  • 文件按文件名模式存在

    我在用 File Exists filepath 我想做的是将其替换为模式 因为文件名的第一部分发生了变化 例如 该文件可以是 01 peach xml 02 peach xml 03 peach xml 如何根据某种搜索模式检查文件是否存

随机推荐

  • python minmax仅使用递归

    我正在尝试构建一个函数 该函数接受一个列表并返回一个 最小值 最大值 的元组 例如 2 1 4 9 4 5 会回来 1 9 我尝试仅使用递归 并且希望执行此任务 而不使用其他可以使此操作变得非常简单的东西 例如 min max sort s
  • WP7 图像 Uri 作为 StaticResource

    我有一个 Windows Phone 7 应用程序 我正在尝试将一些常见元素移动到资源文件中 文本和样式工作正常 但我正在努力寻找正确的方法来划分 Uri 这是我正在尝试开始工作的代码示例
  • 权限从publish_stream迁移到publish_action

    我想知道您是否拥有publish stream 的用户权限 并且您希望从现在开始publish action publish stream 是否涵盖这两者 还是我们需要重新请求用户权限 如果是这样 检测他们是否获得此权限等最简单的方法是什么
  • SaaS - 共享数据库中租户特定的查找数据

    我正在开发基于多租户 SaaS 的应用程序 并使用共享数据库在 TenantId 列的帮助下存储所有租户记录 现在的问题是我有一些查找记录列表需要为所有租户共享 例如游戏列表 游戏桌 Id GameName 还有另一个表用于仅存储租户特定记
  • SQL Split 函数处理文本限定符之间出现分隔符的字符串?

    有多种 SQL 分割函数 从循环驱动到使用 xml 命令 甚至使用数字表 我还没有找到支持文本限定符的 使用下面的示例字符串 我想在 上分割 但当它出现在双引号或单引号之间时则不分割 示例数据 email protected Sally H
  • 从 Matlab 轮廓函数中选择等值线

    Matlab 轮廓函数 和 imcontour 绘制矩阵不同级别的等值线 我想知道 如何操纵该函数的输出以便接收每个轮廓的所有 x y 坐标以及级别 如何使用输出 C h 轮廓 来实现上述任务 另外 我对操纵底层网格不感兴趣 它是一个连续函
  • 当输入获得焦点时 CSS 改变图标颜色

    我希望用户图标和锁定图标在输入聚焦时改变颜色 但我不知道该怎么做 有人可以帮助我吗 我希望图标颜色为 c0392b div class input icons span class fa fa user span div
  • 函数声明 - 函数表达式 - 作用域

    在javascript中 函数声明和函数表达式在作用域方面有什么区别 函数声明意味着我们正在污染全局空间 函数表达式的情况是一样的吗 函数声明 function sum logic goes here 函数表达式 var sum funct
  • HTML 选择和文本输入

    我们都见过无数的表单实例 其中一个选择下拉菜单的选项之一为 其他 选择该选项后 我们会看到一个输入文本框 一直隐藏 要求我们输入输入内容 有没有更好的方法来实现这个 有没有插件可以让我做得更好 或者标准 HTML 元素就足够了 可能对选择标
  • 如何将 URL 参数列表字符串分解为成对的 [key] => [value] 数组? [复制]

    这个问题在这里已经有答案了 可能的重复 将查询字符串解析为数组 如何分解字符串 例如 a 1 b 2 c 3 从而变成 Array a gt 1 b gt 2 c gt 3 使用常规的explode 函数定界于 将分隔参数但不在 key g
  • xs:key,为什么当键值不是键引用的成员时验证会通过?

    我有兴趣在我的 Xsd 中定义一个关键约束 据我了解 使用xs key应该将使用的值限制为引用值列表的成员 假设我们使用样本 Xsd
  • Scala:有没有办法像在 Java 中一样使用 PriorityQueue?

    我有一个类 我想在 scala collection mutable PriorityQueue 中使用 但我不想仅出于此目的将其设为 Ordered A 我不认为我想要使用的 PriorityQueue 排序是类的自然排序 class M
  • 为什么STL容器没有虚拟析构函数?

    有谁知道为什么STL容器没有虚拟析构函数 据我所知 唯一的好处是 它通过一个指针 指向虚拟方法表 减少实例的大小 并且 它使破坏和建设速度更快一些 缺点是以通常的方式对容器进行子类化是不安全的 我的问题可以重新表述的另一种方式是 为什么 S
  • 获取列类型的SQL语句

    有没有可以返回表中列的类型的SQL语句 In ISO SQL i e most RDBMS today you can use the INFORMATION SCHEMA COLUMNS view which SQL Server sup
  • Python argv 采用通配符路径

    我运行我的脚本doc1 png作为第一个参数 但它被转换为doc1 image1 png 我怎样才能让Python看到确切的参数 img list print sys argv 1 x sys argv 1 img list img for
  • 调用方法后如何在标准输出中写入(自动执行通知系统(Iphone))

    我正在尝试使用自动通知系统 Iphone https github com simonwhitaker PyAPNs 当您想要发送通知时 您可以调用 apns gateway server send notification key Pay
  • bluebirdjs 承诺包裹在 for 循环中

    我有很多函数用于向我的服务提供数据 我想循环遍历它们中的每一个 并在其中一个返回所需结果时立即停止 如果第一个有效 那很好 如果有异常或数据无效 我想转到下一个 依此类推 我怎样才能实现这个目标 我有以下代码 handleData func
  • Facebook“赞”按钮回调

    我对实现 facebook 喜欢 按钮感兴趣 但我想知道哪些用户正在单击此按钮 以便我可以从中获取一些有用的信息 据我所知 Facebook 让我们对谁在点击什么一无所知 有人知道如何跟踪哪个用户点击了特定产品的 喜欢 按钮吗 更新 赞 按
  • 如何将对象存储在 firebase cloud function RAM 中?

    我的应用程序需要在处理用户的请求之前构建几个大型哈希图 理想情况下 我想将这些哈希图存储在机器的内存中 这意味着它永远不需要进行任何昂贵的处理 并且可以快速处理任何传入的请求 但这对于 Firebase 不起作用 因为用户有可能触发一个新实
  • 将运行 EXE 的当前 Windows 用户替换为另一个用户

    假设我构建了一个从网络文件夹读取文件的 Windows 应用程序 网络折叠限制只有一个用户 fooUser 的访问 该应用程序安装在网络上的多台计算机上 我需要将当前用户替换为 fooUser 以便能够通过代码访问网络文件夹上的文件 这是一