阅读:1970回复:3
又有两个NDIS HOOK的问题。。。。
当我已经HOOK了NDISTRANSFERDATA这个函数时,为什么我自己在RECEIVE时调用NDISTRANSFERDATA时,并没有调用HOOK后的函数,而别的驱动在调用NDISTRANSFERDATA,却是使用我HOOK后的函数.
还有就是为什么我替换了NDIS_OPEN_BLOCK里的TRANSDATA这个成员函数,当我在我的TRANSDATA函数里多使用DBGPRINT这样的输出函数时,却无法进行正常的网络传输,而我去掉DBGPRINT后网络却能恢复正常的传输 :)还有就是我该怎么样HOOK TransferDataComplete这个函数...是HOOK PNDIS_PROTOCOL_CHARACTERISTICS结构里的,还是HOOK NDIS_OPEN_BLOCK结构里的,为什么我怎么HOOK就是替换不到这个函数呢??? |
|
沙发#
发布于:2003-03-04 13:16
你自己没有调用是因为你调用的是系统的transferdata,别人调用系统的函数的时候其实是调用的你的。
那两个结构里面的是相同的函数,一样的。 |
|
|
板凳#
发布于:2003-03-04 15:32
当我已经HOOK了NDISTRANSFERDATA这个函数时,为什么我自己在RECEIVE时调用NDISTRANSFERDATA时,并没有调用HOOK后的函数,而别的驱动在调用NDISTRANSFERDATA,却是使用我HOOK后的函数. 1. 你HOOK的是那里的NDISTRANSFERDATA?总之调用NdisTransferData 时你传递的NdisBindingHandle是一个NDIS_OPEN_BLOCK,描述的是从那块网卡传输数据上来,在这里你肯定没有勾挂。 2.dbgprint不会影响你的程序,多半是你自己的原因。 3.关于TransferDataComplete,这个函数以前我提过,NDIS其实调用的是NDIS_MINIPORT_BLOCK里的TDComplete。 |
|
|
地板#
发布于:2003-03-05 17:33
[quote]当我已经HOOK了NDISTRANSFERDATA这个函数时,为什么我自己在RECEIVE时调用NDISTRANSFERDATA时,并没有调用HOOK后的函数,而别的驱动在调用NDISTRANSFERDATA,却是使用我HOOK后的函数. 1. 你HOOK的是那里的NDISTRANSFERDATA?总之调用NdisTransferData 时你传递的NdisBindingHandle是一个NDIS_OPEN_BLOCK,描述的是从那块网卡传输数据上来,在这里你肯定没有勾挂。 2.dbgprint不会影响你的程序,多半是你自己的原因。 3.关于TransferDataComplete,这个函数以前我提过,NDIS其实调用的是NDIS_MINIPORT_BLOCK里的TDComplete。 [/quote] 1.不应该。。。我的NDISTRANSFERDATA里的NdisBindingHandle参数是从Ndisopenadapter里传递过来的,而且NDISTRANSFERDATA调用都正确返回了传输的字节,我想应该没有参数错误的可能性。 2.dbgprint真的影响了我的程序,在NDIS_OPEN_BLOCK里的TRANSDATA的函数里,我多用了两个DbgPrint就会出现TIMEOUT的现象,会不会和PACKET里的TIMEOUT有关呢??如果去掉的话,就没有关系,就一切正常 3。NDIS_MINIPORT_BLOCK里的TDComplete???如果我没有HOOK到NDIS_MINIPORT_BLOCK结构。。。该怎么办呢??有没有什么别的办法可以替代???? [编辑 - 3/5/03 by cyf_rich] |
|