2.2.3.2 CHANGE_ORDER_COMMAND
The CHANGE_ORDER_COMMAND is referenced below in sections 2.2.3.6.20, 2.2.3.6.21, 2.2.3.6.22, and 2.2.3.10. It MUST be formatted as follows.
-
typedef struct _CHANGE_ORDER_COMMAND { ULONG SequenceNumber; ULONG Flags; ULONG IFlags; ULONG State; ULONG ContentCmd; ULONG LocationCmd; ULONG FileAttributes; ULONG FileVersionNumber; ULONG PartnerAckSeqNumber; ULONG Notused; ULONGLONG FileSize; ULONGLONG FileOffset; ULONGLONG FrsVsn; ULONGLONG FileUsn; ULONGLONG JrnlUsn; ULONGLONG JrnlFirstUsn; ULONG OriginalReplicaNum; ULONG NewReplicaNum; GUID ChangeOrderGuid; GUID OriginatorGuid; GUID FileGuid; GUID OldParentGuid; GUID NewParentGuid; GUID CxtionGuid; ULONGLONG AckVersion; ULONGLONG Spare2Ul1; GUID Spare1Guid; GUID Spare2Guid; PWCHAR Spare1Wcs; PWCHAR Spare2Wcs; ULONG Extension; PVOID Spare2Bin; LARGE_INTEGER EventTime; USHORT FileNameLength; WCHAR FileName[MAX_PATH+1]; UCHAR Padding[4]; } CHANGE_ORDER_COMMAND, *PCHANGE_ORDER_COMMAND;
SequenceNumber: A 32-bit, unsigned integer that specifies the sequence number in the change order command. It MUST be initialized to 0. The sequence number MUST be incremented with each change order that goes into the outbound log. The sequence number MUST be unique per replica set per machine.
Flags: A 32-bit, unsigned integer that MUST contain one or more change order flags, represented as the bitwise OR of zero or more of the following values (see section 3.3.4.4).
-
Value
Meaning
CO_FLAG_ABORT_CO
0x00000001
The change order is being aborted.
CO_FLAG_VV_ACTIVATED
0x00000002
A version vector activate request has been made (see section 3.3.4.4.6.2).
CO_FLAG_CONTENT_CMD
0x00000004
A valid content command.
CO_FLAG_LOCATION_CMD
0x00000008
A valid location command.
CO_FLAG_ONLIST
0x00000010
This change order is on a change order process list.
CO_FLAG_LOCALCO
0x00000020
This change order is locally generated.
CO_FLAG_RETRY
0x00000040
This change order MUST be retried (see section 3.1.1.10.2).
CO_FLAG_INSTALL_INCOMPLETE
0x00000080
The installation of the change order on the downstream partner is incomplete.
CO_FLAG_OUT_OF_ORDER
0x00000200
Do not check/update version vector.
CO_FLAG_NEW_FILE
0x00000400
The file or folder inside the change order is new. An IDTable record MUST be created for this file or folder. If the change order fails, then delete the IDTable record just created.
CO_FLAG_CONTROL
0x00001000
This is a control change order sent by a remote partner when an inbound connection starts up, so that the inbound log is scanned and any pending change orders for this connection are queued again.
CO_FLAG_DIRECTED_CO
0x00002000
This change order is directed to a single connection.
CO_FLAG_VVJOIN_TO_ORIG
0x00040000
This change order is from a replica member identified by the originator GUID.
CO_FLAG_SKIP_ORIG_REC_CHK
0x00100000
Skip the originator reconcile check.
CO_FLAG_MOVEIN_GEN
0x00200000
This change order was generated as part of a subfolder MOVEIN.
CO_FLAG_MORPH_GEN_LEADER
0x00400000
This is a MORPH_GEN leader, and it needs to refabricate the MORPH_GEN follower if it is retried.
CO_FLAG_JUST_OID_RESET
0x00800000
Reset object ID (OID) back to its FRS-defined value.
CO_FLAG_COMPRESSED_STAGE
0x01000000
The staging file for this change order is compressed.
CO_FLAG_SKIP_VV_UPDATE
0x02000000
This change order can not update the version vector.
IFlags: A 32-bit, unsigned integer that contains additional flag values for the change order. The value of this field MUST be a bitwise OR of one or more of the values defined in the following table.
-
Value
Meaning
CO_IFLAG_NONE
0x00000000
This value is sent by the downstream replication partner if the change order is dampened.
CO_IFLAG_VVRETIRE_EXEC
0x00000001
Indicates that an FRS operation, such as a file rename or copy, is complete. This IFlag value is sent by a downstream replication partner if the change order is not dampened.
CO_IFLAG_CO_ABORT
0x00000002
This value is sent by the downstream replication partner if change order processing needs to be aborted.
CO_IFLAG_DIR_ENUM_PENDING
0x00000004
This value is sent by the downstream replication partner if change order needs to enumerate its children as part of a sub-directory MoveIn.
State: A 32-bit, unsigned integer that indicates the change order process state.
-
Value
Meaning
0x00000000
This change order is entered in the log.
0x00000001
Allocating staging file space for a local change order.
0x00000002
This local change order staging file copy has started.
0x00000003
This local change order staging file is complete.
0x00000004
Waiting to retry local change order staging file generation.
0x00000005
Allocated staging file space for a remote change order.
0x00000006
This remote change order staging file fetch has started.
0x00000007
This remote change order staging file fetch is complete.
0x00000008
Waiting to retry the fetch of the staging file for the remote change order.
0x00000009
File install requested.
0x0000000A
File install has started.
0x0000000B
File install is complete.
0x0000000C
File install is waiting to try again.
0x0000000D
File install is retrying.
0x0000000E
File install rename is retrying.
0x0000000F
File install delete is retrying.
0x00000013
This change order is being recycled to perform a folder enumeration.
0x00000014
Request outbound propagation.
0x00000015
Request was accepted and is now in the outbound log.
0x00000016
Database state update has started.
0x00000017
Database state update has completed, and FRS is now freeing the change order.
0x00000018
This change order is being aborted.
ContentCmd: A 32-bit, unsigned integer that indicates the reasons for the change. The value of this field MUST be a bitwise OR of zero or more of the values defined in the following table.
-
Value
Meaning
REASON_DATA_OVERWRITE
0x00000001
Overwrite a file.
REASON_DATA_EXTEND
0x00000002
Extend a file.
REASON_DATA_TRUNCATION
0x00000004
Truncate the data.
REASON_NAMED_DATA_OVERWRITE
0x00000010
Overwrite named data.
REASON_NAMED_DATA_EXTEND
0x00000020
Extend named data.
REASON_NAMED_DATA_TRUNCATION
0x00000040
Truncate named data.
REASON_FILE_CREATE
0x00000100
Create a file.
REASON_FILE_DELETE
0x00000200
Delete a file.
REASON_EA_CHANGE
0x00000400
Change the extended attribute.
REASON_SECURITY_CHANGE
0x00000800
Change the security type.
REASON_RENAME_OLD_NAME
0x00001000
The old name for rename operation.
REASON_RENAME_NEW_NAME
0x00002000
The new name for rename operation.
REASON_BASIC_INFO_CHANGE
0x00008000
Change the basic information.
REASON_COMPRESSION_CHANGE
0x00020000
Change the compression.
REASON_ENCRYPTION_CHANGE
0x00040000
Change the encryption.
REASON_OBJECT_ID_CHANGE
0x00080000
Change the object identifier.
REASON_REPARSE_POINT_CHANGE
0x00100000
Change the file reparse point.
REASON_STREAM_CHANGE
0x00200000
Change the file stream.
LocationCmd: File or folder location command. The location command specifies the movement of a file or folder in the replica tree. The location command also specifies whether the change order describes a change for a file or a folder. The location command MUST have the following structure.
-
0
1
2
3
4
5
6
7
8
91
0
1
2
3
4
5
6
7
8
92
0
1
2
3
4
5
6
7
8
93
0
1D
C
C
C
C
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
-
D = DirOrFile (1 bit)
-
C = File Location Command (4 bits)
-
F = Filler bits, not used (27 bits). MUST be 0. MUST be ignored on receipt.
DirOrFile: Bit that indicates whether the change is for a folder or for a file. The value MUST be one of the following:
-
Value
Meaning
0
The change is for a file.
1
The change is for a folder.
Command: File location command MUST be one of the following values:
-
Value
Meaning
CO_LOCATION_CREATE
0x0
Create a file or folder.
CO_LOCATION_DELETE
0x1
Delete a file or folder.
CO_LOCATION_MOVEIN
0x2
Rename a file or folder from a path outside the replica tree to a path inside the replica tree on the same volume.
CO_LOCATION_MOVEIN2
0x3
Rename a file or folder into the replica set after a CO_LOCATION_MOVEOUT.
CO_LOCATION_MOVEOUT
0x4
Rename a file or folder from a path inside the replica tree to a path outside the replica tree on the same volume.
CO_LOCATION_MOVERS
0x5
Rename a file or folder from one replica tree to another replica tree on the same volume.
CO_LOCATION_MOVEDIR
0x6
Rename a file or folder from one folder to another folder in the same replica tree.
CO_LOCATION_NO_CMD
0x7
No command.
Filler: These bits are not used and MUST be set to 0 and ignored by the receiver.
FileAttributes: A 32-bit, unsigned integer that indicates file attributes, as specified in [MS-FSCC] section 2.6.
FileVersionNumber: A 32-bit, unsigned integer that indicates the file version number.
PartnerAckSeqNumber: A 32-bit, unsigned integer that indicates the replication partner acknowledgment sequence number.
Notused: Four padding bytes to align the following field in memory. Not used. MUST be 0. MUST be ignored on receipt.
FileSize: A 64-bit, unsigned integer that indicates the file size in bytes. This is the original file size before staging and compression. It is used as a hint about how much staging space will be used on the downstream partner. The actual compressed staging file size is passed from upstream partner to downstream partner in the COMM_FILE_SIZE field in a COMM_PACKET packet whose COMM_COMMAND value is set to CMD_RECEIVING_STAGE (see section 3.3.4.4.7 and 3.3.4.4.8).
FileOffset: A 64-bit, unsigned integer that MUST be 0. Not used. MUST be ignored on receipt. (COMM_FILE_OFFSET inside COMM_PACKET indicates the file offset in downloading the staging file. See section 2.2.3.6.16. This FileOffset field inside CHANGE_ORDER_COMMAND is not used.)
FrsVsn: A 64-bit, unsigned integer that indicates the originating server's volume sequence number.
FileUsn: A 64-bit, unsigned integer that indicates internal implementation-specific data on the current replica member. This value is meaningful only on the current replica member and has no meaning on any other replica member. Once the change order is sent to another replica member, the receiving partner MUST ignore this field.<5>
JrnlUsn: A 64-bit, unsigned integer that indicates internal implementation-specific data on the current replica member. This value is meaningful only on the current replica member and has no meaning on any other replica member. Once the change order is sent to another replica member, the receiving partner MUST ignore this field.<6>
JrnlFirstUsn: A 64-bit, unsigned integer that indicates internal implementation-specific data on the current replica member. This value is meaningful only on the current replica member and has no meaning on any other replica member. Once the change order is sent to another replica member, the receiving partner MUST ignore this field.<7>
OriginalReplicaNum: A 32-bit, unsigned integer that indicates internal implementation specific data on the current replica member. This value is meaningful only on the current replica member and has no meaning on any other replica member. Once the change order is sent to another replica member, the receiving partner MUST ignore this field.<8>
NewReplicaNum: A 32-bit, unsigned integer that indicates internal implementation specific data on the current replica member. This value is meaningful only on the current replica member and has no meaning on any other replica member. Once the change order is sent to another replica member, the receiving partner MUST ignore this field.<9>
ChangeOrderGuid: The identifying GUID of the change order.
OriginatorGuid: The GUID of the originating server.
FileGuid: The identifying GUID of the file.
OldParentGuid: The identifying GUID of the file's original parent folder.
NewParentGuid: The identifying GUID of the file's current parent folder.
CxtionGuid: The identifying GUID of the remote change order connection.
AckVersion: A 64-bit, unsigned integer that indicates the partner's acknowledgment version number. The downstream partner MUST preserve this value when receiving a change order from the upstream partner. The vendor can set it to any value based on the vendor's implementation or set it to 0 and ignore it.
Spare2Ul1: An 8-byte field that is not used and MUST be set to 8 bytes of 0x00 and MUST be ignored by the receiver.
Spare1Guid: A 16-byte field that is not used and MUST be set to 16 bytes of 0x00 and MUST be ignored by the receiver.
Spare2Guid: A 16-byte field that is not used and MUST be set to 16 bytes of 0x00 and MUST be ignored by the receiver.
Spare1Wcs: A 4-byte field that is not used and MUST be set to 4 bytes of 0x00 and MUST be ignored by the receiver.
Spare2Wcs: A 4-byte field that is not used and MUST be set to 4 bytes of 0x00 and MUST be ignored by the receiver.
Extension: A 4-byte field that MUST be ignored.
Spare2Bin: A 4-byte field that is not used and MUST be set to 4 bytes of 0x00 and MUST be ignored by the receiver.
EventTime: USN journal event time that MUST be in the format of FILETIME, as specified in [MS-DTYP].
FileNameLength: A 16-bit, unsigned integer that indicates the length in bytes of FileName field. FileNameLength does not include the terminating 0 inside FileName.
FileName: MUST be a Unicode string that contains the NULL-terminated file name. It is not a whole path or a relative path, only the file name.
Padding: A 4-byte field (beyond the 522nd byte of FileName) that is not used and MUST be set to 4 bytes of 0x00 and MUST be ignored by the receiver.