阅读:2175回复:2
***STOP:0x0000007E(0xC000005,0xFC86B507,0xFC90E62C,0xFC90E32C)
安装passthru时错误如下:
***STOP:0x0000007E(0xC000005,0xFC86B507,0xFC90E62C,0xFC90E32C) ***passthru.sys -address FC86B507 base at FC86B000,DateStamp 4221cadd ~~~~~~~~~~~~~~~~~ 什么意思? Beginning dump of physical memory phsical memory dump complete. 请问这种错误怎么改正呀? 程序如下: //全局变量(在DriverEntry函数前定义) PPKTLBUFFER gpQueueBuffer=NULL; PPKTQUEUE gpPacketQueue=NULL; ………… //函数DriverEntry // 分配与应用程序共享的内存 Status=CreateShareMemory(gpQueueBuffer,SHAREMEMEORYSIZE); if(Status!=STATUS_SUCCESS) { DbgPrint(\"NdisMRegisterDevice failed--create sharememory failed\\n\"); } InitPktQueue(gpQueueBuffer,&gpPacketQueue); ………… //CreateShareMemory函数 BOOLEAN CreateShareMemory(OUT PPKTLBUFFER PktLBuffer, IN ULONG Size) { NDIS_PHYSICAL_ADDRESS noMaxAddr = NDIS_PHYSICAL_ADDRESS_CONST(-1,-1); //noMaxAddr 含义不太明白???????? NdisAllocateMemory( (PVOID *)&PktLBuffer, sizeof(PKTLBUFFER), 0, noMaxAddr ); if(PktLBuffer==NULL) { DbgPrint(\"allocate the share memery error!!\\n\"); return FALSE; } NdisZeroMemory( (PVOID)PktLBuffer, sizeof( PKTLBUFFER ) ); PktLBuffer->KernelBaseAddress = ExAllocatePoolWithTag(NonPagedPool,Size,\'MpaM\'); if(!PktLBuffer->KernelBaseAddress) return FALSE; // // Allocate and initalize an MDL that describes the buffer //?????????Mdl = IoAllocateMdl(SystemVirtualAddress, 1024, FALSE, FALSE, NULL); PktLBuffer->BufferMdl = IoAllocateMdl(PktLBuffer->KernelBaseAddress,Size,FALSE,FALSE,NULL); if(!PktLBuffer->BufferMdl) { ExFreePool(PktLBuffer->KernelBaseAddress); PktLBuffer->KernelBaseAddress =NULL; ExFreePool(PktLBuffer);/// return FALSE; } PktLBuffer->Size=Size; MmBuildMdlForNonPagedPool(PktLBuffer->BufferMdl); DbgPrint(\"CreateShareMemory: KernelBaseAddress = 0x%p\\n\",PktLBuffer->KernelBaseAddress); return TRUE; } ………… //InitPktQueue函数 VOID InitPktQueue(IN PPKTLBUFFER PktLBuffer, OUT PPKTQUEUE *packetQueue) { PPKTQUEUE pktList; packetQueue=(PPKTQUEUE*)PktLBuffer->KernelBaseAddress; pktList=*packetQueue; pktList->StartAddress=(PCHAR)PktLBuffer->KernelBaseAddress+sizeof(PKTQUEUE); //用softice跟踪这儿出错,出错信息见附件 pktList->Front=NULL; pktList->Rear=NULL; pktList->Total=0; pktList->EndAddress=PktLBuffer->Size+(PCHAR)PktLBuffer->KernelBaseAddress; } ………… typedef struct _PKTLBUFFER { PMDL BufferMdl; PVOID UserBaseAddress; PVOID KernelBaseAddress; ULONG Size; }PKTLBUFFER, *PPKTLBUFFER; //队列头的数据结构 typedef struct _PKTQUEUE { PVOID Front; //队列的第一个包的位置 PVOID Rear; //队列的最后一个包的位置 UINT Total; //队列为处理数据包的个数 PVOID EndAddress; //队列的最大相对位置 PVOID StartAddress;//队列的起始地址 }PKTQUEUE,*PPKTQUEUE; |
|
沙发#
发布于:2005-02-27 22:43
出错信息的图片
|
|
板凳#
发布于:2005-02-28 11:27
估计是执行“pktList=*packetQueue;”后
pktList 为 NULL,看看是不是这样, |
|
|