Windows XP / VISTA / 7
在explorer.exe终止后,如何在用户的注销过程中运行应用程序?
目的是阻止关闭,但使用在资源管理器终止后运行的应用程序。
当然可以使用ShutdownBlockReasonCreate临时阻止vista中的关闭,或者通过WM_QUERYENDSESSION在XP中取消它。但是,这两种方法都在Explorer终止之前的用户会话期间发生。问题是如何在资源管理器终止并阻止关闭后运行应用程序。
这在服务中是不可能的,因为在VISTA / 7中,如果用户选择了Shutdown / Restart,则该服务似乎无法在用户注销后阻止关闭。 (内核似乎终止服务,服务本身不能像用户应用程序一样阻止关机?)
WinLogon如何以及何时终止explorer.exe?它似乎等待所有/任何其他应用程序终止并停止阻塞关闭,然后它终止资源管理器?
在最终关闭桌面/会话之前,WinLogon是否等待explorer.exe关闭?
我已经考虑过,例如尝试为终止进程的API挂起NTDLL并拦截资源管理器的终止但是目前还不清楚Winlogon会如何或为何等待而不是继续关闭。
所有这一切的目的是找到一种在Vista / 7关闭期间运行可执行文件的方法,只要它可以阻止关闭,只有在浏览器退出并且所有文件和资源都已被释放后资源管理器和以该用户身份运行的所有其他应用程序。
在XP中,这可以通过简单地取消WM_QUERYENDSESSION中的关闭然后重新发出ExitWindowsEx(LOGOFF)然后在系统服务中执行任务来实现。然而,它使用户处于登录屏幕,没有进度指示。
如果可以在资源管理器终止后注入进程,则该进程将能够(在我的理论中)在同一用户的桌面上显示UI,并在注销过程中有效地充当第二次自定义shell。
据信/怀疑Windows在关机期间安装更新时会执行类似的操作(但到目前为止还没有在Vista上注意到此行为)
总之,在用户注销时资源管理器关闭后,Vista中似乎没有明显的方法来阻止关闭?