阅读:1301回复:8
出现蓝屏,请大侠们相救!!
前几日在本站看了一个贴子(内容如下),插入到自已的程序后,编译是没问题,但测试的时候(w2k下)刚开始还好好的,大约运行十几二十分钟后总会出现蓝屏,然后就是d机了...
问题出在那?小弟实在查不出,还望各位大侠指点 ===================================================== UINT CopyPacketData( PNDIS_PACKET pPacket, PCHAR pData, UINT iSize ) { UINT iLength; UINT iPos; PNDIS_BUFFER pNextBuffer; PCHAR pBuffer; iPos = 0; NdisQueryPacket( pPacket, NULL, NULL, &pNextBuffer, &iLength ); if( iLength > iSize ) return iPos; while( pNextBuffer ) { NdisQueryBuffer( pNextBuffer, &pBuffer, &iLength ); if( iLength > iSize - iPos || !pBuffer ) break; NdisMoveMemory( pData + iPos, pBuffer, iLength ); NdisGetNextBuffer( pNextBuffer, &pNextBuffer ); iPos += iLength; } return iPos; } ///////////////////////////////////////////////// typedef struct _EthHead { EthAddr DestAddr; EthAddr SourAddr; unsigned short SrvType; } EthHead, * PEthHead; typedef struct _IpHead { unsigned char HeaderLength_Version; unsigned char TypeOfService; // Type of service unsigned short TotalLength; // total length of the packet unsigned short Identification; // unique identifier unsigned short FragmentationFlags; // flags unsigned char TTL; // Time To Live unsigned char Protocol; // protocol (TCP, UDP etc) unsigned short CheckSum; // IP Header checksum unsigned int sourceIPAddress; // Source address unsigned int destIPAddress; // Destination Address } IpHead, *PIpHead; u_long GetSrcIpFromPacket( PNDIS_PACKET pPacket ) { PCHAR pData; UINT iTotal; PEthHead pEthHdr; PIpHead pIpHdr; NdisQueryPacket( pPacket, NULL, NULL, NULL, &iTotal ); pData = ExAllocatePool( NonPagedPool, iTotal ); CopyPacketData( pPacket, pData, iTotal ); pEthHdr = ( PEthHead )pData; pIpHdr = ( PIpHead )( pData + sizeof( EthHead ) ); return pIpHdr->sourceIPAddress; } |
|
最新喜欢:leavep...
|
沙发#
发布于:2002-11-10 09:15
pData = ExAllocatePool( NonPagedPool, iTotal );
pData你最后并没有释放是吗?如果那样的话,系统资源会被你耗净的。你应该申请一块空间然后用上同步措施,供驱动使用。这样就可以防止出现资源泄漏了。 |
|
|
板凳#
发布于:2002-11-10 09:32
pData = ExAllocatePool( NonPagedPool, iTotal ); 多谢,小弟愚笨,能具体点吗?? |
|
|
地板#
发布于:2002-11-10 09:49
-----------------------------------------
多谢,小弟愚笨,能具体点吗?? -------------------------------------------- 靠,10年前还有人说我是傻子呢!我也以为自己真的要傻一生,没想到还上了大学,逃离了傻子的行列!呵呵! 就是给你申请的内存区,加一个自旋锁。你是做什么?具体看看DDK,没什么高深的,只不过大家比你早看些时日罢了!现在看也不晚! |
|
|
地下室#
发布于:2002-11-10 10:00
----------------------------------------- DDK看是看了,但是看了一头露水,倒是记得好像在那本书里提到过有这么一回事, 当时没大注意, 现在记不清楚了 ,老兄就不要客气了,解决了问题马上给分。 ------------------------------- 呜!呜!我不想翻书了. |
|
|
5楼#
发布于:2002-11-10 10:16
先离开一下,回来后给加分!!
|
|
|
6楼#
发布于:2002-11-10 15:43
关注!
|
|
|
7楼#
发布于:2002-11-10 19:57
老大,写个自旋锁就行了嘛。分配内存然后给分配的内存加上一个自旋锁。就这样的了!
|
|
|
8楼#
发布于:2002-11-10 21:26
老大,写个自旋锁就行了嘛。分配内存然后给分配的内存加上一个自旋锁。就这样的了! 没错, 我还以为是那一个指针乱指了呢!!! 多谢了!! |
|
|