Appearance
Appearance
Opcode 0x0f
此 SMB2 命令用于在特定文件或目录上设置通知监视。它可用于“监视”文件/目录本身或任何子目录的变化。
当用于设置 Notification 监视时,服务器会立即以 STATUS_PENDING(以及监视进程的 process id)响应,以指示该监视已激活。与所有返回 STATUS_PENDING 的 async 命令一样,此回复的 header 中也会将 P bit 设置为 1。
一旦被监视的项目发生更改,服务器会向客户端发送第二个响应,这次使用状态码 STATUS_NOTIFY_ENUM_DIR,并携带一些关于具体发生了哪些更改的信息。此 async 回复的 header 中会将 P bit 设置为 1,并且还会在 header 中指定与初始 STATUS_PENDING 回复相同的 PID 值。
如果客户端想取消一个活动监视,可以使用 SMB2/Cancel 命令,并将 Command Sequence Number 指定为 0,同时指定与其想要取消的 Notify 相同的 Process ID。客户端还必须在 header 中设置 P bit,以指示 PID 字段有效。随后,服务器会通过向该 notify 发送状态为 STATUS_CANCELLED、PID 与初始回复相同且 P bit 设置为 1 的响应,来确认该 Notify 已被取消。
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| Buffer Code | :T| |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| | | | |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| |+-+-+-+-+ +-+-+-+-+| FID |+-+-+-+-+ +-+-+-+-+| |+-+-+-+-+ +-+-+-+-+| |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| CompletionMask |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| | | | |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| BUG |+-+-+-+-+-+-+-+-+此 bit 表示我们是否要监视整个树。
0: watch only this directory1: watch this directory and all subdirectories用于放置通知的目录的 SMB2/FID Identifier。
SMB2/CompletionMask 是一个 bitmask,用于控制我们希望收到哪类更改的通知。
If STATUS_PENDING+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| Buffer Code | | |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| | | | |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| BUG |+-+-+-+-+-+-+-+-+If STATUS_CANCELLED+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| Buffer Code | | |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| | | | |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| BUG |+-+-+-+-+-+-+-+-+If status STATUS_NOTIFY_ENUM_DIR+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| Buffer Code | | |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| | | | |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+SMB2/BufferCode
此尾随的单个字节始终与请求中相同位置的字节(FID 的 byte #1)具有相同的值。这显然是 Vista 中的一个 bug,即
CompletionMask 字段目前只是猜测。T bit 也是猜测。
这里也可能存在 Maximum amount of returned data(bytes 4-7),或者我一直觉得 SMB Notify 中缺失的内容:要监视的 subtree levels 最大数量。
导入自 https://wiki.wireshark.org/SMB2/Notify,时间为 2020-08-11 23:25:12 UTC