2017-01-12 38 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 –

相关问题