2.2.13 SMB2 CREATE Request
The SMB2 CREATE Request packet is sent by a client to request either creation of or access to a file. In case of a named pipe or printer, the server MUST create a new file.
This request is composed of an SMB2 Packet Header, as specified in section 2.2.1, that is followed by this request structure.
|
|
|
|
|
|
|
|
|
|
1 |
|
|
|
|
|
|
|
|
|
2 |
|
|
|
|
|
|
|
|
|
3 |
|
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
StructureSize |
SecurityFlags |
RequestedOplockLevel |
|||||||||||||||||||||||||||||
ImpersonationLevel |
|||||||||||||||||||||||||||||||
SmbCreateFlags |
|||||||||||||||||||||||||||||||
... |
|||||||||||||||||||||||||||||||
Reserved |
|||||||||||||||||||||||||||||||
... |
|||||||||||||||||||||||||||||||
DesiredAccess |
|||||||||||||||||||||||||||||||
FileAttributes |
|||||||||||||||||||||||||||||||
ShareAccess |
|||||||||||||||||||||||||||||||
CreateDisposition |
|||||||||||||||||||||||||||||||
CreateOptions |
|||||||||||||||||||||||||||||||
NameOffset |
NameLength |
||||||||||||||||||||||||||||||
CreateContextsOffset |
|||||||||||||||||||||||||||||||
CreateContextsLength |
|||||||||||||||||||||||||||||||
Buffer (variable) |
|||||||||||||||||||||||||||||||
... |
StructureSize (2 bytes): The client MUST set this field to 57, indicating the size of the request structure, not including the header. The client MUST set it to this value regardless of how long Buffer[] actually is in the request being sent.
SecurityFlags (1 byte): This field MUST NOT be used and MUST be reserved. The client MUST set this to 0, and the server MUST ignore it.
RequestedOplockLevel (1 byte): The requested oplock level. This field MUST contain one of the following values.<36> For named pipes, the server MUST always revert to SMB2_OPLOCK_LEVEL_NONE irrespective of the value of this field.
-
Value
Meaning
SMB2_OPLOCK_LEVEL_NONE
0x00
No oplock is requested.
SMB2_OPLOCK_LEVEL_II
0x01
A level II oplock is requested.
SMB2_OPLOCK_LEVEL_EXCLUSIVE
0x08
An exclusive oplock is requested.
SMB2_OPLOCK_LEVEL_BATCH
0x09
A batch oplock is requested.
SMB2_OPLOCK_LEVEL_LEASE
0xFF
A lease is requested. If set, the request packet MUST contain an SMB2_CREATE_REQUEST_LEASE (section 2.2.13.2.8) or an SMB2_CREATE_REQUEST_LEASE_V2 (section 2.2.13.2.10) create context. This value is not valid for the SMB 2.0.2 dialect.
ImpersonationLevel (4 bytes): This field specifies the impersonation level requested by the application that is issuing the create request and MUST contain one of the following values.
-
Value
Meaning
Anonymous
0x00000000
The application-requested impersonation level is Anonymous.
Identification
0x00000001
The application-requested impersonation level is Identification.
Impersonation
0x00000002
The application-requested impersonation level is Impersonation.
Delegate
0x00000003
The application-requested impersonation level is Delegate.
Impersonation is specified in [MS-WPO] section 9.7; for more information about impersonation, see [MSDN-IMPERS].
SmbCreateFlags (8 bytes): This field MUST NOT be used and MUST be reserved. The client SHOULD set this field to zero, and the server MUST ignore it on receipt.
Reserved (8 bytes): This field MUST NOT be used and MUST be reserved. The client sets this to any value, and the server MUST ignore it on receipt.
DesiredAccess (4 bytes): The level of access that is required, as specified in section 2.2.13.1.
FileAttributes (4 bytes): This field MUST be a combination of the values specified in [MS-FSCC] section 2.6, and MUST NOT include any values other than those specified in that section.
ShareAccess (4 bytes): Specifies the sharing mode for the open. If ShareAccess values of FILE_SHARE_READ, FILE_SHARE_WRITE and FILE_SHARE_DELETE are set for a printer file or a named pipe, the server SHOULD<37> ignore these values. The field MUST be constructed using a combination of zero or more of the following bit values.
-
Value
Meaning
FILE_SHARE_READ
0x00000001
When set, indicates that other opens are allowed to read this file while this open is present. This bit MUST NOT be set for a named pipe or a printer file. Each open creates a new instance of a named pipe. Likewise, opening a printer file always creates a new file.
FILE_SHARE_WRITE
0x00000002
When set, indicates that other opens are allowed to write this file while this open is present. This bit MUST NOT be set for a named pipe or a printer file. Each open creates a new instance of a named pipe. Likewise, opening a printer file always creates a new file.
FILE_SHARE_DELETE
0x00000004
When set, indicates that other opens are allowed to delete or rename this file while this open is present. This bit MUST NOT be set for a named pipe or a printer file. Each open creates a new instance of a named pipe. Likewise, opening a printer file always creates a new file.
CreateDisposition (4 bytes): Defines the action the server MUST take if the file that is specified in the name field already exists. For opening named pipes, this field can be set to any value by the client and MUST be ignored by the server. For other files, this field MUST contain one of the following values.
-
Value
Meaning
FILE_SUPERSEDE
0x00000000
If the file already exists, supersede it. Otherwise, create the file. This value SHOULD NOT be used for a printer object.<38>
FILE_OPEN
0x00000001
If the file already exists, return success; otherwise, fail the operation. MUST NOT be used for a printer object.
FILE_CREATE
0x00000002
If the file already exists, fail the operation; otherwise, create the file.
FILE_OPEN_IF
0x00000003
Open the file if it already exists; otherwise, create the file. This value SHOULD NOT be used for a printer object.<39>
FILE_OVERWRITE
0x00000004
Overwrite the file if it already exists; otherwise, fail the operation. MUST NOT be used for a printer object.
FILE_OVERWRITE_IF
0x00000005
Overwrite the file if it already exists; otherwise, create the file. This value SHOULD NOT be used for a printer object.<40>
CreateOptions (4 bytes): Specifies the options to be applied when creating or opening the file. Combinations of the bit positions listed below are valid, unless otherwise noted. This field MUST be constructed using the following values.<41>
-
Value
Meaning
FILE_DIRECTORY_FILE
0x00000001
The file being created or opened is a directory file. With this flag, the CreateDisposition field MUST be set to FILE_CREATE, FILE_OPEN_IF, or FILE_OPEN. With this flag, only the following CreateOptions values are valid: FILE_WRITE_THROUGH, FILE_OPEN_FOR_BACKUP_INTENT, FILE_DELETE_ON_CLOSE, and FILE_OPEN_REPARSE_POINT. If the file being created or opened already exists and is not a directory file and FILE_CREATE is specified in the CreateDisposition field, then the server MUST fail the request with STATUS_OBJECT_NAME_COLLISION. If the file being created or opened already exists and is not a directory file and FILE_CREATE is not specified in the CreateDisposition field, then the server MUST fail the request with STATUS_NOT_A_DIRECTORY. The server MUST fail an invalid CreateDisposition field or an invalid combination of CreateOptions flags with STATUS_INVALID_PARAMETER.
FILE_WRITE_THROUGH
0x00000002
The server performs file write-through; file data is written to the underlying storage before completing the write operation on this open.
FILE_SEQUENTIAL_ONLY
0x00000004
This indicates that the application intends to read or write at sequential offsets using this handle, so the server SHOULD optimize for sequential access. However, the server MUST accept any access pattern. This flag value is incompatible with the FILE_RANDOM_ACCESS value.
FILE_NO_INTERMEDIATE_BUFFERING
0x00000008
File buffering is not performed on this open; file data is not retained in memory upon writing it to, or reading it from, the underlying storage.
FILE_SYNCHRONOUS_IO_ALERT
0x00000010
This bit SHOULD be set to 0 and MUST be ignored by the server.<42>
FILE_SYNCHRONOUS_IO_NONALERT
0x00000020
This bit SHOULD be set to 0 and MUST be ignored by the server.<43>
FILE_NON_DIRECTORY_FILE
0x00000040
If the name of the file being created or opened matches with an existing directory file, the server MUST fail the request with STATUS_FILE_IS_A_DIRECTORY. This flag MUST NOT be used with FILE_DIRECTORY_FILE or the server MUST fail the request with STATUS_INVALID_PARAMETER.
FILE_COMPLETE_IF_OPLOCKED
0x00000100
This bit SHOULD be set to 0 and MUST be ignored by the server.<44>
FILE_NO_EA_KNOWLEDGE
0x00000200
The caller does not understand how to handle extended attributes. If the request includes an SMB2_CREATE_EA_BUFFER create context, then the server MUST fail this request with STATUS_ACCESS_DENIED. If extended attributes with the FILE_NEED_EA flag (see [MS-FSCC] section 2.4.15) set are associated with the file being opened, then the server MUST fail this request with STATUS_ACCESS_DENIED.
FILE_RANDOM_ACCESS
0x00000800
This indicates that the application intends to read or write at random offsets using this handle, so the server SHOULD optimize for random access. However, the server MUST accept any access pattern. This flag value is incompatible with the FILE_SEQUENTIAL_ONLY value. If both FILE_RANDOM_ACCESS and FILE_SEQUENTIAL_ONLY are set, then FILE_SEQUENTIAL_ONLY is ignored.
FILE_DELETE_ON_CLOSE
0x00001000
The file MUST be automatically deleted when the last open request on this file is closed. When this option is set, the DesiredAccess field MUST include the DELETE flag. This option is often used for temporary files.
FILE_OPEN_BY_FILE_ID
0x00002000
This bit SHOULD be set to 0 and the server MUST fail the request with a STATUS_NOT_SUPPORTED error if this bit is set.<45>
FILE_OPEN_FOR_BACKUP_INTENT
0x00004000
The file is being opened for backup intent. That is, it is being opened or created for the purposes of either a backup or a restore operation. The server can check to ensure that the caller is capable of overriding whatever security checks have been placed on the file to allow a backup or restore operation to occur. The server can check for access rights to the file before checking the DesiredAccess field.
FILE_NO_COMPRESSION
0x00008000
The file cannot be compressed. This bit is ignored when FILE_DIRECTORY_FILE is set in CreateOptions.
FILE_OPEN_REMOTE_INSTANCE
0x00000400
This bit SHOULD be set to 0 and MUST be ignored by the server.
FILE_OPEN_REQUIRING_OPLOCK
0x00010000
This bit SHOULD be set to 0 and MUST be ignored by the server.
FILE_DISALLOW_EXCLUSIVE
0x00020000
This bit SHOULD be set to 0 and MUST be ignored by the server.
FILE_RESERVE_OPFILTER
0x00100000
This bit SHOULD be set to 0 and the server MUST fail the request with a STATUS_NOT_SUPPORTED error if this bit is set.<46>
FILE_OPEN_REPARSE_POINT
0x00200000
If the file or directory being opened is a reparse point, open the reparse point itself rather than the target that the reparse point references.
FILE_OPEN_NO_RECALL
0x00400000
In an HSM (Hierarchical Storage Management) environment, this flag means the file SHOULD NOT be recalled from tertiary storage such as tape. The recall can take several minutes. The caller can specify this flag to avoid those delays.
FILE_OPEN_FOR_FREE_SPACE_QUERY
0x00800000
Open file to query for free space. The client SHOULD set this to 0 and the server MUST ignore it.<47>
NameOffset (2 bytes): The offset, in bytes, from the beginning of the SMB2 header to the 8-byte aligned file name. If SMB2_FLAGS_DFS_OPERATIONS is set in the Flags field of the SMB2 header, the file name includes a prefix that will be processed during DFS name normalization as specified in section 3.3.5.9. Otherwise, the file name is relative to the share that is identified by the TreeId in the SMB2 header. The NameOffset field SHOULD be set to the offset of the Buffer field from the beginning of the SMB2 header. The file name (after DFS normalization if needed) MUST conform to the specification of a relative pathname in [MS-FSCC] section 2.1.5. A zero length file name indicates a request to open the root of the share.
NameLength (2 bytes): The length of the file name, in bytes. If no file name is provided, this field MUST be set to 0.
CreateContextsOffset (4 bytes): The offset, in bytes, from the beginning of the SMB2 header to the first 8-byte aligned SMB2_CREATE_CONTEXT structure in the request. If no SMB2_CREATE_CONTEXTs are being sent, this value MUST be 0.
CreateContextsLength (4 bytes): The length, in bytes, of the list of SMB2_CREATE_CONTEXT structures sent in this request.
Buffer (variable): A variable-length buffer that contains the Unicode file name and create context list, as defined by NameOffset, NameLength, CreateContextsOffset, and CreateContextsLength. In the request, the Buffer field MUST be at least one byte in length.