阅读:1392回复:4
版主快看看我给你的信,帮我检查一下问题,鞠躬!
版主帮我检查一下我的程序,总是死机。
谢谢! |
|
|
沙发#
发布于:2001-10-18 12:38
把你的程序发给我吧!
|
|
板凳#
发布于:2001-10-18 16:37
版主,我已经把主要的程序发过去,可能是别的原因,你没收到,我现在再发一下,请查收,谢谢你的帮助!
|
|
|
地板#
发布于: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 |
|
|
地下室#
发布于:2001-10-22 14:34
malloc 是不能在driver中使用的。
要用: ExAllocatePool(NonPagedPool,DataLength); RtlCopyMemory( StartData, InputData, DataLength); 呵呵! |
|