其它程序在调用WriteFile写某个普通文件后,系统会将文件数据写到磁盘缓存中,我在直接读取硬盘扇区时能得到磁盘缓存中的数据吗?如果不能,有什么办法?

解决方案 »

  1.   

    得到数据为什么这样呢,你hook ZwCreateFile()就行了,所有的写操作都过这个传入ntdll.dll,到ntoskerl.exe中
      

  2.   

    可以,ReadFile是先读缓存的。想知道具体的情况可以去看看文件系统驱动的资料。
      

  3.   

    可以,ReadFile是先读缓存的。想知道具体的情况可以去看看文件系统驱动的资料。

    无语中。
    你说的是读文件的时候
    直接读磁盘是要绕过文件系统的。
      

  4.   

    读磁盘与读文件都是用的ReadFile()这个API。感觉“wangk(倒之)”的说法更“合乎情理”。
    大家继续。
      

  5.   

    ReadFile()最终调用的是native api的ZwCreateFile(),还是偶的上面方法,不然有些会拦截不到的!!!!!
      

  6.   

    读之前先刷一下磁盘缓冲,就一定能读到了。
    FlushFileBuffers
      

  7.   

    补充一下,如果CreateFile时打开的是逻辑卷,应该可以直接读到缓冲中数据。
    建议写一个程序测试一下。
      

  8.   

    CreateFile时打开的是逻辑卷。我没有普通文件的HANDLE,不能调用FlushFileBuffers。