阅读:1779回复:10
如果用户态死掉了,如何通知内核退出?(50)
遇到一个问题,当用户态被强制退出的时候,内核态不知道,内核还在运行,规则还在起做用,怎么办?
如何知道用户态已经退出了? |
|
沙发#
发布于:2002-07-09 15:41
除了定时检测还有什么好办法?
这个问题,小弟也想问问 |
|
板凳#
发布于:2002-07-09 15:45
呵呵,我以前就是用的定时检测,但是不好,所以想换一换,
用户态被ctrl+alt+del时,会收到系统的什么消息? |
|
地板#
发布于:2002-07-09 16:34
难道你没有跟应用层通讯的设备吗?如果有的话,打开的所有FileObject都要会被关闭的,这就是最好的消息阿。如果没有的话,你就创建一个也可以,我没有别的招数,就这烂招了。
|
|
地下室#
发布于:2002-07-09 16:40
上面没有讲清楚,其实根本的原因就是当进程被杀掉的时候,他所打开的所有句柄都要释放,所以如果你没有别的方法的话,那么你可以在驱动程序里面建立一个通讯用的设备,在进程启动时打开,进程退出的时候关闭。这样就算你的进程被杀掉,驱动里面一样也有通知的。
|
|
5楼#
发布于:2002-07-09 17:10
哦,知道了,谢谢谢谢!
50分给你! |
|
6楼#
发布于:2002-07-09 17:10
当用户程序非正常退出时,IRP_MJ_CLOSE也会被调用(此时用户程序没调用CloseHandle(hDevice))。
|
|
7楼#
发布于:2002-07-09 20:07
谢谢各位,我已经实现了,哈哈!
|
|
8楼#
发布于:2002-07-12 23:00
上面没有讲清楚,其实根本的原因就是当进程被杀掉的时候,他所打开的所有句柄都要释放,所以如果你没有别的方法的话,那么你可以在驱动程序里面建立一个通讯用的设备,在进程启动时打开,进程退出的时候关闭。这样就算你的进程被杀掉,驱动里面一样也有通知的。 最简单的办法调用PsLookupProcessByProcessId 如果PROCESS不在的话返回NULL. |
|
|
9楼#
发布于:2002-07-13 01:40
[quote]上面没有讲清楚,其实根本的原因就是当进程被杀掉的时候,他所打开的所有句柄都要释放,所以如果你没有别的方法的话,那么你可以在驱动程序里面建立一个通讯用的设备,在进程启动时打开,进程退出的时候关闭。这样就算你的进程被杀掉,驱动里面一样也有通知的。 最简单的办法调用PsLookupProcessByProcessId 如果PROCESS不在的话返回NULL. [/quote] 这似乎又会到了,定时的查询? :) |
|
|
10楼#
发布于:2002-07-15 15:54
[quote][quote]上面没有讲清楚,其实根本的原因就是当进程被杀掉的时候,他所打开的所有句柄都要释放,所以如果你没有别的方法的话,那么你可以在驱动程序里面建立一个通讯用的设备,在进程启动时打开,进程退出的时候关闭。这样就算你的进程被杀掉,驱动里面一样也有通知的。 最简单的办法调用PsLookupProcessByProcessId 如果PROCESS不在的话返回NULL. [/quote] 这似乎又会到了,定时的查询? :) [/quote] :) 看一下这个函数吧。 NTSTATUS PsSetCreateProcessNotifyRoutine( IN PCREATE_PROCESS_NOTIFY_ROUTINE NotifyRoutine, IN BOOLEAN Remove ); |
|
|