阅读:2897回复:2
求助:电脑蓝屏,显示 DRIVER_IRQL_NOT_LESS_OR_EQUAL!
在Window 2000 DDK中的例子Packet,
在DriverEntry中,我加入代码: if (NDIS_STATUS_SUCCESS == NdisAllocateMemoryWithTag(&Pmemory,1514,'BHH')) { if (PBuffer=IoAllocateMdl(Pmemory,1514,FALSE,FALSE,NULL)) { DebugPrint (("NdisAllocateMemory:IoAllocateMdl:success\n")); } } 注释: PBuffer为全局变量 我在PacketTransferDataComplete 函数中加了下面这一段代码, NdisMoveMappedMemory( ((PUCHAR)MmGetSystemAddressForMdlSafe(irp->MdlAddress, NormalPagePriority))+ETHERNET_HEADER_LENGTH, MmGetMdlVirtualAddress(PBuffer), BytesTransfered ); 其实就是说先把数据包接收过来,如果认为要向上传递,就把数据包拷贝到irp->MdlAddress, 但是电脑蓝屏,显示 DRIVER_IRQL_NOT_LESS_OR_EQUAL,我查了以下,DDK上说是因为: system attempted to access pageable memory at a process IRQL that was too high, 可是我用NdisAllocateMemoryWithTag申请的内存明明是非分页的啊,到底怎么回事? 怎么解决? |
|
沙发#
发布于:2007-08-08 10:40
1.看ndisuio的代码,有现成的代码可用,看明白以前,先不要自己去写,不然会死得很难看
2.学习用windbg调试,分析dump文件,不至于出了问题,一筹莫展 |
|
板凳#
发布于:2007-08-08 14:53
估计是哪里访问了空指针!PBuffer你在哪里释放了?你这样写,极度危险!
|
|
|