阅读:1885回复:4
极富挑战性:NDIS IM Driver蓝屏问题?
用Driver Strudio的Network Wizard生成了IM Driver,在OnReceive里对接收到的数据包做了些改动(例如,IP地址,端口等),然后又通过ForwardDown发送回去,自己分配的Packet Discriptor,缓冲区使用的是NDIS Frame的,如下代码所示:
// Allocate the buffer discriptro KNdisBuffer b=m_BufferPool.Allocate((PVOID)pstruEtherHeader,(HeaderBufferSize+PacketSize)); if (b.IsValid()) { KNdisPacket p = m_TxPacketPool.Allocate(); if (p.IsValid()) { // Valid packet p.ChainAtFront((PNDIS_BUFFER)b); // Set the flag [6/24/2004] p.SetFlags(0); // Store the KNdisBuffer pointer=b [6/23/2004] m_TxPacketPool.GetContext(p)->bufPacket = b; ForwardDown(p); return NDIS_STATUS_NOT_ACCEPTED; } else { // Invalid Packet discriptor, Release the buffer m_BufferPool.Free(b); } } 在OnSendComplete(PNDIS_PACKET pPacket, NDIS_STATUS Status)里释放Buffer和Packet Discriptor if(m_TxPacketPool.IsFrom(pPacket)) { // Free the buffer [6/23/2004] KNdisBuffer b = m_TxPacketPool.GetContext(pPacket)->bufPacket; if (b.IsValid()) { m_BufferPool.Free(b); } // Release my packet pool [6/9/2004] KNdisPacket::Reinitialize(pPacket); m_TxPacketPool.Free(pPacket); } 运行一段时间(接收了大量数据包)之后,出现蓝屏,提示:IRQL_NO_LESS_OR_EQUAL错误,不知是什么问题? 哪位高手指点,必高分酬谢! |
|
|
沙发#
发布于:2004-09-09 13:16
军中无人啊!
|
|
|
板凳#
发布于:2004-09-09 17:24
这么多内存操作,只给一段代码很难看出来
|
|
|
地板#
发布于:2004-09-14 23:10
主要检查一下是否有内存复制时是否越界了,另外就是检查内核函数的IRQL级是否满足。
|
|
|
地下室#
发布于:2004-09-18 05:24
你这个错误肯定是在IRQ_DISPATCH_LEVEL干了些只能在IRQ_PASSIVE_LEVEL干的事,查一查在这个code path里你可能调用到的NDIS function,看有没有要求在IRQL < IRQ_DISPATACH 下完成的。
另外,你没分析一下Crash Dump吗? |
|