cyf_rich
驱动牛犊
驱动牛犊
  • 注册日期2002-03-14
  • 最后登录2016-01-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1970回复:3

又有两个NDIS HOOK的问题。。。。

楼主#
更多 发布于:2003-03-04 12:09
当我已经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就是替换不到这个函数呢???
mikeluo
驱动老牛
驱动老牛
  • 注册日期2001-09-04
  • 最后登录2007-05-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-03-04 13:16
你自己没有调用是因为你调用的是系统的transferdata,别人调用系统的函数的时候其实是调用的你的。

那两个结构里面的是相同的函数,一样的。
学而不思则罔,思而不学则殆 学而思之,思而学之,岂非圣人乎?
gjpland
驱动小牛
驱动小牛
  • 注册日期2001-09-13
  • 最后登录2011-03-22
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-03-04 15:32
当我已经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就是替换不到这个函数呢???

1.  你HOOK的是那里的NDISTRANSFERDATA?总之调用NdisTransferData 时你传递的NdisBindingHandle是一个NDIS_OPEN_BLOCK,描述的是从那块网卡传输数据上来,在这里你肯定没有勾挂。
2.dbgprint不会影响你的程序,多半是你自己的原因。
3.关于TransferDataComplete,这个函数以前我提过,NDIS其实调用的是NDIS_MINIPORT_BLOCK里的TDComplete。

我思故我在,脑袋不会坏.
cyf_rich
驱动牛犊
驱动牛犊
  • 注册日期2002-03-14
  • 最后登录2016-01-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-03-05 17:33
[quote]当我已经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就是替换不到这个函数呢???

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]
游客

返回顶部