阅读:3462回复:6
关于混杂模式
请教:
关于混杂模式,尝试了论坛上多种办法,都未能成功: 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; } } 结果:总是蓝屏!! 一直困扰的一个问题,请多多指教,谢谢. |
|
最新喜欢:wangza... |
沙发#
发布于: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)); } } |
|
板凳#
发布于:2004-11-22 16:31
搞定!谢谢!
|
|
地板#
发布于:2005-01-27 18:59
怎么搞定的兄弟,我这里也总是有这个问题,可不可以贴出你代码来看看或则说说怎么解决这个问题的。
|
|
地下室#
发布于: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中搭车了。代码就不写了,和前面老兄的一样。 不对之处,还请多多交流 |
|
|
5楼#
发布于:2005-02-18 09:16
顶。
|
|
|
6楼#
发布于:2005-02-18 10:11
主要是释放内存问题,你自己申请的内存你自己释放,我是根据上层软件的要求设定模式的,在PtRequestComplete里释放。
|
|