阅读:3926回复:1
关于IoCancelIrp的同步问题
IoCancelIrp的具体实现为
1.得到Cancel自旋锁 2.Irp->Cancel=TRUE 3.以原子方式得到Irp->CancelRoutine的值c并设置Irp->CancelRoutine为NULL 4.如果c不为NULL则调用c,否则释放Cancel自旋锁并退出函数 现在有一个问题,当IoCancelIrp被调用后,但是实际执行第1步之前如果Irp已经被完成了这时Irp所指向的内存将不再有效, 则第2、3步会发生carsh 不知大家有何见解 |
|
沙发#
发布于:2010-02-25 10:20
当然要保证保证Irp的资源不能被释放。
IRP如果已经被完成,会有两种情况:1. 本驱动已经通过完成例程获知,那么就没有调用IoCancelIrp的必要。2. 本驱动还未获知,这时加Cancel自旋锁,有防止IRP资源释放的作用。 总之,只要IRP指针没有被滥用,应该不会发生crash。 |
|