(σ゚∀゚)σ
@zkelly3
Fri, Aug 6, 2021 2:26 PM
[新知記錄]
每天學到新知的感覺真是不錯啊
(σ゚∀゚)σ
@zkelly3
Fri, Aug 6, 2021 2:27 PM
先記錄一下今天載了幫我 trim whitespace 的東西
Trailing Whitespace Visualizer - Visual Studio Marke...
感覺蠻不錯ㄉ
就是之後最好不要不小心修改到沒有想要修改的檔案
(
(σ゚∀゚)σ
@zkelly3
Fri, Aug 6, 2021 2:28 PM
Stream 到底是什麼
因為 minifilter 裡面提供了 context 的機制,所以就很好奇每個 context 都在做什麼
看到 file context, stream context, stream handle context 很是困惑啊 (
(σ゚∀゚)σ
@zkelly3
Fri, Aug 6, 2021 2:28 PM
結果發現 stream 有點像是包在 file 裡面的一團資料 (抹臉
(σ゚∀゚)σ
@zkelly3
Fri, Aug 6, 2021 2:30 PM
一個 file 裡面一定會有一個 unnamed stream,我們在檔案總管看到的那個 file 的 size 也是取決於這個 stream 的大小
一般當我們寫比如說 C:\foo 的時候,我們就是拿到 foo 這個檔案的 unnamed stream
但如果我們寫的是類似 C:\foo:bar,那這時候我們拿到的應該是 foo 這個檔案裏面名為 bar 的 stream
(σ゚∀゚)σ
@zkelly3
Fri, Aug 6, 2021 2:31 PM
有些東西會利用這些 named stream 來做一些
怪事
據說 IE 在把檔案載下來的時候,會在檔案裏面創一個 stream 記一些像是這個檔案是從哪邊被載下來的資訊
(σ゚∀゚)σ
@zkelly3
Fri, Aug 6, 2021 2:33 PM
然後這些 named stream 在這個檔案移動於不同檔案系統之間的時候會消失
也就是說,如果你把一個檔案從本機丟到別的 FTP 去再抓下來,你的檔案有可能會稍微變小 (#
而且剛剛沒有提到的是,雖然你的檔案那邊沒有顯示,但資料夾的大小好像會把這些 named stream 也算進去,所以你就會發現資料夾那邊的大小有些微的差距 (好像哪邊不太對 ???
(σ゚∀゚)σ
@zkelly3
Fri, Aug 6, 2021 2:35 PM
總之 stream 就是 file 裡面的一坨資料
他們的 context 就是分別會綁定一個 stream 或一個 file
還有一個名字長得很像的是 stream handle context
這個是綁定每次對一個 stream 的開關
(σ゚∀゚)σ
@zkelly3
Fri, Aug 6, 2021 2:37 PM
如果我今天開了 A 檔案 30 次,我只需要一個 file context
如果我只是去拿 A 的 unnamed stream,我也只需要一個 stream context
但我會有 30 個 stream handle context
據說正常來說很少會在一個 file 中用到複數個 stream 的情況,所以大部分時候 stream context 和 file context 的 scope 幾乎一致
(σ゚∀゚)σ
@zkelly3
Fri, Aug 6, 2021 2:38 PM
然後 context 影響到的 scope (?) 大約是
stream handle context < stream context < file context
(σ゚∀゚)σ
@zkelly3
Fri, Aug 6, 2021 2:39 PM
其他還有 instance context 和 volume context
instance 是什麼呢
要先講到 context 是什麼
context 是 minifilter 這個系統裡面提供的一個讓開發者可以跨 I/O operation 來記錄某些 status 的機制
(σ゚∀゚)σ
@zkelly3
Fri, Aug 6, 2021 2:42 PM
minifilter (和 filter manager) 則是微軟提供給第三方開發者,讓他們可以 filter 他們有興趣的 I/O operation 的機制 (?)
簡單來說,第三方開發者可以開發 minifilter 後跟微軟要到一個高度 (altitude)
然後透過 filter manager 註冊說他對什麼 I/O operation 有興趣
當這個 I/O operation 發生了,filter manager 就會先把這個 operation 轉給這個 minifilter 做事情,再繼續往下走
(σ゚∀゚)σ
@zkelly3
Fri, Aug 6, 2021 2:45 PM
那其實這些 minifilter 在實作上是會被 attach 到不同的 volume 上,對每個 volume 上的 file I/O 來做這些 filtering
當一個 volume 被 mount 上去的時候,系統就會去摳一個 routine 來叫 minifilter 們來 attach,這個時候就會做出一個在這個 volume 上的 minifilter 的 instance
(σ゚∀゚)σ
@zkelly3
Fri, Aug 6, 2021 2:46 PM
雖然每個 volume 上可以有複數 instance,但很多情況下只會有一個
這時候 instance context 和 volume context 所影響的 scope 就相差不大
但基本上是 instance context < volume context
(σ゚∀゚)σ
@zkelly3
Fri, Aug 6, 2021 2:46 PM
然後據說是 scope 越大的 context 越快
所以如果使用上 scope 差不多,應該是要用比較大的那個 context
載入新的回覆
每天學到新知的感覺真是不錯啊
就是之後最好不要不小心修改到沒有想要修改的檔案
因為 minifilter 裡面提供了 context 的機制,所以就很好奇每個 context 都在做什麼
看到 file context, stream context, stream handle context 很是困惑啊 (
一般當我們寫比如說 C:\foo 的時候,我們就是拿到 foo 這個檔案的 unnamed stream
但如果我們寫的是類似 C:\foo:bar,那這時候我們拿到的應該是 foo 這個檔案裏面名為 bar 的 stream
怪事據說 IE 在把檔案載下來的時候,會在檔案裏面創一個 stream 記一些像是這個檔案是從哪邊被載下來的資訊
也就是說,如果你把一個檔案從本機丟到別的 FTP 去再抓下來,你的檔案有可能會稍微變小 (#
而且剛剛沒有提到的是,雖然你的檔案那邊沒有顯示,但資料夾的大小好像會把這些 named stream 也算進去,所以你就會發現資料夾那邊的大小有些微的差距 (好像哪邊不太對 ???
他們的 context 就是分別會綁定一個 stream 或一個 file
還有一個名字長得很像的是 stream handle context
這個是綁定每次對一個 stream 的開關
如果我只是去拿 A 的 unnamed stream,我也只需要一個 stream context
但我會有 30 個 stream handle context
據說正常來說很少會在一個 file 中用到複數個 stream 的情況,所以大部分時候 stream context 和 file context 的 scope 幾乎一致
stream handle context < stream context < file context
instance 是什麼呢
要先講到 context 是什麼
context 是 minifilter 這個系統裡面提供的一個讓開發者可以跨 I/O operation 來記錄某些 status 的機制
簡單來說,第三方開發者可以開發 minifilter 後跟微軟要到一個高度 (altitude)
然後透過 filter manager 註冊說他對什麼 I/O operation 有興趣
當這個 I/O operation 發生了,filter manager 就會先把這個 operation 轉給這個 minifilter 做事情,再繼續往下走
當一個 volume 被 mount 上去的時候,系統就會去摳一個 routine 來叫 minifilter 們來 attach,這個時候就會做出一個在這個 volume 上的 minifilter 的 instance
這時候 instance context 和 volume context 所影響的 scope 就相差不大
但基本上是 instance context < volume context
所以如果使用上 scope 差不多,應該是要用比較大的那個 context