请教高手 wdm中,什么是重入?或者说什么情况导致重入?
跟普通的重入不一样么?重复发送了IRP的时候,回调函数被多次调用了?
我是新手,瞎猜的。
帮顶、关注
比如说分发例程(Create,Close,Read,Write等),可能有多个用户态程序调用它们,这样在一个例程还没完成时,就可能接到另一个进程(线程)对它的另一个调用。可重入就是指,类似这样的情况,例程能正确处理。也就是说,例程不应依赖全局变量或局部变量来处理请求,一个调用的状态不会影响另一个。如果必须用全局变量,必须考虑并发访问时对数据的保护。
重入就是同一个函数在多个线程中同时被调用,驱动程序中重入是非常常见的情况,在程序中注意避免使用共享资源,不能避免时采用适当的线程同步机制。
我感觉他们说的不是很完全。
你看下楚狂人的 文件过滤驱动教程吧 里面有一个讲述重入的。
我认为重入就是 你这层正在处理的东西使用到你的上层的东西了,然后上层又需要你完成这个功能。
比方我内核文件系统上创建一个文件 使用zw系列的函数就有可能重入。 因为我发起irp后 内核把这个irp发给文件系统的顶层了,而我在文件系统上,所以又重新到我这里来了。
上面几位说的 我感觉好像不是说重入,有一个说的是并发 并发串行化就可以解决了。