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];
   }
            


0


1


2


3


4


5


6


7


8


9

1
0


1


2


3


4


5


6


7


8


9

2
0


1


2


3


4


5


6


7


8


9

3
0


1

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.