SunMing.Cai
驱动牛犊
驱动牛犊
  • 注册日期2002-11-25
  • 最后登录2008-01-10
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
阅读:3610回复:6

NdisRequest的调用

楼主#
更多 发布于:2004-12-09 09:33
有那位兄弟用过 NdisRequest ?我有一事不明。
我的imd在调ndisrequest(queryinfo,OID_GEN_CURRENT_PACKET_FILTER) 时,返回NDIS_STATUS_PENDING.我该如何等待其结束呢?
如果我转而在RequestCompleteHandler在处理, 那我又如何区别这个 request 是我在imd中调用(要释放资源), 还是由上面的 miniport调用 所返回的呢?

梦想驱动人生 ------------------------ MSN:saleonnet@hotmail.com ICQ:175745619 OQ:14892627
LiuQF001
驱动牛犊
驱动牛犊
  • 注册日期2005-07-13
  • 最后登录2005-09-29
  • 粉丝0
  • 关注0
  • 积分24分
  • 威望5点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2005-07-21 13:59
case NdisRequestSetInformation:

                ASSERT( Oid != OID_PNP_SET_POWER);
              if(m_IsMySelfRequestFlag)
              {
//                *pAdapt->BytesReadOrWritten = NdisRequest->DATA.SET_INFORMATION.BytesRead;
//                *pAdapt->BytesNeeded = NdisRequest->DATA.SET_INFORMATION.BytesNeeded;
                if(NdisRequest)           NdisFreeMemory(NdisRequest , sizeof(NDIS_REQUEST) , 0 );
                NdisMSetInformationComplete(pAdapt->MiniportHandle,       Status);
                m_IsMySelfRequestFlag = 0 ;
              }
              else
              {
                *pAdapt->BytesReadOrWritten = NdisRequest->DATA.SET_INFORMATION.BytesRead;
                *pAdapt->BytesNeeded = NdisRequest->DATA.SET_INFORMATION.BytesNeeded;
                NdisMSetInformationComplete(pAdapt->MiniportHandle,       Status);
              }
                break;
我是这样处理的了,m_IsMySelfRequestFlag 是我自加的标志,通过,但是具体的原理还是没有搞清楚,为什么要屏蔽那两行?
如果不屏蔽
//                *pAdapt->BytesReadOrWritten = NdisRequest->DATA.SET_INFORMATION.BytesRead;
//                *pAdapt->BytesNeeded = NdisRequest->DATA.SET_INFORMATION.BytesNeeded;
就会兰屏,请求大侠指点。
zhaock
驱动太牛
驱动太牛
  • 注册日期2002-01-26
  • 最后登录2018-06-02
  • 粉丝3
  • 关注2
  • 积分73328分
  • 威望362317点
  • 贡献值1点
  • 好评度226点
  • 原创分0分
  • 专家分0分
  • 社区居民
板凳#
发布于:2005-07-21 14:25
1.pAdapt->BytesReadOrWritten ,pAdapt->BytesNeeded是在MPQueryInformation或者MPSetInformation的附的值,对于你自己调用NdisRequest,这是两个没有附值的指针,当然要蓝屏了.
2.另外对于你自己调用的NdisReqeust,就不用调用NdisMSetInformationComplete了,上层协议根本不知道这个request,因为上层协议根本就没有调用过NdisRequest
LiuQF001
驱动牛犊
驱动牛犊
  • 注册日期2005-07-13
  • 最后登录2005-09-29
  • 粉丝0
  • 关注0
  • 积分24分
  • 威望5点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2005-07-21 18:30
zhaock 版主
我如果 不调用NdisMSetInformationComplete,
好象设置混杂模式就不会成功,加上就成功了!我是这种方式来 开启/关闭 混杂模式的!
另外,我修改passthru.sys, 修改重新编译,拷贝覆盖到
C:\WINNT\system32\drivers目录下的passthru.sys,使用“设备管理器”中“禁止”“启用”IM 驱动,为什么在双网卡时驱动没有更新,而在单网卡的机器上是OK的?
好象没有进到DriverEntry, 而单网卡是进去了的
zhaock
驱动太牛
驱动太牛
  • 注册日期2002-01-26
  • 最后登录2018-06-02
  • 粉丝3
  • 关注2
  • 积分73328分
  • 威望362317点
  • 贡献值1点
  • 好评度226点
  • 原创分0分
  • 专家分0分
  • 社区居民
地下室#
发布于:2005-07-21 18:34
呵呵,没有道理呀.
LiuQF001
驱动牛犊
驱动牛犊
  • 注册日期2005-07-13
  • 最后登录2005-09-29
  • 粉丝0
  • 关注0
  • 积分24分
  • 威望5点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2005-07-21 19:42
第一个问题我再试试!

我修改passthru.sys, 修改重新编译,拷贝覆盖到
C:WINNT\system32\drivers目录下的passthru.sys,使用“设备管理器”中“禁止”“启用”IM 驱动,
为什么在双网卡时驱动没有更新,而在单网卡的机器上是OK的?
好象没有进到DriverEntry, 而单网卡是进去了的.

这又是为什么?
qaz362008
驱动牛犊
驱动牛犊
  • 注册日期2012-06-11
  • 最后登录2012-09-10
  • 粉丝0
  • 关注1
  • 积分25分
  • 威望181点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2012-08-03 10:34
 
游客

返回顶部