wfine
驱动牛犊
驱动牛犊
  • 注册日期2004-08-15
  • 最后登录2005-06-28
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2175回复:2

***STOP:0x0000007E(0xC000005,0xFC86B507,0xFC90E62C,0xFC90E32C)

楼主#
更多 发布于:2005-02-27 22:41
安装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;

wfine
驱动牛犊
驱动牛犊
  • 注册日期2004-08-15
  • 最后登录2005-06-28
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2005-02-27 22:43
出错信息的图片
AllenZh
驱动老牛
驱动老牛
  • 注册日期2001-08-19
  • 最后登录2015-11-27
  • 粉丝19
  • 关注10
  • 积分1316分
  • 威望2387点
  • 贡献值7点
  • 好评度321点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2005-02-28 11:27
估计是执行“pktList=*packetQueue;”后
pktList 为 NULL,看看是不是这样,
1,承接Windows下驱动/应用开发 2,本人原创虚拟鼠标/键盘,触摸屏,虚拟显卡,Mirror驱动,XP无盘的SCSI虚拟磁盘驱动等 3,windows下有尝技术服务(包括BUG调试,员工培训等) 欢迎深圳和海外企业联系.msn:mfczmh@sina.com
游客

返回顶部