3851|10

86

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

请教一个NDIS简单问题 [复制链接]

看了DDK提供的NDIS例子,有个疑问:
驱动导出了MPSendPackets函数(发送封包函数),而且绑定了2个设备,比方说是设备A和设备B,那么会

不会出现这样的情况:
设备A和设备B同时调用MPSendPackets函数?如果是的话,那么,在MPSendPackets函数里面访问的全局变

量就应该同步啊~
不知道有没有把问题表述清楚了,就是在MPSendPackets函数里面的全局变量需要同步吗?       
谢谢

最新回复

??  详情 回复 发表于 2008-5-12 12:09
点赞 关注

回复
举报

78

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
会,是,需要。
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
如果需要的话,我定义一个全局的事件去同步,这样写会有问题吗?
MpSendPacket函数体:
NdisWaitEvent
NdisResetEvent
.........
NdisSetEvent

当设备A执行到NdisWaitEvent的时候,还没有来得及执行NdisResetEvent,B设备就执行NdisWaitEvent,这样的话,同步不就失败了吗?
请问我的分析有错吗?
 
 
 

回复

82

帖子

0

TA的资源

一粒金砂(初级)

4
 
如果用事件要初始化为自动复位类型。不过这种情况通常用互斥对象而不用事件。
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(中级)

5
 
??
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

6
 
怎么3楼的回答不见了呢?
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

7
 
引用 3 楼 cnzdgs 的回复:
如果用事件要初始化为自动复位类型。不过这种情况通常用互斥对象而不用事件。


如果打开帖子没法看到所有回复,可以先关掉,点击帖子后面的“管理”来打开。
 
 
 

回复

54

帖子

0

TA的资源

一粒金砂(初级)

8
 
谢谢cnzdgs
另外,我发现一个很奇怪的问题:
NDIS中的ProtocolReceive函数
NDIS_STATUS
  ProtocolReceive(
    IN NDIS_HANDLE  ProtocolBindingContext,
    IN NDIS_HANDLE  MacReceiveContext,
    IN PVOID  HeaderBuffer,
    IN UINT  HeaderBufferSize,
    IN PVOID  LookAheadBuffer,
    IN UINT  LookaheadBufferSize,
    IN UINT  PacketSize
    );
其中HeaderBuffer参数为头缓冲区数据大小,LookaheadBufferSize为前视缓冲区数据大小,但是我调试发现,NDIS调用这个函数的时候,
HeaderBuffer = 2183631056,LookaheadBufferSize = 2183631070,PacketSize = 348
这个是很明显的错误吗?是系统调用出错还是什么原因导致出错呢?
另外,HeaderBuffer的值应该是14,就是一个以太头数据包的大小,而我观察到:LookaheadBufferSize - HeaderBuffer  = 14,
不知道是不是巧合。
谢谢!
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

9
 
建议你用16进制方式来查看数据。
HeaderBuffer和LookAheadBuffer这两个参数是指针,内核地址空间的指针都是大于0x80000000的。LookaheadBufferSize应该是你看错了。
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

10
 
谢谢cnzdgs,问题解决了,请教下最后一个问题:
PChars.ReceiveHandler = PtReceive;和PChars.ReceivePacketHandler = PtReceivePacket;
书上说ReceivePacketHandler 是可以接收多个封包的,他的意思是不是说:ReceiveHandler 函数每次被调用的时候只是接收到一个以太包?而ReceivePacketHandler 函数被被调用的时候表示接收到了1个或多个以太包?
 
 
 

回复

84

帖子

0

TA的资源

一粒金砂(初级)

11
 
??
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表