gpt4 book ai didi

java - 从本地系统进程启动交互式用户进程 - 获取错误代码 5

转载 作者:太空宇宙 更新时间:2023-11-04 09:31:10 25 4
gpt4 key购买 nike

我使用 Java JNA 来执行 Windows API 命令。

我有一个作为本地系统运行的后台服务。从这个后台服务中,我想生成一个新进程,例如当前 Activity 桌面和用户上的 notepad.exe。新进程不应以提升的权限运行,但应以 Activity 的登录用户权限运行。

我用

  • WTSGetActiveConsoleSessionId 用于获取 Activity session
  • WTSQueryUserToken 获取相关 token
  • CreateProcessAsUser 启动进程

如果我构建一个 jar 并从本地系统帐户使用 java -jar my.jar 启动该 jar,则效果很好。

但是,我从 Install4j 安装程序运行代码,它或多或少是一个封装在 exe 中的 JVM。相同的代码现在失败,并且 CreateProcessAsUser 导致错误代码 5(无法访问)

  • 我比较了这些 token ,没有发现任何差异。相同的用户、所有者、组和权限。
  • 我尝试使用进程监视器来查找任何特殊内容:什么都没有
  • 我尝试使用 CreateProcessWithTokenW 而不是 CreateProcessAsUser。该进程启动但立即退出(可能是 Windowsstation/桌面问题)

预期结果:“子”进程启动并在当前 Activity 桌面上显示 UI。

实际结果:CreateProcessAsUser 上的错误代码 5

        final PROCESS_INFORMATION processInformation = new PROCESS_INFORMATION();
final int activeConsoleSessionId = Kernel32Ext.INSTANCE.WTSGetActiveConsoleSessionId();
final PointerByReference userPrimaryProcessToken = new PointerByReference();
if (!Wtsapi32Ext.INSTANCE.WTSQueryUserToken(activeConsoleSessionId, userPrimaryProcessToken)) {
throw new Win32Exception(Kernel32.INSTANCE.GetLastError());
}
final STARTUPINFO startupInfo = new STARTUPINFO();
startupInfo.clear();
startupInfo.lpDesktop = "winsta0\\default";
startupInfo.wShowWindow = new WORD(1);
startupInfo.cb = new DWORD(processInformation.size());
final String cmdString = "C:\\Windows\\System32\\notepad.exe";
if (!AdvapiExt.INSTANCE.CreateProcessAsUser(new HANDLE(userPrimaryProcessToken.getValue()), null, cmdString, null, null, true, Kernel32.CREATE_UNICODE_ENVIRONMENT, null, "c:\\", startupInfo, processInformation)) {
final int error = Kernel32.INSTANCE.GetLastError();
throw new Win32Exception(error);
}

最佳答案

这不是真正的答案,但在系统重新启动和 Windows 更新后,我无法再重现该问题。如果我能够再次重现它,我将继续调查。

问题“消失”之前注意到的一些事情:

1.在更新Windows之前,我启用了程序执行审核(本地安全策略),并在Windows日志中看到,根据日志,即使没有窗口或正在运行的进程,应用程序也已启动,并且CreateProcessAsUser返回错误...

2.仅当 services.exe 在调用链中时才会出现此问题。如果我直接通过 psexe 作为本地系统进程启动应用程序,一切都会顺利。

关于java - 从本地系统进程启动交互式用户进程 - 获取错误代码 5,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57078569/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com