swift
驱动中牛
驱动中牛
  • 注册日期2001-07-26
  • 最后登录2007-05-09
  • 粉丝0
  • 关注0
  • 积分70分
  • 威望7点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
阅读:1706回复:10

如果用户态死掉了,如何通知内核退出?(50)

楼主#
更多 发布于:2002-07-09 14:45
遇到一个问题,当用户态被强制退出的时候,内核态不知道,内核还在运行,规则还在起做用,怎么办?

如何知道用户态已经退出了?
jame.z
驱动牛犊
驱动牛犊
  • 注册日期2001-08-07
  • 最后登录2004-05-11
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-07-09 15:41
除了定时检测还有什么好办法?
这个问题,小弟也想问问
swift
驱动中牛
驱动中牛
  • 注册日期2001-07-26
  • 最后登录2007-05-09
  • 粉丝0
  • 关注0
  • 积分70分
  • 威望7点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-07-09 15:45
呵呵,我以前就是用的定时检测,但是不好,所以想换一换,
用户态被ctrl+alt+del时,会收到系统的什么消息?


fracker
驱动太牛
驱动太牛
  • 注册日期2001-06-28
  • 最后登录2021-03-30
  • 粉丝0
  • 关注0
  • 积分219分
  • 威望81点
  • 贡献值0点
  • 好评度23点
  • 原创分0分
  • 专家分1分
  • 社区居民
地板#
发布于:2002-07-09 16:34
难道你没有跟应用层通讯的设备吗?如果有的话,打开的所有FileObject都要会被关闭的,这就是最好的消息阿。如果没有的话,你就创建一个也可以,我没有别的招数,就这烂招了。
fracker
驱动太牛
驱动太牛
  • 注册日期2001-06-28
  • 最后登录2021-03-30
  • 粉丝0
  • 关注0
  • 积分219分
  • 威望81点
  • 贡献值0点
  • 好评度23点
  • 原创分0分
  • 专家分1分
  • 社区居民
地下室#
发布于:2002-07-09 16:40
上面没有讲清楚,其实根本的原因就是当进程被杀掉的时候,他所打开的所有句柄都要释放,所以如果你没有别的方法的话,那么你可以在驱动程序里面建立一个通讯用的设备,在进程启动时打开,进程退出的时候关闭。这样就算你的进程被杀掉,驱动里面一样也有通知的。
swift
驱动中牛
驱动中牛
  • 注册日期2001-07-26
  • 最后登录2007-05-09
  • 粉丝0
  • 关注0
  • 积分70分
  • 威望7点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-07-09 17:10
哦,知道了,谢谢谢谢!
50分给你!
dazzy
驱动中牛
驱动中牛
  • 注册日期2001-03-23
  • 最后登录2008-08-12
  • 粉丝1
  • 关注0
  • 积分0分
  • 威望10点
  • 贡献值1点
  • 好评度10点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2002-07-09 17:10
当用户程序非正常退出时,IRP_MJ_CLOSE也会被调用(此时用户程序没调用CloseHandle(hDevice))。
swift
驱动中牛
驱动中牛
  • 注册日期2001-07-26
  • 最后登录2007-05-09
  • 粉丝0
  • 关注0
  • 积分70分
  • 威望7点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2002-07-09 20:07
谢谢各位,我已经实现了,哈哈!

gjpland
驱动小牛
驱动小牛
  • 注册日期2001-09-13
  • 最后登录2011-03-22
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2002-07-12 23:00
上面没有讲清楚,其实根本的原因就是当进程被杀掉的时候,他所打开的所有句柄都要释放,所以如果你没有别的方法的话,那么你可以在驱动程序里面建立一个通讯用的设备,在进程启动时打开,进程退出的时候关闭。这样就算你的进程被杀掉,驱动里面一样也有通知的。

最简单的办法调用PsLookupProcessByProcessId
如果PROCESS不在的话返回NULL.
我思故我在,脑袋不会坏.
magicx
驱动老牛
驱动老牛
  • 注册日期2002-02-22
  • 最后登录2014-08-18
  • 粉丝1
  • 关注0
  • 积分-14分
  • 威望13点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2002-07-13 01:40
[quote]上面没有讲清楚,其实根本的原因就是当进程被杀掉的时候,他所打开的所有句柄都要释放,所以如果你没有别的方法的话,那么你可以在驱动程序里面建立一个通讯用的设备,在进程启动时打开,进程退出的时候关闭。这样就算你的进程被杀掉,驱动里面一样也有通知的。

最简单的办法调用PsLookupProcessByProcessId
如果PROCESS不在的话返回NULL. [/quote]

这似乎又会到了,定时的查询?

 :)
[color=red]大头鬼! :P[/color]
gjpland
驱动小牛
驱动小牛
  • 注册日期2001-09-13
  • 最后登录2011-03-22
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2002-07-15 15:54
[quote][quote]上面没有讲清楚,其实根本的原因就是当进程被杀掉的时候,他所打开的所有句柄都要释放,所以如果你没有别的方法的话,那么你可以在驱动程序里面建立一个通讯用的设备,在进程启动时打开,进程退出的时候关闭。这样就算你的进程被杀掉,驱动里面一样也有通知的。

最简单的办法调用PsLookupProcessByProcessId
如果PROCESS不在的话返回NULL. [/quote]

这似乎又会到了,定时的查询?

 :) [/quote]
:)
看一下这个函数吧。
NTSTATUS
  PsSetCreateProcessNotifyRoutine(
  IN PCREATE_PROCESS_NOTIFY_ROUTINE  NotifyRoutine,
  IN BOOLEAN  Remove
  );

我思故我在,脑袋不会坏.
游客

返回顶部