1. 程式人生 > >自己寫IRP,做文件操作,遇到的坑

自己寫IRP,做文件操作,遇到的坑

紅色 lag 分享圖片 ebe image 進入 偉大的 哈哈 alt

在寫文件的時候沒問題,但是寫完文件之後,就出問題了,

什麽問題呢,是因為寫完文件之後,文件關閉之後,

調用了一個叫做 CcFlushCache 的函數,這個函數是從CcWriteBehind 調過來的,

頓時懵逼了,什麽情況,怎麽會進入刷緩存的函數,和緩存有雞毛關系,

這是我至少半年前的代碼了,因為當初沒有使用到這塊,所以就沒有測試這塊,

結果現在要用,SB了,咋辦,

看代碼沒啥問題啊。但是就是藍屏,穩定藍屏。

哎,

該誰的事,找誰去,

翻了一下ntoskrnl,找到了NtWriteFile函數,

其實這裏已經看過好多次了,不說閉眼睛都知道流程,

至少也是和舅舅看外甥一樣那麽親切了,

一行一行找,一個字一個字找,突然,

我看到了下面一行,圖片中,紅色一行。

there is a 1 flage,擦,都怪我當初太年輕,過於自信就沒照抄這塊代碼,

結果IRP的Flages我寫的是 IRP_WRITE_OPERATION ,就是少了那個 1, 導致最後又刷緩存去了,

但是我沒有緩存操作,所以不存在緩存,所以刷不到,所以崩,

人生無奈,那個1 的英文名字叫。。。IRP_NOCACHE。。。

哈哈哈哈,人生都無奈得到頭了,當初我就一個IRP_WRI 然後自動補全,就全了,

都沒仔細看一眼標誌位,結果導致人生出現了一堆插曲。。。

哎。拐了,拐了,結果把自己拐了。。。

當一個教訓吧。。。人生無奈的教訓。。。

記住這個1,英文名字叫 IRP 沒緩存。

留個圖片,祭奠偉大的Windows。

技術分享圖片

自己寫IRP,做文件操作,遇到的坑