-
-
[求助]设置自己的irp完成例程
-
发表于:
2008-11-6 10:53
8516
-
有个问题困扰很久,只好来求助各位大侠。
现在我截取到了win的tdi通信层tcpdispatch函数入口,并且截取了tdi_create这个irp,我想对这个irp设定一个自己的completeroution这个完成例程,在设定完这个例程之后,并不是使用iocalldriver来调用下一层驱动,而是直接把这个irp传提到tcpdispatch函数入口,问题就出在这里。传递之后,整个通信过程可以顺利完成,但是自己的completeroution这个完成例程并没有被调用。
设定自己的completeroution这个完成例程的方法尝试过两种,一种是用IoSetCompletionRoutine,但是这个函数是设定下一层驱动的irp完成例程,貌似不能在我这种情况下使用。第二种是直接设定irp栈的CompletionRoutine和context这两个参数,然后下发,但是通信完成之后也没有能够调用。
跟踪了tcpdispatch里面的create函数,发现里面已经用iocompleterequest来设定该irp已完成,并且status和information也已经填充。
同时研究了tdifw1.4.4的源码,发现里面如果采用hook的话,也用了IoSetCompletionRoutine,但是驱动不能加载。。。
现在很无奈了,不知道问题出在哪里了,不知道那位兄弟也遇到过这种情况,望不吝赐教,万分感谢。
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)