• 自己写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。

  • 相关阅读:
    guava快速入门
    自旋锁解决StackOverflowError案例
    Java内存模型
    Java中sleep()与wait()区别
    wait()、notify()、notifyAll()与线程通信方式总结
    同步代码块、同步方法、锁总结
    如何把Go调用C的性能提升10倍?
    记一次虚拟化环境下Windows IO性能的解析
    win7(64bit)使用mingw64配置gtkmm
    你的深度工作,决定了你的后半生(刻意练习,最主要的竞争对手是无聊)
  • 原文地址:https://www.cnblogs.com/suanguade/p/10300224.html
Copyright © 2020-2023  润新知