我正在开发一个应用程序,它应该在进程终止之前运行代码。我可以写一个内核模块来实现这一点。但我应该参与哪些功能?
要获得有关终止流程的通知我正在这样做。
HANDLE handle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, 1234);
DWORD wait = WaitForSingleObject(handle, INFINITE);
// Some block of code here that does the business logic.
handleProcessTermination();
我的问题是在我的函数handleProcessTermination()完成之前退出目标进程。我想要一种方法来停止流程的退出并运行我的逻辑。
答案 0 :(得分:0)
我认为没有办法推迟终止流程。即使停止该进程的所有线程也无济于事,因为进程的终止是由内核完成的。
由于我自己的经验,我假设Windows在进程终止时执行以下操作:
完成第1步后,由于调度程序不会激活该进程的任何线程,因此该进程注定失败。激活其中一个线程可能会导致它们发生狂暴,因为进程处于部分破坏状态(例如内存可能被释放,句柄被破坏,......),这可能会造成严重的麻烦!
我不认为有可能在没有内核部分的情况下改变这种行为。
旁注:如果在WaitForSingleObject(thread, ...)
之前发出WaitForSingleObject(process, ...)
信号,那将是一件有趣的事情。
答案 1 :(得分:0)
您应该能够创建一个调用PsSetCreateProcessNotifyRoutineEx的内核驱动程序,以便在进程开始/结束时创建回调例程。您的回调将被调用“就在退出进程的最后一个线程被销毁之前。”
这将不允许您永久“停止”进程终止,但允许您在进程结束之前注入一些代码。