3.1.6 Other Local Events

When a file that has an ObjectID is moved to another volume, either on the same computer or on a different computer, an entry is added to the MoveTable. That entry indicates the file's ObjectID before it was moved, the MachineID of the computer to which the file was moved, and the file's new FileLocation value.

Specifically:

  • If a file is moved between volumes within the local machine, the procedure defined in section 3.1.6.1 MUST be followed.

  • If a file is moved from the local machine to a remote machine, the procedure defined in section 3.1.6.2 MUST be followed.

  • If a file is moved from a remote machine to the local machine, the procedure defined in section 3.1.6.3 MUST be followed.

  • If a file is moved by the local machine from one remote machine to another remote machine, the procedure in section 3.1.6.4 MUST be followed.

The remainder of this section describes these procedures. In these descriptions, a file move operation is modeled as a copy of a file from a source location to a new location, followed by the deletion of the source file.

The remainder of this section also refers to the following FSCTL structures, which are defined in [MS-FSCC]. If the connection to the remote machine is using the [MS-SMB] protocol, these requests MUST be sent for a file using the NT_TRANSACT_IOCTL subcommand of an SMB_COM_NT_TRANSACTION request, as specified in [MS-SMB] section 2.2.7.2.1. Otherwise, these requests MUST be sent in an SMB2 IOCTL request, as specified in [MS-SMB2] section 2.2.31.

  • FSCTL_CREATE_OR_GET_OBJECT_ID ([MS-FSCC], section 2.3.1). This request returns a file's ObjectID, FileID, and CrossVolumeMoveFlag values.<13>

  • FSCTL_GET_OBJECT_ID ([MS-FSCC], section 2.3.25). This request returns a file's ObjectID, FileID, and CrossVolumeMoveFlag values.<14>

  • FSCTL_LMR_SET_LINK_TRACKING_INFORMATION ([MS-FSCC], section 2.3.37). This request notifies a server of a moved file.

  • FSCTL_SET_OBJECT_ID_EXTENDED ([MS-FSCC], section 2.3.79). This request is used to set the FileID and CrossVolumeMoveFlag values on a file after it has been moved. Specifically, the EXTENDED_INFO element of this request MUST be set as follows:

    • ObjectID: This 16-byte field MUST be the value of the ObjectID component of the FileID that is to be set on a target file.

    • C: This single bit represents the CrossVolumeMoveFlag. If the flag is set this value MUST be 1. If the flag is cleared this value MUST be 0.

    • VolumeID: This 16-byte field (which starts with the C bit, described previously) MUST be the value of the VolumeID component of the FileID that is to be set on a target file.

    • Unused: The remaining 16 bytes of the element MUST be set to zero.