swift
驱动中牛
驱动中牛
  • 注册日期2001-07-26
  • 最后登录2007-05-09
  • 粉丝0
  • 关注0
  • 积分70分
  • 威望7点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
20楼#
发布于:2002-06-20 15:29
我的想法是这样的,当有多个网卡的时候,就会有多个open_block,每个open_block里都有receive and send句柄,如有两个网卡,open_block1和open_block2,我先把它们里面的receive保存在old_receive1和old_receive2句柄中,我把两个open_block里的receive函数用一个函数myreceive来替换,这样如果机器上有多块网卡,就都会到myreceive里来,但是问题却是如果来一个数据包,myreceive被激活,我怎么判断这个数据包是从哪个open_block里来的,也就是说我怎么知道我应该调用old_receive1还是old_receive2来处理这个数据包。

因为send里有macbindinghandle,可以做一下判断,但是receive里好象只有protocolbindingcontext,这个参数能判断吗?谢谢!
gjpland
驱动小牛
驱动小牛
  • 注册日期2001-09-13
  • 最后登录2011-03-22
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
21楼#
发布于:2002-06-20 15:49
我的想法是这样的,当有多个网卡的时候,就会有多个open_block,每个open_block里都有receive and send句柄,如有两个网卡,open_block1和open_block2,我先把它们里面的receive保存在old_receive1和old_receive2句柄中,我把两个open_block里的receive函数用一个函数myreceive来替换,这样如果机器上有多块网卡,就都会到myreceive里来,但是问题却是如果来一个数据包,myreceive被激活,我怎么判断这个数据包是从哪个open_block里来的,也就是说我怎么知道我应该调用old_receive1还是old_receive2来处理这个数据包。

因为send里有macbindinghandle,可以做一下判断,但是receive里好象只有protocolbindingcontext,这个参数能判断吗?谢谢!

第一个问题,问的奇怪了。你现在的程序是怎么调用OLD_RECEIVE的?
真的要解决这个问题使用一点小技术就可以了啊。
比如
 pContext = NdisAllocateMemory(...)
 memcpy(pContext,{pop eax,push pContext,push eax,jmp hookprotocolreceive});
{pop eax,push pContext,push eax,jmp hookproc}你把这里的汇编翻译成二进制的代码填入pContext的头部
注意这里的jmp hookprotocolreceive是要根据当前地址来计算偏移量的。要有点汇编的基础。
然后pContext的后部保存你的NDIS_OPEN_BLOCK和old_protocolreceive.
最后你再把pContext 放到NDIS_OPEN_BLOCK里的protocolreceive里.

hookprotocolreceive 原型现在就变成
hookprocotoclreceive(PVOID pContext,原来的参数表.....);

第二个问题我不太清楚没试过。
我思故我在,脑袋不会坏.
swift
驱动中牛
驱动中牛
  • 注册日期2001-07-26
  • 最后登录2007-05-09
  • 粉丝0
  • 关注0
  • 积分70分
  • 威望7点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
22楼#
发布于:2002-06-20 15:56
高,真高!
可惜我不太懂汇编,所以,呵呵,
怎么把它变成二进制的代码? :)

直接把你的这段代码写上不行吗?
gjpland
驱动小牛
驱动小牛
  • 注册日期2001-09-13
  • 最后登录2011-03-22
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
23楼#
发布于:2002-06-20 16:07
高,真高!
可惜我不太懂汇编,所以,呵呵,
怎么把它变成二进制的代码? :)

直接把你的这段代码写上不行吗?


faint....
回答到这里,我才刚刚发现你的提问分是0,
没诚意,自己搞个masm然后编译一下看看就知道了。:)
我思故我在,脑袋不会坏.
swift
驱动中牛
驱动中牛
  • 注册日期2001-07-26
  • 最后登录2007-05-09
  • 粉丝0
  • 关注0
  • 积分70分
  • 威望7点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
24楼#
发布于:2002-06-20 16:12
sorry,写问题的时候我没登录,后来才发现的,呵呵
不过没关系,再开一个给你分,不过我的分可不太多,嘻嘻!
马上就开了!
上一页 下一页
游客

返回顶部