指定IRP_MJ_READ派遣函数,调用ReadFile函数后直接重启

zhang-hui 2012-04-30 04:00:22

IRP_MJ_READ
NTSTATUS HelloDDKRead(IN PDEVICE_OBJECT pDevObj,
IN PIRP pIrp)
{
KdPrint(("Enter HelloDDKRead\n"));

//对一般IRP的简单操作,后面会介绍对IRP更复杂的操作
NTSTATUS status = STATUS_SUCCESS;

PIO_STACK_LOCATION stack = IoGetCurrentIrpStackLocation(pIrp);
ULONG ulReadLength = stack->Parameters.Read.Length;

// 完成IRP
//设置IRP完成状态
pIrp->IoStatus.Status = status;

//设置IRP操作了多少字节
pIrp->IoStatus.Information = ulReadLength; // bytes xfered

memset(pIrp->AssociatedIrp.SystemBuffer,0xAA,ulReadLength);

//处理IRP
IoCompleteRequest( pIrp, IO_NO_INCREMENT );

KdPrint(("Leave HelloDDKRead\n"));

return status;
}

我调用ReadFile函数:ReadFile(hDevice,buffer,10,&ulRead,NULL);
之后电脑直接重启。
我折腾了好久,由于搞毕设刚接触这方面,万望高手指教……
...全文
182 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhang-hui 2012-05-01
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

楼主这是本科生的毕设还是研究生?
[/Quote]
本科生。
zO_Oz 2012-05-01
  • 打赏
  • 举报
回复
楼主这是本科生的毕设还是研究生?
zhang-hui 2012-04-30
  • 打赏
  • 举报
回复
算了,我自己发现了。原来还要在

status = IoCreateDevice( pDriverObject,
sizeof(DEVICE_EXTENSION),
&(UNICODE_STRING)devName,
FILE_DEVICE_UNKNOWN,
0, TRUE,
&pDevObj );

函数后面加上一句:
pDevObj->Flags |= DO_BUFFERED_IO;
zhang-hui 2012-04-30
  • 打赏
  • 举报
回复
我的这部分代码来自张帆的《Windows驱动开发详解》,书上明明有截图,是可以run的,
为什么到我的机上就不行了,由于会重启,现在我都只能在虚拟机上跑了,
另外,我通过测试发现:NULL == pIrp->AssociatedIrp.SystemBuffer
哪位能给出代码实例,能够设置数据,然后用ReadFile函数可以读出来就好了。

21,597

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 驱动开发/核心开发
社区管理员
  • 驱动开发/核心开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧