WinAPI C - 来自 REDMON_USER 和 REDMON_SESSIONID 的 RunAsUser

2024-01-12

我安装了 PostScript 打印机驱动程序并设置了 REDMON (redmonnt.dll),用于将 postscript 输出重定向到我的程序。在我相当简单的 c 程序中,我从 STDIN 捕获数据,并且能够成功地将其保存到 .ps 文件中。该文件看起来不错。

但是,我想启动 gsview.exe 来查看该文件。如果我调用 ShellExecute,它在 Windows 7 中会因权限问题而失败。看来我的程序是在不同的用户帐户(LOCAL SERVICE)下调用的。因此,我正在寻找一种在特定用户名(启动打印作业的用户)下运行 gsview.exe 的方法,该用户名也可以在名为 REDMON_USER 的变量以及 SESSIONID 中供程序使用。

Q:在给定用户名和会话 ID 的情况下,启动程序所需的最少 WinAPI 调用是多少?

任何 C/C++、.NET 代码示例都会非常有帮助。

编辑:我想要完成的事情与 redrunee (来自 redmonee)非常相似。我不想使用 redrunee,因为它会打开一个控制台窗口一小会儿。

笔记: 1) 该程序由打印机服务以[LOCAL SERVICE]帐户调用。 2)第一个参数Username(REDMON_USER),实际上指向当前正在查看屏幕的用户


Look at 创建进程为用户 http://msdn.microsoft.com/en-us/library/ms682429%28v=VS.85%29.aspx.

还看CreateProcessWithLogonW and CreateProcess.

它们是从 CreateProcessAsUser 链接的

EDIT回复OP的评论。

遵循此建议thread http://social.msdn.microsoft.com/Forums/en/windowssecurity/thread/31bfa13d-982b-4b1a-bff3-2761ade5214f.

我在这里逐字复制此内容,以防原始链接停止工作:

相同的代码在 Vista 上适用于我们 在 XP 等上。该服务运行为 本地系统。

  1. 使用 WTSGetActiveConsoleSessionId 获取当前活动的 ID 控制台上的 Windows 会话(即 机器键盘和显示器,如 反对 WTS 会议)。

  2. 使用 WTSQueryUserToken 获取该会话的令牌。

  3. 使用 DuplicateTokenEx(hToken,MAXIMUM_ALLOWED,NULL,SecurityIdentification,TokenPrimary, &hTokenDup) 来复制该令牌。

  4. 使用 CreateEnvironmentBlock 创建一个您将身处的环境 传递给进程。

  5. 将 CreateProcessAsUser 与复制的令牌和创建的令牌一起使用 环境。实际上,我们使用 CreateProcessAsUserW,因为 A 版本有一些错误 较旧的系统。

  6. 不要忘记 CloseHandle 各种令牌等,并且 破坏环境阻止 环境。

谢谢efratian http://social.msdn.microsoft.com/Profile/en-US/?user=efratian.

附言。呵呵,Windows编程的乐趣,好久没做了。现在我记得为什么了。唯一接近甚至更差的记录是 OpenSSH 编程。

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

WinAPI C - 来自 REDMON_USER 和 REDMON_SESSIONID 的 RunAsUser 的相关文章

随机推荐

  • gzip 编码与 JSON 兼容吗?

    我正在尝试缩小 AJAX 调用中发生的一些奇怪现象的范围 我的 PHP 脚本的开头是这样的 ob start ob gzhandler 与 HTML 配合得很好 但是使用 application json 数据执行此操作有任何问题吗 有人知
  • Linq2Sql Many:很多问题,你会怎么做?

    我知道很多 Linq2Sql 不支持很多 但我正在研究解决方法 我正在使用我的小 SO 克隆 我有一个包含问题的表和一个包含标签的表和一个链接表 QuestionTag 所以我在问题和标签之间有一个经典的多 多关系 为了在首页上显示问题列表
  • 使用 Elasticsearch 进行简单的 AND 查询

    我正在尝试对两个指定字段进行简单查询 而手册和谷歌被证明没有什么帮助 下面的例子应该很清楚我想要做什么 query and term name family name daniel name given name tyrone 作为一个额外
  • 根据属性中的值设置元素的样式

    我实际上首先问过这个问题 但这是我的错 因为我无法正确描述那里的事情 所以我无法得到答案 但现在我将描述这里的一切 实际上 我想要一个 javascript 函数 它可以找到具有完整文档中任何元素的特定前缀的类 让我们以 html 标记为例
  • Flex/Bison 错误:请求非结构或联合中的成员“str”

    我正在学习 flex bison 我编写了以下程序但出现错误 include
  • MATLAB - 创建变量的引用(句柄?)

    假设我有以下课程 classdef myClass lt handle properties A 1 end methods function obj myClass val obj A val end end end 假设我实例化这个类的
  • 如何对表单元素进行分组

    我得到了这个表格
  • 如何将 aar 库上传到 Nexus?

    我有一个 Android aar 库 正在与 Android 应用程序一起使用 它可以与直接包含在 Android 项目中的 aar 库一起正常工作 我想将此库移至我的内部 Nexus maven 存储库 以便其他开发人员也可以使用该库 如
  • WindowManager$BadTokenException

    我正在尝试将进度对话框放在 Click 事件上ListView如下面的代码中所述 但我收到错误 WindowManager BadTokenException Unable to add window token android app L
  • Android,如何让应用程序的任务不可关闭?只能通过任务终止来关闭

    我正在开发一个应用程序 该应用程序必须始终运行并且只能通过任务杀手或类似工具关闭 我在清单中有 android persistent true 虽然按主页按钮时没有关闭 但我发现它时不时会关闭 我不希望这种情况发生 我的用户想要 可以通过从
  • 使用希伯来语时 Android textview stackoverflow

    我的应用程序正在从 RESTful http 源检索数据 有时 会有希伯来语文本 title 标题 内容为 6 月 12 日 歌词 一切都很好 直到必须在文本视图中使用它为止 我正在使用自己的列表适配器 当此文本尝试加载时会发生以下情况 I
  • 是否可以检查 URLconnection.getInputStream() 的进度?

    我想通过 URL 连接检查下载文件的进度 是否可能或者我应该使用另一个库 这是我的 urlconnection 函数 public static String sendPostRequest String httpURL String da
  • perl 在映射操作中丢弃第一个数组元素

    我开始利用 Perl Map 的强大功能 但遇到了一个我找不到答案的问题 基本上我正在解析一个 unix 命令的返回 该命令有一个我不需要的标题行 然后每个项目有 2 行信息 目前 我正在这样做 undef ret map split n
  • powershell在除IE之外的隐藏窗口中打开url

    我想使用除 IE 之外的浏览器运行像 Start Process 这样的 Power shell 命令 以在隐藏窗口中打开 有没有办法设置浏览器的大小 使其在运行 powershell 命令时隐藏 喜欢 启动进程 SomeCommandTo
  • 如何从viewController访问applicationDidEnterBackground

    我怎样才能打电话applicationDidEnterBackground在AppDelegate from a viewController 我想在应用程序的后台运行一个功能 而无需按主页按钮 您不应该从任何地方调用该函数 它可以让您知道
  • 可达性和国际漫游

    我正在使用ReachabilityApple 的类 用于确定数据或 wifi 是否可用 然而 一名用户 使用美国 iPhone 正在另一个国家 地区测试该应用程序 他在尝试访问 MapKit 时看到以下错误 Console 在我对这个错误的
  • 在 web.config 中使用自定义错误设置时出现 IIS7“oneliner”错误

    我有一个 ASP NET MVC 应用程序 它在各个适当的点返回 404 偶尔返回 500 状态代码 Response StatusCode int HttpStatusCode NotFound 当我设置这些状态代码之一时 我还相应地设置
  • Java属性,获取文件路径

    logpath LoggerUtils getProperties getProperty log path System out println logpath logpath 上面的代码返回 logpath C UsersMaurice
  • CosmosDB 创建 - API 选项(SQL 与 Graph)

    我有兴趣使用Azure CosmosDB https learn microsoft com en us azure cosmos db 因为它的图形功能 通过查看文档 我发现它将图形顶点和边作为 JSON 文档 具有商定的模式 因此可以作
  • WinAPI C - 来自 REDMON_USER 和 REDMON_SESSIONID 的 RunAsUser

    我安装了 PostScript 打印机驱动程序并设置了 REDMON redmonnt dll 用于将 postscript 输出重定向到我的程序 在我相当简单的 c 程序中 我从 STDIN 捕获数据 并且能够成功地将其保存到 ps 文件