过滤驱动问题,各位达人来,紧急求救。恩德只能以分回报

dahuatttt 2009-02-17 05:07:57
我写了个过滤驱动,Write例程绑在IRP_MJ_Write上。过滤驱动加载在D盘。
我从C盘拷贝一个文件至D盘。softice跟踪到了2次Write例程的调用。
第一次调用顺利完成。
第二次调用时在MmProbeAndLockPages处发生了问题,尽管加上了try{}except,但是它每当运行MmProbeAndLockPages时就重启,无法捕获问题。

此部分代码如下:
pCurrentMDL = iIRP->MdlAddress;
try {
MmProbeAndLockPages( pCurrentMDL, iIrp->RequestorMode,
( irpStack->MajorFunction == IRP_MJ_READ) ?
IoReadAccess : IoWriteAccess);
}except..

if ( iIrp->RequestorMode == UserMode)
pCurrentMDL = MmGetSystemAddressForMdlSafe( pCurrentMDL,
NormalPagePriority);
......

此处是否有何非常严重的问题?希望达人回答,大恩大德无以回报,只能以分相送,短时间内可能会累加至300分。
...全文
222 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
nzz1985 2009-02-20
  • 打赏
  • 举报
回复
不懂啊,帮顶
  • 打赏
  • 举报
回复
帮顶~关注
babanake 2009-02-19
  • 打赏
  • 举报
回复
此部分代码如下:
pCurrentMDL = iIRP->MdlAddress;
try {
MmProbeAndLockPages( pCurrentMDL, iIrp->RequestorMode,
( irpStack->MajorFunction == IRP_MJ_READ) ?
IoReadAccess : IoWriteAccess);
}except..


如果传输类型是BUFFERED pCurrentMDL == NULL;

Comments
The highest-level driver in a chain of layered drivers that use direct I/O calls this routine. Drivers that use buffered I/O never call MmProbeAndLockPages.

babanake 2009-02-19
  • 打赏
  • 举报
回复
查错的时候, 别专注一个地方(出错的地方),可能这个错,是由前面引起的, 到你这个时候,由于某个操作 ,导致问题出现了!如果你写的东西不是公司的,是自己的爱好, 贴出部分代码,大家可以学习下!
babanake 2009-02-19
  • 打赏
  • 举报
回复
点击 , 我的电脑 属性 高级 启动和故障恢复(设置) 勾上 自动重新启动

MmProbeAndLockPages 我觉得不会有错的, 你发现它的返回值是VOID ?所以这个函数如果你传的参数符合规定, 肯定会成功的。

你上面的几个函数,你查下DDK的帮助, 自己就明白意思了!
sea_sharka_17 2009-02-18
  • 打赏
  • 举报
回复
谢谢楼主 
高手不少啊
xiongzhijian 2009-02-18
  • 打赏
  • 举报
回复
楼上的是正确的,顶!
babanake 2009-02-18
  • 打赏
  • 举报
回复
这样的现象 主要是你的IRQL 的问题, 原因就是。你的IRQL > PASSIVE_LEVEL的时候, 处理了分页内存。这样的错误在驱动里, 用TRY CATCH 是捕捉不到的,直接BSOD。你最好看下, BOSD 的出错带码。
alan001 2009-02-18
  • 打赏
  • 举报
回复
谢谢楼主发布分享

UP
yeah920 2009-02-18
  • 打赏
  • 举报
回复
不懂,帮忙顶起
dahuatttt 2009-02-18
  • 打赏
  • 举报
回复
第一次进入Write例程的时候,iIRP->MdlAddress.MdlFlags = 0xA
第二次进入Write例程的时候,iIRP->MdlAddress.MdlFlags = 0x2

难道光等于2的时候不行?
dahuatttt 2009-02-18
  • 打赏
  • 举报
回复
MmProbeAndLockPages应该就是把分页内容锁定到内存里
dahuatttt 2009-02-18
  • 打赏
  • 举报
回复
而且MmProbeAndLockPages难道不负责把分页内容锁定吗?
dahuatttt 2009-02-18
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 babanake 的回复:]
这样的现象 主要是你的IRQL 的问题, 原因就是。你的IRQL > PASSIVE_LEVEL的时候, 处理了分页内存。这样的错误在驱动里, 用TRY CATCH 是捕捉不到的,直接BSOD。你最好看下, BOSD 的出错带码。
[/Quote]

请问有什么办法看BOSD的出错代码?
dahuatttt 2009-02-17
  • 打赏
  • 举报
回复
我希望至少能够回答我下面5个函数之间的关系。
MmProbeAndLockPages
MmGetSystemAddressForMdlSafe
MmGetMdlVirtualAddress
IoAllocateMdl
IoBuildPartialMdl


急切地等待!!!
glorywu 2009-02-17
  • 打赏
  • 举报
回复
去看下楚狂人的过滤驱动教程吧:)
  • 打赏
  • 举报
回复
都是帮顶。。
泡面之夏 2009-02-17
  • 打赏
  • 举报
回复
帮顶~
cheng_er 2009-02-17
  • 打赏
  • 举报
回复
这可真不会,帮你顶
空心兜兜 2009-02-17
  • 打赏
  • 举报
回复
不懂,UP
加载更多回复(2)

70,033

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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