henduojbm
驱动牛犊
驱动牛犊
  • 注册日期2005-04-30
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分90分
  • 威望9点
  • 贡献值0点
  • 好评度9点
  • 原创分0分
  • 专家分0分
阅读:4632回复:13

请教Passthru如何修改数据包、发送自定义包

楼主#
更多 发布于:2007-03-23 11:12
  以前一直做用户态下的Windows系统程序开发,发现不涉及内核驱动,就谈不上真正的系统编程。这段时间尝试着看了一下NDIS相关的东西,看得是一头雾水,在驱网的这个论坛也浏览了很多贴子,发现很多新手聚焦的两个问题就是 “如何在IMD修改数据包” 和 “如何发送自定义的数据包” ,各位大侠给出的提示也是只言片语,零零碎碎。请哪位有经验的老大不吝赐教,稍微系统地介绍一下,为各位新手指点指点迷津。叩谢叩谢!

最新喜欢:

123abc123abc
pingpanghappy
驱动牛犊
驱动牛犊
  • 注册日期2007-01-07
  • 最后登录2010-09-03
  • 粉丝0
  • 关注0
  • 积分110分
  • 威望15点
  • 贡献值0点
  • 好评度14点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-03-23 14:46
顶.我现在就是被这个问题困扰着.
dfbb1980
驱动牛犊
驱动牛犊
  • 注册日期2006-07-05
  • 最后登录2007-07-30
  • 粉丝0
  • 关注0
  • 积分820分
  • 威望83点
  • 贡献值0点
  • 好评度82点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-03-24 13:05
DDK例子里有源代码的,看一下就清楚了
henduojbm
驱动牛犊
驱动牛犊
  • 注册日期2005-04-30
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分90分
  • 威望9点
  • 贡献值0点
  • 好评度9点
  • 原创分0分
  • 专家分0分
地板#
发布于:2007-03-26 13:31
恳请楼上的指点,是哪个例子啊?
dfbb1980
驱动牛犊
驱动牛犊
  • 注册日期2006-07-05
  • 最后登录2007-07-30
  • 粉丝0
  • 关注0
  • 积分820分
  • 威望83点
  • 贡献值0点
  • 好评度82点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2007-03-27 12:12
passthru
pingpanghappy
驱动牛犊
驱动牛犊
  • 注册日期2007-01-07
  • 最后登录2010-09-03
  • 粉丝0
  • 关注0
  • 积分110分
  • 威望15点
  • 贡献值0点
  • 好评度14点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2007-03-28 18:46
如何把UCHAR buf[100]中的内容弄到NDIS_BUFFER中?
smallbear111
驱动牛犊
驱动牛犊
  • 注册日期2007-01-06
  • 最后登录2009-04-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望16点
  • 贡献值0点
  • 好评度11点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2007-03-31 13:20
NidsAllocateBuffer函数可以实现
驱网无线,快乐无限
smallbear111
驱动牛犊
驱动牛犊
  • 注册日期2007-01-06
  • 最后登录2009-04-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望16点
  • 贡献值0点
  • 好评度11点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2007-03-31 13:20
最好把passthru例子通读一下
理解每个函数的意义所在
驱网无线,快乐无限
pingpanghappy
驱动牛犊
驱动牛犊
  • 注册日期2007-01-07
  • 最后登录2010-09-03
  • 粉丝0
  • 关注0
  • 积分110分
  • 威望15点
  • 贡献值0点
  • 好评度14点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2007-04-02 15:23
用NdisAllocateBuffer之前必须调用NdisAllocateBufferPool(),但在PtDispatch()相应CASE语包中调用NdisAllocateBufferPool()会导致系统蓝屏.
cyliu
论坛版主
论坛版主
  • 注册日期2003-06-13
  • 最后登录2014-04-11
  • 粉丝5
  • 关注0
  • 积分1238分
  • 威望2531点
  • 贡献值0点
  • 好评度577点
  • 原创分14分
  • 专家分10分
9楼#
发布于:2007-04-03 08:42
NdisAllocateBufferPool可以在driver入口初始化
走走看看开源好 Solaris vs Linux
pingpanghappy
驱动牛犊
驱动牛犊
  • 注册日期2007-01-07
  • 最后登录2010-09-03
  • 粉丝0
  • 关注0
  • 积分110分
  • 威望15点
  • 贡献值0点
  • 好评度14点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2007-04-03 11:35
呵呵,谢谢!
pingpanghappy
驱动牛犊
驱动牛犊
  • 注册日期2007-01-07
  • 最后登录2010-09-03
  • 粉丝0
  • 关注0
  • 积分110分
  • 威望15点
  • 贡献值0点
  • 好评度14点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2007-04-03 16:11
我根据<<网络驱动程序设计>>介绍的方法
调用以下NDIS函数分配上面所要求的缓冲区:
1. 用NdisAllocateBufferPool 获取用于分配缓冲区描述符的句柄;
2. 用NdisAllocateMemory或NdisAllocateMemoryWithTag分配缓冲区;
3. 用NdisAllocateBuffer 分配和设置缓冲区描述符, 映射由
NdisAllocateMemory(WithTag)分配的缓冲区,并链接到NdisAllocatePacket分配的包
描述符上。

但当调用NdisSend()函数时,机子蓝屏,出错码Stop: 0x000000D1(....)   NDIS.SYS

我感觉是NDIS_PACKET结构填充有问题. 知道的请提示下.
henduojbm
驱动牛犊
驱动牛犊
  • 注册日期2005-04-30
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分90分
  • 威望9点
  • 贡献值0点
  • 好评度9点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2007-04-06 09:18
我现在已经做到能够封装(修改)发送的数据包了,比如,从192。168。7。146中,发往192。168。7。148的所有TCP数据包中添加“1234567890”,然后,在192。168。7。148的接收处理例程(PtReceivePacket)中接收到后,能够解出“1234567890”。

但是,在PtReceivePacket中重新组织原始包并调用“NdisMIndicateReceivePacket”往上传时,好象就有问题了,请哪位大牛指点一下。等到整个过程都走通了,我就把代码贴出来。新手学NDIS真的好艰难啊。

尤其是想请教:在NDIS中,Send和Recieve的相关例程的调用顺序、过程,以及各例程的作用。
叩谢各位大老不吝赐教!
killerzhu
驱动牛犊
驱动牛犊
  • 注册日期2007-05-01
  • 最后登录2007-09-28
  • 粉丝0
  • 关注0
  • 积分50分
  • 威望6点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2007-05-07 13:38
在passthru中miniport的MPSendPackets函数中可以捕获所有要发送的分组,对其中的MyPacket进行操作就可以了
游客

返回顶部