wangruijerry
驱动牛犊
驱动牛犊
  • 注册日期2002-08-03
  • 最后登录2002-12-16
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2426回复:6

如何查询mtu?

楼主#
更多 发布于:2002-08-03 16:11
我想查询一下mtu.
在passthru的mpqueryinformation中,
pAdapt->Request.RequestType = NdisRequestQueryInformation;
pAdapt->Request.DATA.QUERY_INFORMATION.Oid = Oid;
pAdapt->Request.DATA.QUERY_INFORMATION.InformationBuffer = InformationBuffer;
pAdapt->Request.DATA.QUERY_INFORMATION.InformationBufferLength
= InformationBufferLength;
pAdapt->BytesNeeded = BytesNeeded;
pAdapt->BytesReadOrWritten = BytesWritten;
pAdapt->OutstandingRequests = TRUE;

后加了下列代码:
if (Oid  == OID_GEN_MAXIMUM_FRAME_SIZE)
   DbgPrint(\"MTU=%d\\n\",*(ULONG *)InformationBuffer);

结果打印出来的是 mtu=-146572696

并不是1500,

不知道是怎么回时,哪里错了?
AllenZh
驱动老牛
驱动老牛
  • 注册日期2001-08-19
  • 最后登录2015-11-27
  • 粉丝19
  • 关注10
  • 积分1316分
  • 威望2387点
  • 贡献值7点
  • 好评度321点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-08-04 14:51
ntddndis.h中有这样的定义
#define OID_GEN_MAXIMUM_FRAME_SIZE              0x00010106

也就是说MTU最大可到64K多,这同RFC规范定义相吻合的
至于你Debug出来的信息不正确是不是你的程序中不是这样的
比如是
if (Oid == OID_GEN_MAXIMUM_FRAME_SIZE)
   DbgPrint(\"MTU=%d\\n\",(ULONG *)InformationBuffer);

1,承接Windows下驱动/应用开发 2,本人原创虚拟鼠标/键盘,触摸屏,虚拟显卡,Mirror驱动,XP无盘的SCSI虚拟磁盘驱动等 3,windows下有尝技术服务(包括BUG调试,员工培训等) 欢迎深圳和海外企业联系.msn:mfczmh@sina.com
wangruijerry
驱动牛犊
驱动牛犊
  • 注册日期2002-08-03
  • 最后登录2002-12-16
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-08-04 16:19
ntddndis.h中有这样的定义
#define OID_GEN_MAXIMUM_FRAME_SIZE              0x00010106

也就是说MTU最大可到64K多,这同RFC规范定义相吻合的
至于你Debug出来的信息不正确是不是你的程序中不是这样的
比如是
if (Oid == OID_GEN_MAXIMUM_FRAME_SIZE)
   DbgPrint(\"MTU=%d\\n\",(ULONG *)InformationBuffer);

 

#define OID_GEN_MAXIMUM_FRAME_SIZE              0x00010106
定义的是查询mtu的oid号,与值的大小无关。
所以,不是着的问题。
SharpShooter
驱动小牛
驱动小牛
  • 注册日期2002-04-07
  • 最后登录2013-07-05
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望40点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-08-05 09:57
我想查询一下mtu.
在passthru的mpqueryinformation中,
pAdapt->Request.RequestType = NdisRequestQueryInformation;
pAdapt->Request.DATA.QUERY_INFORMATION.Oid = Oid;
pAdapt->Request.DATA.QUERY_INFORMATION.InformationBuffer = InformationBuffer;
pAdapt->Request.DATA.QUERY_INFORMATION.InformationBufferLength
= InformationBufferLength;
pAdapt->BytesNeeded = BytesNeeded;
pAdapt->BytesReadOrWritten = BytesWritten;
pAdapt->OutstandingRequests = TRUE;

后加了下列代码:
if (Oid  == OID_GEN_MAXIMUM_FRAME_SIZE)
   DbgPrint(\"MTU=%d\\n\",*(ULONG *)InformationBuffer);

结果打印出来的是 mtu=-146572696

并不是1500,

不知道是怎么回时,哪里错了?
 


老大,你的代码没有问题,只是位置不对,应该把你的if/DbgPrint放在NdisRequest之后,等它查到了之后你才能知道阿!
写驱动不如买足彩!!
wangruijerry
驱动牛犊
驱动牛犊
  • 注册日期2002-08-03
  • 最后登录2002-12-16
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-08-05 10:19
[quote]我想查询一下mtu.
在passthru的mpqueryinformation中,
pAdapt->Request.RequestType = NdisRequestQueryInformation;
pAdapt->Request.DATA.QUERY_INFORMATION.Oid = Oid;
pAdapt->Request.DATA.QUERY_INFORMATION.InformationBuffer = InformationBuffer;
pAdapt->Request.DATA.QUERY_INFORMATION.InformationBufferLength
= InformationBufferLength;
pAdapt->BytesNeeded = BytesNeeded;
pAdapt->BytesReadOrWritten = BytesWritten;
pAdapt->OutstandingRequests = TRUE;

后加了下列代码:
if (Oid  == OID_GEN_MAXIMUM_FRAME_SIZE)
   DbgPrint(\"MTU=%d\\n\",*(ULONG *)InformationBuffer);

结果打印出来的是 mtu=-146572696

并不是1500,

不知道是怎么回时,哪里错了?
 


老大,你的代码没有问题,只是位置不对,应该把你的if/DbgPrint放在NdisRequest之后,等它查到了之后你才能知道阿! [/quote]

其实,在nidsrequest之前,之后我都加了。
结果都是这样,都不对的。
????
fenger_li
驱动老牛
驱动老牛
  • 注册日期2002-03-26
  • 最后登录2005-04-10
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-08-05 11:11
那查了status了么?
pending时,到ptrequestcomplete查!

呵呵!
有点意思。。。 呵呵!
SharpShooter
驱动小牛
驱动小牛
  • 注册日期2002-04-07
  • 最后登录2013-07-05
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望40点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2002-08-05 14:41
fenger_li老兄说的完全正确!~
写驱动不如买足彩!!
游客

返回顶部