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

9054驱动问题,请师兄帮忙

楼主#
更多 发布于:2007-06-28 16:44
应用程序代码:
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)
jingslabc
驱动牛犊
驱动牛犊
  • 注册日期2008-06-25
  • 最后登录2009-07-07
  • 粉丝0
  • 关注0
  • 积分8分
  • 威望63点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2008-11-21 15:34
PCI9054Device * pDevice = new (
            static_cast<PCWSTR>(KUnitizedName(L"PCI9054Device", m_Unit)),
            FILE_DEVICE_UNKNOWN,
            NULL,
            0,
            DO_xxxxxx_IO
            )
你在AddDevice中定义的第五个参数DO_xxxxxx_IO决定了你在SerialWrite(KIrp I)例程中的IRP表示方式
DO_DIRECT_IO可以使驱动在KIrp::Mdl访问应用程序中数据缓冲区
DO_DBUFFERED_IO在KIrp::BufferedReadDest和KIrp::BufferedWriteSource中读写数据缓冲区

你可能使用了不一致的IRP
游客

返回顶部