frog_huang
驱动牛犊
驱动牛犊
  • 注册日期2002-06-05
  • 最后登录2008-05-02
  • 粉丝0
  • 关注0
  • 积分18分
  • 威望3点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
阅读:3462回复:6

关于混杂模式

楼主#
更多 发布于:2004-11-18 20:11
请教:
关于混杂模式,尝试了论坛上多种办法,都未能成功:
OidData = NDIS_PACKET_TYPE_PROMISCUOUS;
//设置为混杂模式
pRequest = ExAllocatePool(NonPagedPool,sizeof(NDIS_REQUEST));//分配内存
if(NULL == pRequest)
{
DbgPrint("Can not ExAllocatePool buffer for request");
}
pRequest->RequestType=NdisRequestSetInformation;//设置请求命令
pRequest->DATA.SET_INFORMATION.Oid = OID_GEN_CURRENT_PACKET_FILTER;
pRequest->DATA.SET_INFORMATION.InformationBuffer = &OidData;
pRequest->DATA.SET_INFORMATION.InformationBufferLength = sizeof(NDIS_OID);

NdisRequest(&Sts,pAdapt->BindingHandle,pRequest);//发送请求
if(Sts != NDIS_STATUS_PENDING)
{
if(pRequest)
{
ExFreePool(pRequest);
pRequest = NULL;
}
}

结果:总是蓝屏!!
一直困扰的一个问题,请多多指教,谢谢.

最新喜欢:

wangzaiwangza...
gqtang
驱动牛犊
驱动牛犊
  • 注册日期2001-08-28
  • 最后登录2012-02-25
  • 粉丝0
  • 关注0
  • 积分14分
  • 威望77点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-11-22 11:28
if (pAdapt->Medium == g_MediumArray[0]){

if (OID_GEN_CURRENT_PACKET_FILTER == Oid){

memcpy(&aMode,InformationBuffer,sizeof(ULONG));

aMode |= NDIS_PACKET_TYPE_PROMISCUOUS;

memcpy(InformationBuffer,&aMode,sizeof(ULONG));
}

}
frog_huang
驱动牛犊
驱动牛犊
  • 注册日期2002-06-05
  • 最后登录2008-05-02
  • 粉丝0
  • 关注0
  • 积分18分
  • 威望3点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-11-22 16:31
搞定!谢谢!
bssoft
驱动牛犊
驱动牛犊
  • 注册日期2003-10-26
  • 最后登录2011-04-12
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望30点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2005-01-27 18:59
怎么搞定的兄弟,我这里也总是有这个问题,可不可以贴出你代码来看看或则说说怎么解决这个问题的。
jasonxia74
驱动牛犊
驱动牛犊
  • 注册日期2004-10-29
  • 最后登录2005-06-29
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2005-02-17 17:48
最近也碰到这个问题,论坛里找了半天,没有搞明白,最后终于知道问题出在哪里了,回头看看论坛里的帖子,才发现原来大家说得是同一件事,不过对于我这样的新手,可能真的一下看不懂高手的帖子,为了后来人,决定也说说我的经验,与大家共同探讨:

(前提是在passthru中修修改改)

多数问题是因为希望在PtBindAdapter()中实现混杂模式,但是这里有一些问题需要考虑:
1。通常出问题是因为NdisRequest返回谓PENDING状态,这样就会调到PtRequestComplete,进一步调用NdisMSetInformationComplete,其参数pAdapt->MiniportHandle此时并不能保证已经正确初始化(这依赖于MPInitialize是否完成了设置)如果没有,通常pAdapt->MiniportHandle为NULL,系统crash也正常

2。DATA.SET_INFORMATION.InformationBuffer,
   pAdapt->BytesReadOrWritten,
   pAdapt->BytesNeeded,
   这几个指针不能非法(指向堆栈中变量显然不太好吧!)

3。对于没有上层protocol驱动的请求,如何处理需要仔细一些(如申请了内存,何时free等问题)

我最后还是放在MPSetInformation中搭车了。代码就不写了,和前面老兄的一样。

不对之处,还请多多交流
我本将心向明月 奈何明月照沟渠
paladinii
驱动中牛
驱动中牛
  • 注册日期2003-10-28
  • 最后登录2012-03-09
  • 粉丝0
  • 关注0
  • 积分282分
  • 威望74点
  • 贡献值0点
  • 好评度23点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2005-02-18 09:16
顶。
Ideas for life!
frog_huang
驱动牛犊
驱动牛犊
  • 注册日期2002-06-05
  • 最后登录2008-05-02
  • 粉丝0
  • 关注0
  • 积分18分
  • 威望3点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2005-02-18 10:11
主要是释放内存问题,你自己申请的内存你自己释放,我是根据上层软件的要求设定模式的,在PtRequestComplete里释放。
游客

返回顶部