2.2.7.2.1 Client Request Extensions
The NT_TRANSACT_IOCTL request is a special case of the SMB_COM_NT_TRANSACT command request. Only the NT_TRANSACT_IOCTL specifics are described here.
The FSCTL operations listed in the table below are new to these extensions and only those are specific to the SMB protocol.<63> Other FSCTL and IOCTL control codes are not defined in this specification and are specific to the underlying object store of the server.<64> If an application requests an undefined FSCTL or IOCTL operation, then the client SHOULD still pass the request through to the server.
Name |
Value |
Description |
---|---|---|
FSCTL_SRV_ENUMERATE_SNAPSHOTS |
0x00144064 |
Enumerate previous versions of a file. |
FSCTL_SRV_REQUEST_RESUME_KEY |
0x00140078 |
Retrieve an opaque file reference for server-side data movement.<65> |
FSCTL_SRV_COPYCHUNK |
0x001440F2 |
Perform server-side data movement.<66> |
FSCTL_SRV_ENUMERATE_SNAPSHOTS Request
This FSCTL is used to enumerate available previous version timestamps (snapshots) of a file or directory.
The FSCTL_SRV_ENUMERATE_SNAPSHOTS request format is a special case of the NT_TRANSACT_IOCTL subcommand. Only the FSCTL_SRV_ENUMERATE_SNAPSHOTS request specifics are described here.
SMB_Parameters
-
WordCount (1 byte): The value of this field MUST be 0x17.
-
Words (46 bytes): As specified in [MS-CIFS] section 2.2.4.62.1 and with the following exceptions:
-
MaxDataCount (4 bytes): This field MUST be greater than or equal to 0x000C.
-
SetupCount (1 byte): The number of setup words that are included in the transaction request. The value MUST be set to 0x04.
-
Setup (8 bytes): As specified in [MS-CIFS] section 2.2.7.2.1 and with the following exceptions:
-
FunctionCode (4 bytes): This field MUST be set to 0x00144064.
-
FID (2 bytes): This field MUST contain a valid Fid representing a valid Open on a file. This is the file for which snapshots are being requested.
-
IsFsctl (1 byte): MUST be TRUE (any non-zero value).
-
IsFlags (1 byte): MUST be zero (0x00).
-
-
NT_Trans_Parameters
No NT Trans parameters are sent in this request.
NT_Trans_Data
No NT Trans data is sent in this request.
FSCTL_SRV_REQUEST_RESUME_KEY Request
This FSCTL is used to retrieve an opaque file reference for server-side data movement operations, as specified in section 3.2.4.11.2.
The FSCTL_SRV_REQUEST_RESUME_KEY request format is a special case of the NT_TRANSACT_IOCTL subcommand. Only the FSCTL_SRV_REQUEST_RESUME_KEY request specifics are described here.
SMB_Parameters
-
WordCount (1 byte): The value of this field MUST be 0x17.
-
Words (46 bytes):
-
MaxDataCount (4 bytes): This field MUST be greater than or equal to 0x001D.
-
Setup (8 bytes):
-
FunctionCode (4 bytes): This field MUST be 0x00140078.
-
FID (2 bytes): This field MUST contain a valid Fid that represents a valid Open on a file. This file is the source file for a server-side data copy operation.
-
IsFsctl (1 byte): MUST be TRUE (any non-zero value).
-
IsFlags (1 byte): MUST be zero (0x00).
-
-
NT_Trans_Parameters
No NT Trans parameters are sent in this request.
NT_Trans_Data
No NT Trans data is sent in this request.
FSCTL_SRV_COPYCHUNK Request
This FSCTL is used for server-side data movement, as specified in section 3.2.4.11.2.
The FSCTL_SRV_COPYCHUNK request format is a special case of NT_TRANSACT_IOCTL subcommand. Only the FSCTL_SRV_COPYCHUNK request specifics are described here.
SMB_Parameters
-
WordCount (1 byte): The value of this field MUST be 0x17.
-
Words (46 bytes):
-
TotalDataCount (4 bytes): This field MUST be greater than or equal to 0x0034.
-
MaxDataCount (4 bytes): This field MUST be greater than or equal to 0x001D.
-
Setup (8 bytes):
-
FunctionCode (4 bytes): This field MUST be 0x00144078.
-
FID (2 bytes): This field MUST contain a valid Fid that represents a valid Open on a file. This file is the destination file for a server-side data copy operation.
-
IsFsctl (1 byte): This field MUST be TRUE (any non-zero value).
-
IsFlags (1 byte): The value of this field MUST be zero (0x00).
-
-
NT_Trans_Parameters
No NT Trans parameters are sent in this request.
NT_Trans_Data
-
NT_Trans_Data { COPYCHUNK_RESUME_KEY CopychunkResumeKey; ULONG ChunkCount; ULONG Reserved; SRV_COPYCHUNK CopychunkList[ChunkCount]; }
|
|
|
|
|
|
|
|
|
|
1 |
|
|
|
|
|
|
|
|
|
2 |
|
|
|
|
|
|
|
|
|
3 |
|
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
CopychunkResumeKey (24 bytes) |
|||||||||||||||||||||||||||||||
... |
|||||||||||||||||||||||||||||||
... |
|||||||||||||||||||||||||||||||
ChunkCount |
|||||||||||||||||||||||||||||||
Reserved |
|||||||||||||||||||||||||||||||
CopychunkList (variable) |
|||||||||||||||||||||||||||||||
... |
CopychunkResumeKey (24 bytes): An opaque 24-byte server copychunk resume key for a source file in a server-side file copy operation. This field value is received from a previous FSCTL_SRV_REQUEST_RESUME_KEY server response.
ChunkCount (4 bytes): The number of entries, or "copychunks", in the CopyChunkList. This field also represents the number of server-side data movement operations being requested. This field MUST NOT be zero.
Reserved (4 bytes): A reserved field. This field SHOULD be set to zero when sending the request. This field MUST be ignored by the server when the message is received.
CopychunkList (variable): A concatenated list of copychunks. Each entry is formatted as a SRV_COPYCHUNK structure.