将运行 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# 中的协变和逆变

    首先我要说的是 我是一名正在学习 C 编程的 Java 开发人员 因此 我会将我所知道的与我正在学习的进行比较 我已经使用 C 泛型几个小时了 我已经能够在 C 中重现我在 Java 中知道的相同内容 除了几个使用协变和逆变的示例 我正在读
  • 如何将pdf页面设置设置为打印属性对话框?

    大家好 我想知道如何设置 pdf 页面设置到打印属性对话框 例如 如果我的 PDF 页面设置为横向 则布局会自动显示横向而不是纵向 如果我的 PDF 页面设置为纵向 则布局会自动显示纵向 我在这个主题上做了很多研发 但没有找到任何满意的链接
  • 将 OpenBLAS 链接到 MinGW

    我正在尝试链接OpenBLAS https www openblas net 图书馆与明GW w64 https mingw w64 org Windows 上的编译器 这是我的代码 include
  • 如何将字节块读入结构体

    我有一个需要处理的资源文件 它包含一组文件 首先 资源文件列出了其中包含的所有文件 以及一些其他数据 例如在此结构中 struct FileEntry byte Value1 char Filename 12 byte Value2 byt
  • 将 C# 反射代码移植到 Metro-Ui

    我正在尝试移植使用反射的现有 C 类 通用工厂 但我无法编译这段代码 Type types Assembly GetAssembly typeof TProduct GetTypes foreach Type type in types i
  • F10键没被抓住

    I have a Windows Form and there overriden ProcessCmdKey However this works with all of the F Keys except for F10 I am tr
  • .net Framework (.net 4.0) 中定义 Base 3 数字的类

    我正在寻找一些可以用来定义 3 基数 三进制数 的类 有什么我可以在 net 框架中使用的东西或者我需要写一些东西吗 谢谢你的帮助 您可以使用解析Convert ToInt32 s base http msdn microsoft com
  • 使用scanf()时如何区分整数和字符

    我只是使用该功能scanf 代码如下 scanf d a printf d a 当我输入1时 它会像我想要的那样打印1 但即使我输入 1a 它也会像以前一样打印 1 当用户输入非整数时 例如 2 3 12ab 1 a 我想向用户显示 输入整
  • c# 如何生成锦标赛括号 HTML 表

    所以我已经被这个问题困扰了三个星期 但我一生都无法弄清楚 我想做的是使用表格获得这种输出 演示 http www esl world net masters season6 hanover sc2 playoffs rankings htt
  • 数据损坏 C++ 和 Python 之间的管道

    我正在编写一些代码 从 Python 获取二进制数据 将其通过管道传输到 C 对数据进行一些处理 在本例中计算互信息度量 然后将结果通过管道传输回 Python 在测试时 我发现如果我发送的数据是一组尺寸小于 1500 X 1500 的 2
  • 从包含大量文件的目录中检索文件

    我的目录包含近 14 000 000 个 wav 格式的音频样本 所有普通存储 没有子目录 我想循环浏览文件 但是当我使用DirectoryInfo GetFiles 在该文件夹上 整个应用程序冻结了几分钟 可以用另一种方式完成吗 也许读取
  • realloc():重新分配为 char * 上的 strcat 腾出空间时下一个大小无效 [重复]

    这个问题在这里已经有答案了 我在以下代码中收到无效内存错误 printf s n FINE 5 printf s LENGTH IS d n FINE 6 strlen buffer char realloc buffer strlen b
  • 无法通过 LINQ to Entities 使用某些功能?

    我正在尝试使用 LINQ 查询在项目上实现搜索功能 由于数据有时包含带有重音符号和其他符号的字符 因此我创建了一种方法来删除这些字符以进行搜索 这是我的代码 var addresses from a in db Addresses join
  • 理解 C++11 中的 std::atomic::compare_exchange_weak()

    bool compare exchange weak T expected T val compare exchange weak 是 C 11 中提供的比较交换原语之一 它是weak即使对象的值等于 它也会返回 falseexpected
  • 微软语音识别速度

    我正在使用微软的语音识别器开发一个小型练习应用程序 对于我正在做的事情来说 我似乎无法让它足够快地识别单个单词 我希望能够正常说话 系统将从我所说的内容中抓取 关键字 并生成一个字符串 目前我正在使用 5 个单词的自定义语法 红 蓝 黄 绿
  • 如何强制执行特定的 UserControl 设计

    我正在编写一个基本用户控件 它将由一堆其他用户控件继承 我需要对所有这些后代控件强制执行某种设计 例如 顶部必须有几个按钮以及一个或两个标签 后代用户控件区域的其余部分可以自由放置任何内容 最初 我认为我可以将一个面板放到 Base Use
  • 如何使用 ASP.NET Web 表单从代码隐藏中访问更新面板内的文本框、标签

    我在更新面板中定义了一些控件 它们绑定到中继器控件 我需要根据匿名字段隐藏和显示用户名和国家 地区 但问题是我无法以编程方式访问更新面板中定义的控件 我如何访问这些控件 我也在网上查找但找不到很多参考资料 下面是来自aspx页面和 cs页面
  • c# 替代方案中 cfusion_encrypt 中填充的密钥是什么?

    我找到了从这里复制 C 中的 cfusion encrypt 函数的答案 ColdFusion cfusion encrypt 和 cfusion decrypt C 替代方案 https stackoverflow com questio
  • 在何处将 CFLAG(例如 -std=gnu99)添加到 (Eclipse CDT) 自动工具项目中

    我有一个简单的 Autotools C 项目 不是 C 其框架是由 Eclipse CDT Juno 为我创建的 CFLAG 通过检查 似乎是 g O2 我希望所有生成的 make 文件也具有 std gnu99附加到 CFLAG 因为我使
  • 如何确定给定方法可以抛出哪些异常?

    我的问题和这个真的一样 找出 C 中方法可能抛出的异常 https stackoverflow com questions 264747 finding out what exceptions a method might throw in

随机推荐

  • 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 以便能够通过代码访问网络文件夹上的文件 这是一