1

视窗 XP/VISTA/7

在 explorer.exe 终止后,如何在用户注销过程中运行应用程序?

目的是阻止关闭,但在资源管理器终止后运行的应用程序。

当然可以在 vista 中使用 ShutdownBlockReasonCreate 临时阻止关机,或者在 XP 中通过 WM_QUERYENDSESSION 取消它。但是,这两种方法都发生在 Explorer 终止之前的用户会话期间。问题是如何让应用程序在资源管理器终止并阻止关闭后运行。

这在服务中是不可能的,因为在 VISTA/7 中,如果用户选择了关闭/重新启动,服务似乎无法在用户注销后阻止关闭。(内核似乎终止了服务,并且服务本身不能像用户应用程序那样阻止关闭?)

WinLogon 究竟如何以及何时终止 explorer.exe?似乎它等到所有/任何其他应用程序终止并停止阻止关闭,然后它终止资源管理器?

WinLogon 在最终关闭桌面/会话之前是否等待 explorer.exe 关闭?

我已经考虑过,例如尝试为终止进程的 API 挂钩 NTDLL 并拦截资源管理器的终止,但不清楚 Winlogon 如何或为什么会等待而不是继续关闭。

所有这一切的目的是找到一种在 Vista/7 关闭期间运行可执行文件的方法,它能够阻止关闭只要它喜欢,只有在资源管理器退出并且所有文件和资源已被资源管理器和所有以该用户身份运行的其他应用程序。

在 XP 中,这可以通过简单地取消 WM_QUERYENDSESSION 中的关闭然后重新发出 ExitWindowsEx (LOGOFF) 然后在系统服务中执行任务来实现。然而,它使用户停留在没有进度指示的登录屏幕上。

如果可以在资源管理器终止后注入进程,则该进程将能够(在我的理论中)在同一用户的桌面上显示 UI,并在注销过程中有效地充当第二次自定义 shell。

相信/怀疑 Windows 在关机期间安装更新时会执行类似的操作(但目前在 Vista 上尚未注意到此行为)

总之,在用户注销期间资源管理器关闭后,Vista 中似乎没有明显的方法来阻止关闭?

4

0 回答 0