阅读:1336回复:4
难题请教:驱动如何得知调用它而被阻塞的用户进程被杀死或强行结束?
比如,用户进程发出一个IRP_MJ_READ请求,驱动将其PENDING。而在IoCompleteRequest之前,用户进程被强制结束。如何得知?
我发现如果发出Ctrl-Break或者结束任务,会导致窗口关闭,而进程却无法释放。如果一直没有合适的数据完成IoCompleteRequest,这个进程就成了僵尸。怎么办呢? |
|
沙发#
发布于:2003-11-09 11:19
你的驱动没有处理IRP Cancel吧?
|
|
板凳#
发布于:2003-11-09 18:52
IRP Cancel?这个是驱动主动发出的吧,还是系统向驱动发出的?如果是前者,但驱动里面不知道用户进程被结束,所以不知道何时Cancel;如果是后者,DDK文档并没有类似于IRP_MJ_CANCEL啊。
|
|
地板#
发布于:2003-11-09 19:36
IRP Cancel?这个是驱动主动发出的吧,还是系统向驱动发出的?如果是前者,但驱动里面不知道用户进程被结束,所以不知道何时Cancel;如果是后者,DDK文档并没有类似于IRP_MJ_CANCEL啊。每个IRP都可以设置一个CancelRoutine,当IRP被Cancel的时候,会调用这个函数。 |
|
地下室#
发布于:2003-11-10 19:58
多谢指教,问题解决了。版主果然厉害,谢谢!
|
|