阅读:2550回复:1
9054驱动问题,请师兄帮忙
应用程序代码:
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) |
|
沙发#
发布于: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 |
|