阅读:3680回复:14
在象passthru这样的NDIS中间层驱动中怎样查询MAC地址和IP地址
我使用下列代码来查询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中来处理吗。 |
|
最新喜欢:txysp
|
沙发#
发布于:2002-08-05 16:26
是不是这个问题太简单呀
各位能慷慨点吗?多谢啦 |
|
|
板凳#
发布于:2002-08-06 11:47
兄弟们,帮帮忙,告诉一下好吗?
多谢 |
|
|
地板#
发布于:2002-08-06 11:48
兄弟们,帮帮忙,告诉一下好吗?
我确实刚写Ndis驱动,时间又很紧,希望大家多多指点指点 多谢 |
|
|
地下室#
发布于:2002-08-07 17:14
NdisRequest只能用于protocol中,
采用MiniportQueryInformaion,可以在MiniportInitialize成功后使用 |
|
|
5楼#
发布于:2002-08-07 17:41
我使用下列代码来查询MAC地址,可是不知道该放在什么位置,我在MiniportInitialize但是因为MiniportInitialize运行在PASSIVE_LEVEL级,因此系统会出现页保护错的提示 没听说过因为运行在Passive_Level就会出现PageFault。 出错是因为这句 unsigned char bData[6] ; 你得为InformationBuffer分配内存,比如用ExAllocatePool,不能用局部变量。用完了记得在RequestComplete中释放。 |
|
|
6楼#
发布于:2002-08-08 10:02
多谢老兄,我先测试一下
|
|
|
7楼#
发布于:2002-08-08 10:07
我给分时怎么出现这样的提示
|
|
|
8楼#
发布于:2002-08-08 10:09
为什么不能使用局部变量呢?
|
|
|
9楼#
发布于:2002-08-08 13:16
为什么不能使用局部变量呢? 局部变量只在局部调用中有效,离开当前的函数后局部变量当然就没有了,而NdisRequest在离开当前的过程后还有可能(是肯定!)要访问InformationBuffer,当然就会出现PageFault。 我见过好多人犯类似的毛病,其实分配内存是很好的习惯,即使用局部变量Buffer也可以的情况下。 用ExAllocatePool分配内存使用的是池区域,池区域虽然同样宝贵,但好像还是可以随便用。 我曾经认为局部变量都是放在内核堆栈里的,现在也还这么理解,但很不敢肯定,假若是的话,局部变量分配就得很小心了,因为内核堆栈只有12K(据说Alpha和PowerPC上是16K),用完了会有什么问题,抱歉我也不知道。而且经常没有工夫去实验。 有懂得的朋友请顺手指点一二。 |
|
|
10楼#
发布于:2002-08-09 14:34
问题解决了,但不是象SharpShooter兄说的那样,
我在参数中传递了一个空指针,所以也就导致“页保护错误” |
|
|
11楼#
发布于:2002-08-09 15:26
问题解决了,但不是象SharpShooter兄说的那样, 如果你的查询能在本过程中返回成功的话,局部变量也是可以的,但如果查询返回Pending的话,我想用局部变量Buffer是会出错的。 如果不出错的话,麻烦告诉一声,谢谢。 |
|
|
12楼#
发布于:2002-08-13 21:09
AllenZh,
兄弟, 我也出现了和你一样的错误, 你贴出来的代码中空指针是哪一个? |
|
|
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 可能为空 |
|
|
14楼#
发布于:2012-08-16 11:32
时隔十年,膜拜中
|
|