2017-01-12 63 views
0

我們正在實施SMB2協議。爲了顯示以前的文件版本,客戶端發送SMB2 IOCTL reqeust with CtlCode of FSCTL_SRV_ENUMERATE_SNAPSHOTS。我們按照http://download.microsoft.com/download/9/5/E/95EF66AF-9026-4BB0-A41D-A4F81802D92C/%5BMS-SMB2%5D.pdf中的描述發送響應3.3.5.15.1處理先前版本的枚舉請求以前版本的文件在SMB客戶端中不可見

當我點擊屬性 - >以前版本的目錄時,它顯示先前的版本返回,但是對於文件它不顯示任何東西。我檢查了我們對文件和目錄都返回了相同的響應。

爲什麼它不適用於文件?文件和目錄與以前的版本有何不同?在Windows客戶端中查看以前版本的文件應該支持哪些其他請求?

+0

開發一個服務器,你必須接收客戶端發送的所有請求。爲什麼不記錄所有請求並逐一檢查它們? –

回答

1

當打開目錄/文件屬性(以前的版本選項卡)時,我嗅探了一些本地主機通信。發現客戶端使用CreateContexts中的SMB2_CREATE_TIMEWARP_TOKEN([MS-SMB2],2.2.13.2.7)發送了CreatFile請求([MS-SMB2],2.2.13SMB2 CREATE請求)。客戶端獲取快照列表,然後在SMB2_CREATE_TIMEWARP_TOKEN中循環使用時間戳創建請求的時間戳。
假設客戶端嘗試從不同的快照打開文件並使用文件修改時間比較更改。然後顯示所有不同的版本。

+0

REPARSE_POINTS是否需要支持以前的版本? – Ashot

+0

如果我向你發送捕獲文件,你能告訴哪部分是錯誤的? – Ashot

+0

@Ashot我在捕獲的數據包中看到了它們,但它們完成了類似STATUS_NOT_A_REPARSE_POINT的操作。通過「重新分析點」,「符號鏈接」的定義來判斷,似乎客戶端檢查該目錄或文件不在另一個真實的地方。我不知道這是否是必需的,但您可能會將這些請求回覆爲「不是重新分析點」。但是,您最好實施描述服務器數據的所有人員,因爲重解析點不僅僅是一個鏈接。例如,它可能是一個加密密鑰。 –

1

這可能是一個特定的Windows窗體行爲或您的服務器中的錯誤。我們使用我們的NQ存儲服務器進行了測試,當客戶端是2012年時,它對文件和文件夾都運行良好。我們用其他窗口進行了測試,但目前還不能回憶哪些。老實說,我們沒有用太多的Win形狀測試快照。 如果你拍攝,它可以給你一個暗示哪一方(C或S)有罪。

+0

您是否支持REPARSE_POINTS,是否需要支持以前的版本? – Ashot

+0

如果我向你發送捕獲文件,你能告訴哪部分是錯的? – Ashot

+0

至少我會嘗試。你可以在我的電子郵件中找到我作爲markrabinovich –

相關問題