自己写IRP,做文件操作,遇到的坑
在写文件的时候没问题,但是写完文件之后,就出问题了,
什么问题呢,是因为写完文件之后,文件关闭之后,
调用了一个叫做 CcFlushCache 的函数,这个函数是从CcWriteBehind 调过来的,
顿时懵逼了,什么情况,怎么会进入刷缓存的函数,和缓存有鸡毛关系,
这是我至少半年前的代码了,因为当初没有使用到这块,所以就没有测试这块,
结果现在要用,SB了,咋办,
看代码没啥问题啊。但是就是蓝屏,稳定蓝屏。
哎,
该谁的事,找谁去,
翻了一下ntoskrnl,找到了NtWriteFile函数,
其实这里已经看过好多次了,不说闭眼睛都知道流程,
至少也是和舅舅看外甥一样那么亲切了,
一行一行找,一个字一个字找,突然,
我看到了下面一行,图片中,红色一行。
there is a 1 flage,擦,都怪我当初太年轻,过于自信就没照抄这块代码,
结果IRP的Flages我写的是 IRP_WRITE_OPERATION ,就是少了那个 1, 导致最后又刷缓存去了,
但是我没有缓存操作,所以不存在缓存,所以刷不到,所以崩,
人生无奈,那个1 的英文名字叫。。。IRP_NOCACHE。。。
哈哈哈哈,人生都无奈得到头了,当初我就一个IRP_WRI 然后自动补全,就全了,
都没仔细看一眼标志位,结果导致人生出现了一堆插曲。。。
哎。拐了,拐了,结果把自己拐了。。。
当一个教训吧。。。人生无奈的教训。。。
记住这个1,英文名字叫 IRP 没缓存。
留个图片,祭奠伟大的Windows。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」