WinAPI C-来自REDMON_用户和REDMON_会话ID的RunAsUser
我安装了PostScript打印机驱动程序,并设置了REDMON(redmonnt.dll),用于将PostScript输出重定向到我的程序。在我相当简单的c程序中,我从STDIN中捕获数据,并成功地将其保存到一个.ps文件中。文件看起来没问题 但是,我想启动gsview.exe以查看文件。如果我调用ShellExecute,由于权限问题,它在Windows 7中会失败。我的程序似乎是在另一个用户帐户(本地服务)下调用的。因此,我正在寻找一种在特定用户名(启动打印作业的用户)下运行gsview.exe的方法,该用户名在名为REDMON_user的变量中以及SESSIONID中可供程序使用 Q:给定用户名和会话ID,启动程序所需的最小WinAPI调用是多少 C/C++、.NET中的任何代码示例都将非常有用 编辑:我试图完成的是与redrunee(来自redmonee)非常相似的东西。我不想使用redrunee,因为它会在控制台窗口打开一小段时间 注: 1) 该程序由打印机服务作为[本地服务]帐户调用。 2) 第一个参数Username(REDMON_USER)实际上指向当前正在查看屏幕的用户 另请查看WinAPI C-来自REDMON_用户和REDMON_会话ID的RunAsUser,c,winapi,runas,redmon,C,Winapi,Runas,Redmon,我安装了PostScript打印机驱动程序,并设置了REDMON(redmonnt.dll),用于将PostScript输出重定向到我的程序。在我相当简单的c程序中,我从STDIN中捕获数据,并成功地将其保存到一个.ps文件中。文件看起来没问题 但是,我想启动gsview.exe以查看文件。如果我调用ShellExecute,由于权限问题,它在Windows 7中会失败。我的程序似乎是在另一个用户帐户(本地服务)下调用的。因此,我正在寻找一种在特定用户名(启动打印作业的用户)下运行gsview.
CreateProcessWithLogonW
和CreateProcess
它们从CreateProcessAsUser链接
编辑回复OP的评论
听从这个人的建议
我在这里逐字复制,以防原始链接停止工作:
同样的代码在Vista上也适用于我们
在XP等上。该服务以
本地系统
CreateProcessWithLogonW和LogonUser都需要密码。打印机监视器只向我发送两个参数,username和sessionid=(REDMON文档说明可以使用打印机服务发送的这两个参数来启动CreateProcessAsUser。那么,我如何仅从[username]和[sessionid]获取hToken所以我可以将它传递给CreateProcessAsUser?从我上次看到的,redrun.exe在其源代码中使用CreateProcess()。另外,一个恼人的控制台窗口会打开大约1-3秒。我还看到redrunee.exe,它也有控制台窗口弹出问题。所以我决定编写自己的redrun。