AllenZh
驱动老牛
驱动老牛
  • 注册日期2001-08-19
  • 最后登录2015-11-27
  • 粉丝19
  • 关注10
  • 积分1316分
  • 威望2387点
  • 贡献值7点
  • 好评度321点
  • 原创分0分
  • 专家分0分
阅读:3680回复:14

在象passthru这样的NDIS中间层驱动中怎样查询MAC地址和IP地址

楼主#
更多 发布于:2002-08-05 11:46
我使用下列代码来查询MAC地址,可是不知道该放在什么位置,我在MiniportInitialize但是因为MiniportInitialize运行在PASSIVE_LEVEL级,因此系统会出现页保护错的提示
{
NDIS_STATUS    Status = NDIS_STATUS_FAILURE;
unsigned char  bData[6] ;
pAdapt->Request.RequestType = NdisRequestQueryInformation ;
pAdapt->Request.DATA.QUERY_INFORMATION.Oid = OID_802_3_CURRENT_ADDRESS ;
DebugPrint((\"OID_802_3_CURRENT_ADDRESS\\n\")) ;
pAdapt->Request.DATA.QUERY_INFORMATION.InformationBuffer = (PVOID)bData ;
pAdapt->Request.DATA.QUERY_INFORMATION. InformationBufferLength = 6 ;
NdisRequest(&Status, pAdapt->BindingHandle, &pAdapt->Request);
}

请问各位我这样处理可以吗?
应该将代码放在什么地方,还有对于在passthru中的到绑定网卡的IP怎么实现,需要在Ring3中来处理吗。

最新喜欢:

txysptxysp
1,承接Windows下驱动/应用开发 2,本人原创虚拟鼠标/键盘,触摸屏,虚拟显卡,Mirror驱动,XP无盘的SCSI虚拟磁盘驱动等 3,windows下有尝技术服务(包括BUG调试,员工培训等) 欢迎深圳和海外企业联系.msn:mfczmh@sina.com
AllenZh
驱动老牛
驱动老牛
  • 注册日期2001-08-19
  • 最后登录2015-11-27
  • 粉丝19
  • 关注10
  • 积分1316分
  • 威望2387点
  • 贡献值7点
  • 好评度321点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-08-05 16:26
是不是这个问题太简单呀
各位能慷慨点吗?多谢啦
1,承接Windows下驱动/应用开发 2,本人原创虚拟鼠标/键盘,触摸屏,虚拟显卡,Mirror驱动,XP无盘的SCSI虚拟磁盘驱动等 3,windows下有尝技术服务(包括BUG调试,员工培训等) 欢迎深圳和海外企业联系.msn:mfczmh@sina.com
AllenZh
驱动老牛
驱动老牛
  • 注册日期2001-08-19
  • 最后登录2015-11-27
  • 粉丝19
  • 关注10
  • 积分1316分
  • 威望2387点
  • 贡献值7点
  • 好评度321点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-08-06 11:47
兄弟们,帮帮忙,告诉一下好吗?
多谢
1,承接Windows下驱动/应用开发 2,本人原创虚拟鼠标/键盘,触摸屏,虚拟显卡,Mirror驱动,XP无盘的SCSI虚拟磁盘驱动等 3,windows下有尝技术服务(包括BUG调试,员工培训等) 欢迎深圳和海外企业联系.msn:mfczmh@sina.com
AllenZh
驱动老牛
驱动老牛
  • 注册日期2001-08-19
  • 最后登录2015-11-27
  • 粉丝19
  • 关注10
  • 积分1316分
  • 威望2387点
  • 贡献值7点
  • 好评度321点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-08-06 11:48
兄弟们,帮帮忙,告诉一下好吗?
我确实刚写Ndis驱动,时间又很紧,希望大家多多指点指点
多谢
1,承接Windows下驱动/应用开发 2,本人原创虚拟鼠标/键盘,触摸屏,虚拟显卡,Mirror驱动,XP无盘的SCSI虚拟磁盘驱动等 3,windows下有尝技术服务(包括BUG调试,员工培训等) 欢迎深圳和海外企业联系.msn:mfczmh@sina.com
mailporn
驱动牛犊
驱动牛犊
  • 注册日期2002-03-12
  • 最后登录2008-10-29
  • 粉丝0
  • 关注0
  • 积分6分
  • 威望20点
  • 贡献值0点
  • 好评度16点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-08-07 17:14
NdisRequest只能用于protocol中,

采用MiniportQueryInformaion,可以在MiniportInitialize成功后使用
海人
SharpShooter
驱动小牛
驱动小牛
  • 注册日期2002-04-07
  • 最后登录2013-07-05
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望40点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-08-07 17:41
 
我使用下列代码来查询MAC地址,可是不知道该放在什么位置,我在MiniportInitialize但是因为MiniportInitialize运行在PASSIVE_LEVEL级,因此系统会出现页保护错的提示


没听说过因为运行在Passive_Level就会出现PageFault。
出错是因为这句
 
unsigned char bData[6] ;
 

你得为InformationBuffer分配内存,比如用ExAllocatePool,不能用局部变量。用完了记得在RequestComplete中释放。
写驱动不如买足彩!!
AllenZh
驱动老牛
驱动老牛
  • 注册日期2001-08-19
  • 最后登录2015-11-27
  • 粉丝19
  • 关注10
  • 积分1316分
  • 威望2387点
  • 贡献值7点
  • 好评度321点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2002-08-08 10:02
多谢老兄,我先测试一下
1,承接Windows下驱动/应用开发 2,本人原创虚拟鼠标/键盘,触摸屏,虚拟显卡,Mirror驱动,XP无盘的SCSI虚拟磁盘驱动等 3,windows下有尝技术服务(包括BUG调试,员工培训等) 欢迎深圳和海外企业联系.msn:mfczmh@sina.com
AllenZh
驱动老牛
驱动老牛
  • 注册日期2001-08-19
  • 最后登录2015-11-27
  • 粉丝19
  • 关注10
  • 积分1316分
  • 威望2387点
  • 贡献值7点
  • 好评度321点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2002-08-08 10:07
我给分时怎么出现这样的提示
 
1,承接Windows下驱动/应用开发 2,本人原创虚拟鼠标/键盘,触摸屏,虚拟显卡,Mirror驱动,XP无盘的SCSI虚拟磁盘驱动等 3,windows下有尝技术服务(包括BUG调试,员工培训等) 欢迎深圳和海外企业联系.msn:mfczmh@sina.com
mailporn
驱动牛犊
驱动牛犊
  • 注册日期2002-03-12
  • 最后登录2008-10-29
  • 粉丝0
  • 关注0
  • 积分6分
  • 威望20点
  • 贡献值0点
  • 好评度16点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2002-08-08 10:09
为什么不能使用局部变量呢?
海人
SharpShooter
驱动小牛
驱动小牛
  • 注册日期2002-04-07
  • 最后登录2013-07-05
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望40点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2002-08-08 13:16
为什么不能使用局部变量呢?


局部变量只在局部调用中有效,离开当前的函数后局部变量当然就没有了,而NdisRequest在离开当前的过程后还有可能(是肯定!)要访问InformationBuffer,当然就会出现PageFault。

我见过好多人犯类似的毛病,其实分配内存是很好的习惯,即使用局部变量Buffer也可以的情况下。

用ExAllocatePool分配内存使用的是池区域,池区域虽然同样宝贵,但好像还是可以随便用。

我曾经认为局部变量都是放在内核堆栈里的,现在也还这么理解,但很不敢肯定,假若是的话,局部变量分配就得很小心了,因为内核堆栈只有12K(据说Alpha和PowerPC上是16K),用完了会有什么问题,抱歉我也不知道。而且经常没有工夫去实验。

有懂得的朋友请顺手指点一二。

写驱动不如买足彩!!
AllenZh
驱动老牛
驱动老牛
  • 注册日期2001-08-19
  • 最后登录2015-11-27
  • 粉丝19
  • 关注10
  • 积分1316分
  • 威望2387点
  • 贡献值7点
  • 好评度321点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2002-08-09 14:34
问题解决了,但不是象SharpShooter兄说的那样,
我在参数中传递了一个空指针,所以也就导致“页保护错误”
1,承接Windows下驱动/应用开发 2,本人原创虚拟鼠标/键盘,触摸屏,虚拟显卡,Mirror驱动,XP无盘的SCSI虚拟磁盘驱动等 3,windows下有尝技术服务(包括BUG调试,员工培训等) 欢迎深圳和海外企业联系.msn:mfczmh@sina.com
SharpShooter
驱动小牛
驱动小牛
  • 注册日期2002-04-07
  • 最后登录2013-07-05
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望40点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2002-08-09 15:26
问题解决了,但不是象SharpShooter兄说的那样,
我在参数中传递了一个空指针,所以也就导致“页保护错误”


如果你的查询能在本过程中返回成功的话,局部变量也是可以的,但如果查询返回Pending的话,我想用局部变量Buffer是会出错的。

如果不出错的话,麻烦告诉一声,谢谢。
写驱动不如买足彩!!
flyndis
驱动牛犊
驱动牛犊
  • 注册日期2001-12-20
  • 最后登录2002-08-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2002-08-13 21:09
AllenZh,
兄弟,
我也出现了和你一样的错误,
你贴出来的代码中空指针是哪一个?

用激情去创造,用热情去灌溉!
AllenZh
驱动老牛
驱动老牛
  • 注册日期2001-08-19
  • 最后登录2015-11-27
  • 粉丝19
  • 关注10
  • 积分1316分
  • 威望2387点
  • 贡献值7点
  • 好评度321点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2002-08-14 11:32
在PtRequestComplete中有如下代码
*pAdapt->BytesReadOrWritten = NdisRequest->DATA.QUERY_INFORMATION.BytesWritten;
*pAdapt->BytesNeeded = NdisRequest->DATA.QUERY_INFORMATION.BytesNeeded;
但是在你调用时pAdapt->BytesReadOrWritten、pAdapt->BytesNeeded 可能为空
1,承接Windows下驱动/应用开发 2,本人原创虚拟鼠标/键盘,触摸屏,虚拟显卡,Mirror驱动,XP无盘的SCSI虚拟磁盘驱动等 3,windows下有尝技术服务(包括BUG调试,员工培训等) 欢迎深圳和海外企业联系.msn:mfczmh@sina.com
qaz362008
驱动牛犊
驱动牛犊
  • 注册日期2012-06-11
  • 最后登录2012-09-10
  • 粉丝0
  • 关注1
  • 积分25分
  • 威望181点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2012-08-16 11:32
时隔十年,膜拜中
游客

返回顶部