hiker
驱动牛犊
驱动牛犊
  • 注册日期2001-07-19
  • 最后登录2003-01-15
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1392回复:4

版主快看看我给你的信,帮我检查一下问题,鞠躬!

楼主#
更多 发布于:2001-10-17 09:51
版主帮我检查一下我的程序,总是死机。
谢谢!
在驱动开发的道路上艰苦的跋涉。
dazzy
驱动中牛
驱动中牛
  • 注册日期2001-03-23
  • 最后登录2008-08-12
  • 粉丝1
  • 关注0
  • 积分0分
  • 威望10点
  • 贡献值1点
  • 好评度10点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2001-10-18 12:38
把你的程序发给我吧!
hiker
驱动牛犊
驱动牛犊
  • 注册日期2001-07-19
  • 最后登录2003-01-15
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2001-10-18 16:37
版主,我已经把主要的程序发过去,可能是别的原因,你没收到,我现在再发一下,请查收,谢谢你的帮助!
在驱动开发的道路上艰苦的跋涉。
hiker
驱动牛犊
驱动牛犊
  • 注册日期2001-07-19
  • 最后登录2003-01-15
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2001-10-18 17:26
版主,我用你告诉的方法已经发现错误所在了,确实是memory corruption,我把驱动程序中一段分配内存的代码贴出来。
case IOCTL_AD_GETDATA:
  {
    if (!ValidateBuffer(Irp, sizeof(AD_GETDATA), 0,false))
       Status = STATUS_INVALID_PARAMETER;
    else
      {
AD_GETDATA *pBuf=(AD_GETDATA *)malloc(sizeof(AD_GETDATA));
if(pBuf==NULL)
DebugDump(DBG_ERRORS, ("ERROR - Memory alloc error.\n"));

memcpy(pBuf,(AD_GETDATA *)Irp.IoctlType3InputBuffer(),sizeof(AD_GETDATA));
其中AD_GETDATA是我定义的结构:
typedef struct
{
long DataNum;   //input
short ChNum;     //input
short pDataBuf[4096*16];  //output
}AD_GETDATA;
我在这段程序结束时,也释放了pBuf呀(if(pBuf) delete pBuf;)
Softice跟踪的结果是:
ERROR - Memory alloc error
break point due to page fault

在驱动开发的道路上艰苦的跋涉。
gxzbme
驱动牛犊
驱动牛犊
  • 注册日期2001-08-09
  • 最后登录2006-03-31
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2001-10-22 14:34
malloc 是不能在driver中使用的。
要用:
ExAllocatePool(NonPagedPool,DataLength);
RtlCopyMemory( StartData, InputData, DataLength);
呵呵!
游客

返回顶部