EvilRyu
驱动牛犊
驱动牛犊
  • 注册日期2004-07-13
  • 最后登录2005-08-16
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1943回复:9

新手急问:如何使用内存中数据构造一个NDIS_PACKET?(15分)

楼主#
更多 发布于:2004-09-07 10:31
小弟做一个邮件过滤驱动,将邮件数据拦截下来写入临时文件后进行病毒扫描,然后需要将该文件读出重新组包再发给应用程序。现在不知该如何将一块内存中的数据构造成一个NDIS_PACKET,请大虾指教!一并请教还有哪些注意事项,谢谢!

[编辑 -  9/7/04 by  EvilRyu]
sword3i
驱动牛犊
驱动牛犊
  • 注册日期2003-07-25
  • 最后登录2013-01-07
  • 粉丝0
  • 关注0
  • 积分15分
  • 威望112点
  • 贡献值0点
  • 好评度9点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-09-20 16:22
呵呵,我也是刚刚接触NDIS不久,菜鸟一个,至于构包的细节你可以研究论坛上前辈高人的代码

zxcasd说的pending问题,我没有做过特别大的数据包的测试,不过我可以说说:自己正在写的一个网卡数据嗅探过滤器的实现

我在驱动加载后,生成共享内存与应用层进行通讯,然后通过驱动和应用层共同维护的循环队列来管理这段共享内存(在驱动层过滤数据包后push至队列,应用层pop数据包),在应用层单独有个线程负责得到驱动改队列的数据(我是通过内核与应用层共享的信号量来通知合适读取数据),基于上面的实现,我基本可以完全能实时监控网络数据

当然,我的这个实现只是针对单个的网络包进行分析,不知如果是大邮件的话,是否需要把邮件所有的网络数据包在ndis中并截获分析?如果真需要的话,那我认为可能会是应用层产生pending, 呵呵,不知zxcasd有没有什么更好的办法解决

[编辑 -  9/20/04 by  sword3i]

[编辑 -  9/20/04 by  sword3i]
随风奔跑自由是方向 追逐雷和闪电的力量 把浩瀚的海洋装进我胸膛 即使再小的帆也能远航 随风飞翔有梦作翅膀 敢爱敢做勇敢闯一闯 哪怕遇见再大的风险再大的浪 也会有默契的目光 努力蹭分! ..................
EvilRyu
驱动牛犊
驱动牛犊
  • 注册日期2004-07-13
  • 最后登录2005-08-16
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-09-20 11:30
呵呵 小弟正在思考着跟问题,zxcasd兄能给个建议吗?还有构包方面的问题 如果不介意 能留个qq吗?小弟的8331654 呵呵
zxcasd
驱动牛犊
驱动牛犊
  • 注册日期2001-06-14
  • 最后登录2007-08-09
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-09-20 11:13
sword3i大虾真不好意思 我的帖子发完好几天没人回 还以为没人理我 今天才看到你的回答 你说的过程能够更加详细一点吗?还有zxcasd大虾的意思可能是上层的应用程序如果不挂起的话,如果邮件过大,可能导致会话超时而使应用程序中断会话 是这个意思吗?

ps:分现在就给两位 呵呵


是这个意思啊。。。呵呵,你不会是做阻塞的吧。。。

[编辑 -  9/20/04 by  zxcasd]
死了都要爱......
EvilRyu
驱动牛犊
驱动牛犊
  • 注册日期2004-07-13
  • 最后登录2005-08-16
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-09-20 10:25
sword3i大虾真不好意思 我的帖子发完好几天没人回 还以为没人理我 今天才看到你的回答 你说的过程能够更加详细一点吗?还有zxcasd大虾的意思可能是上层的应用程序如果不挂起的话,如果邮件过大,可能导致会话超时而使应用程序中断会话 是这个意思吗?

ps:分现在就给两位 呵呵
sword3i
驱动牛犊
驱动牛犊
  • 注册日期2003-07-25
  • 最后登录2013-01-07
  • 粉丝0
  • 关注0
  • 积分15分
  • 威望112点
  • 贡献值0点
  • 好评度9点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-09-10 09:29
你为什么要让你的应用层线程挂起呢?  不太明白你的意思,呵呵
随风奔跑自由是方向 追逐雷和闪电的力量 把浩瀚的海洋装进我胸膛 即使再小的帆也能远航 随风飞翔有梦作翅膀 敢爱敢做勇敢闯一闯 哪怕遇见再大的风险再大的浪 也会有默契的目光 努力蹭分! ..................
zxcasd
驱动牛犊
驱动牛犊
  • 注册日期2001-06-14
  • 最后登录2007-08-09
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2004-09-09 19:55
[quote][quote]小弟做一个邮件过滤驱动,将邮件数据拦截下来写入临时文件后进行病毒扫描,然后需要将该文件读出重新组包再发给应用程序。现在不知该如何将一块内存中的数据构造成一个NDIS_PACKET,请大虾指教!一并请教还有哪些注意事项,谢谢!

[编辑 -  9/7/04 by  EvilRyu]


先抛开构造NDIS_PACKET的问题,你有想过这个邮件过滤驱动如何实现pending上面的应用程序吗? [/quote]

你说的pending是只ndispacket的pending状态吗?,如果是他完全可以在receivecomplete和returnpackets里进行处理 [/quote]

不是,我说的pending是指让上面的应用程序处于一种挂起的状态,并不是对ndispacket的状态而言。
死了都要爱......
sword3i
驱动牛犊
驱动牛犊
  • 注册日期2003-07-25
  • 最后登录2013-01-07
  • 粉丝0
  • 关注0
  • 积分15分
  • 威望112点
  • 贡献值0点
  • 好评度9点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2004-09-09 17:45
[quote]小弟做一个邮件过滤驱动,将邮件数据拦截下来写入临时文件后进行病毒扫描,然后需要将该文件读出重新组包再发给应用程序。现在不知该如何将一块内存中的数据构造成一个NDIS_PACKET,请大虾指教!一并请教还有哪些注意事项,谢谢!

[编辑 -  9/7/04 by  EvilRyu]


先抛开构造NDIS_PACKET的问题,你有想过这个邮件过滤驱动如何实现pending上面的应用程序吗? [/quote]

你说的pending是只ndispacket的pending状态吗?,如果是他完全可以在receivecomplete和returnpackets里进行处理
随风奔跑自由是方向 追逐雷和闪电的力量 把浩瀚的海洋装进我胸膛 即使再小的帆也能远航 随风飞翔有梦作翅膀 敢爱敢做勇敢闯一闯 哪怕遇见再大的风险再大的浪 也会有默契的目光 努力蹭分! ..................
zxcasd
驱动牛犊
驱动牛犊
  • 注册日期2001-06-14
  • 最后登录2007-08-09
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2004-09-09 17:34
小弟做一个邮件过滤驱动,将邮件数据拦截下来写入临时文件后进行病毒扫描,然后需要将该文件读出重新组包再发给应用程序。现在不知该如何将一块内存中的数据构造成一个NDIS_PACKET,请大虾指教!一并请教还有哪些注意事项,谢谢!

[编辑 -  9/7/04 by  EvilRyu]


先抛开构造NDIS_PACKET的问题,你有想过这个邮件过滤驱动如何实现pending上面的应用程序吗?
死了都要爱......
sword3i
驱动牛犊
驱动牛犊
  • 注册日期2003-07-25
  • 最后登录2013-01-07
  • 粉丝0
  • 关注0
  • 积分15分
  • 威望112点
  • 贡献值0点
  • 好评度9点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2004-09-09 17:12
首先你需要分配一个packetpool-NdisDprAllocatePacket,然后调用NdisAllocatePacket或NdisDprAllocatePacket就可以了,注意已经分配包描述符与缓冲描述符关联,这你可以看看论坛上的前辈高人的代码

呵呵,赶快给分
随风奔跑自由是方向 追逐雷和闪电的力量 把浩瀚的海洋装进我胸膛 即使再小的帆也能远航 随风飞翔有梦作翅膀 敢爱敢做勇敢闯一闯 哪怕遇见再大的风险再大的浪 也会有默契的目光 努力蹭分! ..................
游客

返回顶部