anti
驱动牛犊
驱动牛犊
  • 注册日期2001-04-26
  • 最后登录2008-05-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1846回复:2

很菜!但请帮我!

楼主#
更多 发布于:2002-04-14 12:48
各位:
我本想在passthru的ptBindAdapte中用NdisRequest将NIC 置为 混杂 模式,按DDK ptBindAdapte run in passive_level ,且NdisRequest run in <= dispatch_level,此调用应能成功!
但是,每次调用 NdisRequest 都会导致 blue screen:IRQL_NOT_LESS_OR_EQUAL!
我初次做dnis,望各位指教!
passthru 的ptBindAdapt 中添加的源码如下:
/////////////////////////////

pAdapt->p_request=NULL;
pAdapt->p_information=NULL;
do
{
if(NdisAllocateMemoryWithTag(&pAdapt->p_request, sizeof(NDIS_REQUEST), TAG)==NDIS_STATUS_FAILURE)
break;
if(NdisAllocateMemoryWithTag(&pAdapt->p_information,sizeof(ULONG), TAG)==NDIS_STATUS_FAILURE)
break;

*pAdapt->p_information=NDIS_PACKET_TYPE_PROMISCUOUS;
pAdapt->p_request->RequestType=NdisRequestSetInformation;
pAdapt->p_request->DATA.SET_INFORMATION.Oid=OID_GEN_CURRENT_PACKET_FILTER;
pAdapt->p_request->DATA.SET_INFORMATION.InformationBuffer=pAdapt->p_information;
pAdapt->p_request->DATA.SET_INFORMATION.InformationBufferLength=sizeof(ULONG);
        pAdapt->p_request->DATA.SET_INFORMATION.BytesRead=sizeof(ULONG);
        pAdapt->p_request->DATA.SET_INFORMATION.BytesNeeded=sizeof(ULONG);
NdisRequest(&pAdapt->Status,pAdapt->BindingHandle,pAdapt->p_request);

if(pAdapt->Status != NDIS_STATUS_SUCCESS)
{
DBGPRINT(\"<==NdisRequest error\\n\");
                     goto error;
}

}while(FALSE);

////////////////////////////

[编辑 -  4/14/02 作者: anti]

[编辑 -  4/14/02 作者: anti]

最新喜欢:

IammeIamme
mister
驱动牛犊
驱动牛犊
  • 注册日期2001-11-25
  • 最后登录2013-02-26
  • 粉丝0
  • 关注0
  • 积分8分
  • 威望26点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-04-14 18:47
在ptBindAdapt中设置模式要考虑很多事情,其实当你调用NdisRequest若返回非NDIS_STATUS_PENDINGM没有任何事情,但是常常返回PENDING状态(你蓝屏就是因为它),而返回PENDING后,NDIS便会调用PtRequestComplete,你看一下这个例程,你就会发现:
1。它要在Adapt的BytesNeeded和BytesReadOrWritten上面写信息,而这两个指针你都没有给空间,这么会不蓝屏。
2。在这个例程中它还会调用NdisRequestComplete向上一层,而上一层根本没有发出这样的Request,这也会出问题的。
anti
驱动牛犊
驱动牛犊
  • 注册日期2001-04-26
  • 最后登录2008-05-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-04-14 20:36
谢谢,
1。内存我是在ptrquestcomplete中放的。
2。不过我确实疏忽了ptrequestcomplete 中的原代码:

 *pAdapt->BytesReadOrWritten = NdisRequest->DATA.SET_INFORMATION.BytesRead;
 *pAdapt->BytesNeeded = NdisRequest->DATA.SET_INFORMATION.BytesNeeded;

 NdisMSetInformationComplete(pAdapt->MiniportHandle, Status);

其中pAdapt->BytesReadOrWritten,pAdapt->BytesNeeded是mpsetinformation传入的参数!(此导致蓝屏)
如你所说:NdisMSetInformationComplete(pAdapt->MiniportHandle, Status);
不跳过可能是会出事!
分给你了!
游客

返回顶部