阅读:1036回复:0
初学驱动,请教一个关于完成例程的问题
我遇到一个问题,是关于键盘过滤驱动的,它支持卸载。它会自己创建一个设备,Attach到键盘驱动上,在IRP_MJ_READ里面对Irp设置完成例程,以得到按键信息。
但是这里有一个问题,这个驱动加载的时候,已经有一个Irp处于等待中了,由于这个Irp未设置完成例程,也就是说刚刚加载的第一次按键信息无法得到。 我试着给被Attach的设备的CurrentIrp直接设置完成例程,也就是直接对Irp栈成员变量赋值的方法,结果在按键后,完成例程确实被调用了,也得到了按键信息,但是之后的任何按键都没有用了!? 调试输出发现,原先会被调用IRP_MJ_READ回调,也没有被调用到,就好像是读取下一个键值的Irp根本没有生成似的。再次运行驱动,发现那个被Attach的设备的CurrentIrp已经是NULL了,那么就是说确实没有Irp在等待我们按键了?因为没有了下一个Irp,所以自然没人去读去键值,按键就没有用了? 初学驱动,不知道我理解的有没有问题,以及有没有方法解决呢? |
|