阅读:3610回复:6
NdisRequest的调用
有那位兄弟用过 NdisRequest ?我有一事不明。
我的imd在调ndisrequest(queryinfo,OID_GEN_CURRENT_PACKET_FILTER) 时,返回NDIS_STATUS_PENDING.我该如何等待其结束呢? 如果我转而在RequestCompleteHandler在处理, 那我又如何区别这个 request 是我在imd中调用(要释放资源), 还是由上面的 miniport调用 所返回的呢? |
|
|
沙发#
发布于: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; 就会兰屏,请求大侠指点。 |
|
板凳#
发布于:2005-07-21 14:25
1.pAdapt->BytesReadOrWritten ,pAdapt->BytesNeeded是在MPQueryInformation或者MPSetInformation的附的值,对于你自己调用NdisRequest,这是两个没有附值的指针,当然要蓝屏了.
2.另外对于你自己调用的NdisReqeust,就不用调用NdisMSetInformationComplete了,上层协议根本不知道这个request,因为上层协议根本就没有调用过NdisRequest |
|
地板#
发布于:2005-07-21 18:30
zhaock 版主
我如果 不调用NdisMSetInformationComplete, 好象设置混杂模式就不会成功,加上就成功了!我是这种方式来 开启/关闭 混杂模式的! 另外,我修改passthru.sys, 修改重新编译,拷贝覆盖到 C:\WINNT\system32\drivers目录下的passthru.sys,使用“设备管理器”中“禁止”“启用”IM 驱动,为什么在双网卡时驱动没有更新,而在单网卡的机器上是OK的? 好象没有进到DriverEntry, 而单网卡是进去了的 |
|
地下室#
发布于:2005-07-21 18:34
呵呵,没有道理呀.
|
|
5楼#
发布于:2005-07-21 19:42
第一个问题我再试试!
我修改passthru.sys, 修改重新编译,拷贝覆盖到 C:WINNT\system32\drivers目录下的passthru.sys,使用“设备管理器”中“禁止”“启用”IM 驱动, 为什么在双网卡时驱动没有更新,而在单网卡的机器上是OK的? 好象没有进到DriverEntry, 而单网卡是进去了的. 这又是为什么? |
|
6楼#
发布于:2012-08-03 10:34
|
|