Appearance
Appearance
SMB2/Create 请求和回复可以设置/返回有关文件的附加信息,例如设置初始 EA,或返回该文件的 maximum SMB2/AccessMask。这由 SMB2/Create 请求和响应末尾传递的 extrainfo blob 处理。
在 IPC$ 共享上打开 pipes 时,不使用 extrainfo blob。
extrainfo blob 由 extrainfo entries 的串联列表组成。每个 extrainfo blob 中可以有多个条目。
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| Chain Offset |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| Tag Offset | Tag Length |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| Tag Length(cont) | Data Offset |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| Data Length |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-++-+-+-+-+...| Tag+-+-+-+-+...+-+-+-+-+...| Data+-+-+-+-+...到下一个条目的偏移量;如果后面没有更多条目,则为 0。
该偏移量相对于当前 extrainfo entry,而不是相对于 SMB2 packet 的开头。
此 extrainfo entry 中存储 Tag 的位置偏移量。
Tag 的字节长度。该字段为 4 字节且不对齐。
此 extrainfo entry 中存储该 tag 的 Data 的位置偏移量。
数据的字节长度。
这是一个 4 字符 ASCII 字符串,用于指定条目的类型以及
设置/请求的信息类型。
到目前为止见过的 Tags 类型包括
ExtA : Set the extended attributesMxAc : Query the maximum access maskTWrp : Open a specific shadow volume copy/reparse pointdata 字段结构取决于使用了哪个 Tag,以及它是请求还是响应。in
该结构只能在创建文件时用于 SMB2/Create 请求。它用于在创建文件的同时设置文件的 Extended Attributes。该字段不会在响应中返回。
该字段的结构与 get ea infolevel 相同:有关该结构的描述,请参见 SMB2/SMB2_FILE_INFO_0f。
该 tag 可用于查询文件允许的最大 access mask。客户端通过在 extrainfo 中附加 MxAc tag 来表明在请求中希望知道最大允许 access mask,但 Data Length 为 0 且没有数据。
然后服务器以 SMB2/Create 响应进行回应,其中包含一个 MxAc tag 和 8 字节数据。
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| unknown |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| Access Mask |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+见 SMB2/AccessMask
该 tag 在 Create 请求中用于指定要打开特定的 shadow volume copy 版本,而不是普通/当前版本。该 tag 不用于回复。
使用时,客户端首先会使用 SMB2/Ioctl/Function/FILE_DEVICE_NETWORK_FILE_SYSTEM/FSCTL_GET_SHADOW_COPY_DATA Ioctl 获取所有 volume shadow copy 实例列表。它返回所有可用 shadow copies 的列表,格式为 @GMT-date-time。选择特定 shadow copy 后,date-time 会转换为 8 字节 NTTIME 值,并作为 TWrp extra info 在 Create 调用中传递给服务器。Create 调用在 create flags 中设置了 OpenReparsePoint bit (0x00200000) bit。Create 调用中指定的 filename 是 '@'。
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| |+-+-+-+-+ TimeStamp +-+-+-+-+| |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+我只见过 TWrp 用于打开共享本身的较旧副本,因此我不知道 '@' 是否仍用于打开普通文件或目录的旧版本。也许不能使用?也许它使用的是某种 '@'+something 形式?
于 2020-08-11 23:24:56 UTC 从 https://wiki.wireshark.org/SMB2/Create/ExtraInfo 导入