maryea
驱动牛犊
驱动牛犊
  • 注册日期2006-04-11
  • 最后登录2008-03-17
  • 粉丝0
  • 关注0
  • 积分130分
  • 威望14点
  • 贡献值0点
  • 好评度13点
  • 原创分0分
  • 专家分0分
阅读:1412回复:2

请各位师兄帮小弟一把,小弟先谢过了,9054问题

楼主#
更多 发布于:2007-06-28 16:43
应用程序代码:
LONG pBuf[4096];
fread( pBuf, sizeof( long ) , 4096 , File1 );
WriteFile(m_hDevice1,pBuf,1025,&nWrite,NULL);

驱动程序代码
SerialWrite例程如下
KMemory Mem(I.Mdl());
PULONG    pBuffer        = (PULONG) Mem.MapToSystemSpace();

ULONG   dwTotalSize = I.WriteSize(CURRENT);
ULONG   dwBytesSent = 0;

m_MemoryRange1.outd(0,pBuffer,dwTotalSize);

为什么用WriteFile写入9054大于1024bytes 就会系统蓝屏,错误应该是在DISPACTCH_LEVEL IRQL上访问了分页内存,错误代码0X0000000A;
IRQL_NOT_LESS_OR_EQUAL,一直找不到为什么会出这个问题,还请大虾帮帮忙解决下这个问题 ,困扰我很久了 。(数据传输的特征标志位是
DO_DIRECT_IO)
zhangwei_351286
驱动牛犊
驱动牛犊
  • 注册日期2006-10-08
  • 最后登录2008-01-22
  • 粉丝0
  • 关注0
  • 积分140分
  • 威望15点
  • 贡献值0点
  • 好评度14点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-06-29 13:12
注意你的代码:
ULONG  dwTotalSize = I.WriteSize(CURRENT);
//dwTotalSize 返回的要写的字节数
ULONG  dwBytesSent = 0;
//下面的第三个参数应该是多少个 双字
m_MemoryRange1.outd(0,pBuffer,dwTotalSize);
改为:
m_MemoryRange1.outd(0,pBuffer,dwTotalSize/4);

这些细节性的东西帮助上都说得很明白了,写程序时多注意点。
maryea
驱动牛犊
驱动牛犊
  • 注册日期2006-04-11
  • 最后登录2008-03-17
  • 粉丝0
  • 关注0
  • 积分130分
  • 威望14点
  • 贡献值0点
  • 好评度13点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-06-29 15:21
哎呀 多谢提醒啊
游客

返回顶部