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 的相关文章

  • 检查两个数是否是彼此的排列?

    给定两个数字 a b 使得 1 例如 123 是 312 的有效排列 我也不想对数字中的数字进行排序 如果您指的是数字的字符 例如 1927 和 9721 则 至少 有几种方法 如果允许排序 一种方法是简单地sprintf将它们放入两个缓冲
  • C# 和 Javascript SHA256 哈希的代码示例

    我有一个在服务器端运行的 C 算法 它对 Base64 编码的字符串进行哈希处理 byte salt Convert FromBase64String serverSalt Step 1 SHA256Managed sha256 new S
  • ASP.NET Core Serilog 未将属性推送到其自定义列

    我有这个设置appsettings json对于我的 Serilog 安装 Serilog MinimumLevel Information Enrich LogUserName Override Microsoft Critical Wr
  • 使闭包捕获的变量变得易失性

    闭包捕获的变量如何与不同线程交互 在下面的示例代码中 我想将totalEvents 声明为易失性的 但C 不允许这样做 是的 我知道这是错误的代码 这只是一个例子 private void WaitFor10Events volatile
  • 将布尔参数传递给 SQL Server 存储过程

    我早些时候问过这个问题 我以为我找到了问题所在 但我没有 我在将布尔参数传递给存储过程时遇到问题 这是我的 C 代码 public bool upload false protected void showDate object sende
  • WPF 中的调度程序和异步等待

    我正在尝试学习 WPF C 中的异步编程 但我陷入了异步编程和使用调度程序的困境 它们是不同的还是在相同的场景中使用 我愿意简短地回答这个问题 以免含糊不清 因为我知道我混淆了 WPF 中的概念和函数 但还不足以在功能上正确使用它 我在这里
  • 指针问题(仅在发布版本中)

    不确定如何描述这一点 但我在这里 由于某种原因 当尝试创建我的游戏的发布版本进行测试时 它的敌人创建方面不起作用 Enemies e level1 3 e level1 0 Enemies sdlLib 500 2 3 128 250 32
  • 在 Visual Studio 2008 上设置预调试事件

    我想在 Visual Studio 中开始调试程序之前运行一个任务 我每次调试程序时都需要运行此任务 因此构建后事件还不够好 我查看了设置的 调试 选项卡 但没有这样的选项 有什么办法可以做到这一点吗 你唯一可以尝试的 IMO 就是尝试Co
  • 获取没有非标准端口的原始 url (C#)

    第一个问题 环境 MVC C AppHarbor Problem 我正在调用 openid 提供商 并根据域生成绝对回调 url 在我的本地机器上 如果我点击的话 效果很好http localhost 12345 login Request
  • WPF TabControl,用C#代码更改TabItem的背景颜色

    嗨 我认为这是一个初学者的问题 我搜索了所有相关问题 但所有这些都由 xaml 回答 但是 我需要的是后台代码 我有一个 TabControl 我需要设置其项目的背景颜色 我需要在选择 取消选择和悬停时为项目设置不同的颜色 非常感谢你的帮助
  • Qt moc 在头文件中实现?

    是否可以告诉 Qt MOC 我想声明该类并在单个文件中实现它 而不是将它们拆分为 h 和 cpp 文件 如果要在 cpp 文件中声明并实现 QObject 子类 则必须手动包含 moc 文件 例如 文件main cpp struct Sub
  • 从路径中获取文件夹名称

    我有一些路c server folderName1 another name something another folder 我如何从那里提取最后一个文件夹名称 我尝试了几件事 但没有成功 我只是不想寻找最后的 然后就去休息了 Thank
  • Github Action 在运行可执行文件时卡住

    我正在尝试设置运行google tests on a C repository using Github Actions正在运行的Windows Latest 构建过程完成 但是当运行测试时 它被卡住并且不执行从生成的可执行文件Visual
  • Discord.net 无法在 Linux 上运行

    我正在尝试让在 Linux VPS 上运行的 Discord net 中编码的不和谐机器人 我通过单声道运行 但我不断收到此错误 Unhandled Exception System Exception Connection lost at
  • 实体框架 4 DB 优先依赖注入?

    我更喜欢创建自己的数据库 设置索引 唯一约束等 使用 edmx 实体框架设计器 从数据库生成域模型是轻而易举的事 现在我有兴趣使用依赖注入来设置一些存储库 我查看了 StackOverflow 上的一些文章和帖子 似乎重点关注代码优先方法
  • 将 xml 反序列化为类,list<> 出现问题

    我有以下 XML
  • 在 Dynamics CRM 插件中访问电子邮件发件人地址

    我正在编写一个 Dynamics CRM 2011 插件 该插件挂钩到电子邮件实体的更新后事件 阶段 40 pipeline http msdn microsoft com en us library gg327941 aspx 并且在此阶
  • 32 位到 64 位内联汇编移植

    我有一段 C 代码 在 GNU Linux 环境下用 g 编译 它加载一个函数指针 它如何执行并不重要 使用一些内联汇编将一些参数推送到堆栈上 然后调用该函数 代码如下 unsigned long stack 1 23 33 43 save
  • 防止索引超出范围错误

    我想编写对某些条件的检查 而不必使用 try catch 并且我想避免出现 Index Out of Range 错误的可能性 if array Element 0 Object Length gt 0 array Element 1 Ob
  • 恢复上传文件控制

    我确实阅读了以下帖子 C 暂停 恢复上传 https stackoverflow com questions 1048330 pause resume upload in c 使用 HTTP 恢复上传 https stackoverflow

随机推荐

  • 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 文件