1a90cf9f2SGordon Ross /* 2a90cf9f2SGordon Ross * This file and its contents are supplied under the terms of the 3a90cf9f2SGordon Ross * Common Development and Distribution License ("CDDL"), version 1.0. 4a90cf9f2SGordon Ross * You may only use this file in accordance with the terms of version 5a90cf9f2SGordon Ross * 1.0 of the CDDL. 6a90cf9f2SGordon Ross * 7a90cf9f2SGordon Ross * A full copy of the text of the CDDL should have accompanied this 8a90cf9f2SGordon Ross * source. A copy of the CDDL is also available via the Internet at 9a90cf9f2SGordon Ross * http://www.illumos.org/license/CDDL. 10a90cf9f2SGordon Ross */ 11a90cf9f2SGordon Ross 12a90cf9f2SGordon Ross /* 13dfa42fabSMatt Barden * Copyright 2018 Nexenta Systems, Inc. All rights reserved. 14*a4568e19SAlexander Stetsenko * Copyright 2022 RackTop Systems, Inc. 15a90cf9f2SGordon Ross */ 16a90cf9f2SGordon Ross 17a90cf9f2SGordon Ross #ifndef _SMB_SMB2_H 18a90cf9f2SGordon Ross #define _SMB_SMB2_H 19a90cf9f2SGordon Ross 20a90cf9f2SGordon Ross #ifdef __cplusplus 21a90cf9f2SGordon Ross extern "C" { 22a90cf9f2SGordon Ross #endif 23a90cf9f2SGordon Ross 24a90cf9f2SGordon Ross #define SMB2_PROTOCOL_ID { 0xFE, 'S', 'M', 'B' } 25a90cf9f2SGordon Ross #define SMB2_HDR_SIZE 64 261160dcf7SMatt Barden #define SMB3_TFORM_HDR_SIZE 52 271160dcf7SMatt Barden 281160dcf7SMatt Barden /* 291160dcf7SMatt Barden * Protocol ID as a 32-bit little-endian integer. 301160dcf7SMatt Barden */ 311160dcf7SMatt Barden #define SMB2_PROTOCOL_MAGIC 0x424d53fe 321160dcf7SMatt Barden #define SMB3_ENCRYPTED_MAGIC 0x424d53fd 33a90cf9f2SGordon Ross 34a90cf9f2SGordon Ross /* 35a90cf9f2SGordon Ross * SMB2 header command codes. 36a90cf9f2SGordon Ross * These are uint16_t on the wire. 37a90cf9f2SGordon Ross */ 38a90cf9f2SGordon Ross typedef enum { 39a90cf9f2SGordon Ross SMB2_NEGOTIATE = 0, 40a90cf9f2SGordon Ross SMB2_SESSION_SETUP, 41a90cf9f2SGordon Ross SMB2_LOGOFF, 42a90cf9f2SGordon Ross SMB2_TREE_CONNECT, 43a90cf9f2SGordon Ross SMB2_TREE_DISCONNECT, 44a90cf9f2SGordon Ross SMB2_CREATE, 45a90cf9f2SGordon Ross SMB2_CLOSE, 46a90cf9f2SGordon Ross SMB2_FLUSH, 47a90cf9f2SGordon Ross SMB2_READ, 48a90cf9f2SGordon Ross SMB2_WRITE, 49a90cf9f2SGordon Ross SMB2_LOCK, 50a90cf9f2SGordon Ross SMB2_IOCTL, 51a90cf9f2SGordon Ross SMB2_CANCEL, 52a90cf9f2SGordon Ross SMB2_ECHO, 53a90cf9f2SGordon Ross SMB2_QUERY_DIRECTORY, 54a90cf9f2SGordon Ross SMB2_CHANGE_NOTIFY, 55a90cf9f2SGordon Ross SMB2_QUERY_INFO, 56a90cf9f2SGordon Ross SMB2_SET_INFO, 57a90cf9f2SGordon Ross SMB2_OPLOCK_BREAK, 58a90cf9f2SGordon Ross /* 59a90cf9f2SGordon Ross * The above (oplock break) is the last real SMB2 op-code. 60a90cf9f2SGordon Ross * We use one more slot to represent invalid commands, and 61a90cf9f2SGordon Ross * the final enum value is used for array sizes. Keep last! 62a90cf9f2SGordon Ross */ 63a90cf9f2SGordon Ross SMB2_INVALID_CMD, 64a90cf9f2SGordon Ross SMB2__NCMDS 65a90cf9f2SGordon Ross } SMB2_cmd_code; 66a90cf9f2SGordon Ross 67a90cf9f2SGordon Ross /* 68a90cf9f2SGordon Ross * SMB2 header flags. 69a90cf9f2SGordon Ross */ 70a90cf9f2SGordon Ross 71a90cf9f2SGordon Ross /* 72a90cf9f2SGordon Ross * SERVER_TO_REDIR 73a90cf9f2SGordon Ross * When set, indicates the message is a response rather than 74a90cf9f2SGordon Ross * a request. This MUST be set on responses sent from the 75a90cf9f2SGordon Ross * server to the client, and MUST NOT be set on requests 76a90cf9f2SGordon Ross * sent from the client to the server. 77a90cf9f2SGordon Ross */ 78a90cf9f2SGordon Ross #define SMB2_FLAGS_SERVER_TO_REDIR 0x00000001 79a90cf9f2SGordon Ross 80a90cf9f2SGordon Ross /* 81a90cf9f2SGordon Ross * ASYNC_COMMAND 82a90cf9f2SGordon Ross * When set, indicates that this is an ASYNC SMB2 header. 83a90cf9f2SGordon Ross * Always set for headers of the form described in this 84a90cf9f2SGordon Ross * section. 85a90cf9f2SGordon Ross */ 86a90cf9f2SGordon Ross #define SMB2_FLAGS_ASYNC_COMMAND 0x00000002 87a90cf9f2SGordon Ross 88a90cf9f2SGordon Ross /* 89a90cf9f2SGordon Ross * RELATED_OPERATIONS 90a90cf9f2SGordon Ross * When set in an SMB2 request, indicates that this request 91a90cf9f2SGordon Ross * is a related operation in a compounded request chain. 92a90cf9f2SGordon Ross * [MS-SMB2 sec. 3.2.4.1.4] 93a90cf9f2SGordon Ross * 94a90cf9f2SGordon Ross * When set in an SMB2 compound response, indicates that 95a90cf9f2SGordon Ross * the request corresponding to this response was part of a 96a90cf9f2SGordon Ross * related operation in a compounded request chain. 97a90cf9f2SGordon Ross * [MS-SMB2 sec. 3.3.5.2.7.2] 98a90cf9f2SGordon Ross */ 99a90cf9f2SGordon Ross #define SMB2_FLAGS_RELATED_OPERATIONS 0x00000004 100a90cf9f2SGordon Ross 101a90cf9f2SGordon Ross /* 102a90cf9f2SGordon Ross * SIGNED 103a90cf9f2SGordon Ross * When set, indicates that this packet has been signed. 104a90cf9f2SGordon Ross * [MS-SMB2 3.1.5.1] 105a90cf9f2SGordon Ross */ 106a90cf9f2SGordon Ross #define SMB2_FLAGS_SIGNED 0x00000008 107a90cf9f2SGordon Ross 108a90cf9f2SGordon Ross /* 109a90cf9f2SGordon Ross * [MS-SMB2] 3.2.5.3.1 The SessionKey MUST be set to the 110a90cf9f2SGordon Ross * first 16 bytes of the cryptographic key from GSSAPI. 111a90cf9f2SGordon Ross * (Padded with zeros if the GSSAPI key is shorter.) 112a90cf9f2SGordon Ross */ 113a90cf9f2SGordon Ross #define SMB2_SESSION_KEY_LEN 16 114a90cf9f2SGordon Ross 115a90cf9f2SGordon Ross /* 116a90cf9f2SGordon Ross * DFS_OPERATIONS 117a90cf9f2SGordon Ross * When set, indicates that this command is a Distributed 118a90cf9f2SGordon Ross * File System (DFS) operation. [MS-SMB2 3.3.5.9] 119a90cf9f2SGordon Ross */ 120a90cf9f2SGordon Ross #define SMB2_FLAGS_DFS_OPERATIONS 0x10000000 121a90cf9f2SGordon Ross 122a90cf9f2SGordon Ross /* 123a90cf9f2SGordon Ross * REPLAY_OPERATION 124a90cf9f2SGordon Ross * This flag is only valid for the SMB 3.0 dialect. When set, 125a90cf9f2SGordon Ross * it indicates that this command is a replay operation. 126a90cf9f2SGordon Ross * The client MUST ignore this bit on receipt. 127a90cf9f2SGordon Ross */ 128a90cf9f2SGordon Ross #define SMB2_FLAGS_REPLAY_OPERATION 0x20000000 129a90cf9f2SGordon Ross 130a90cf9f2SGordon Ross /* 131a90cf9f2SGordon Ross * SMB2 Netgotiate [MS-SMB2 2.2.3] 132a90cf9f2SGordon Ross */ 133a90cf9f2SGordon Ross 134a90cf9f2SGordon Ross #define SMB2_NEGOTIATE_SIGNING_ENABLED 0x01 135a90cf9f2SGordon Ross #define SMB2_NEGOTIATE_SIGNING_REQUIRED 0x02 136a90cf9f2SGordon Ross 137a90cf9f2SGordon Ross #define SMB2_CAP_DFS 0x00000001 138a90cf9f2SGordon Ross 139a90cf9f2SGordon Ross /* Added with SMB2.1 */ 140a90cf9f2SGordon Ross #define SMB2_CAP_DFS 0x00000001 141a90cf9f2SGordon Ross #define SMB2_CAP_LEASING 0x00000002 142a90cf9f2SGordon Ross /* 143a90cf9f2SGordon Ross * LARGE_MTU: 144a90cf9f2SGordon Ross * When set, indicates that the client supports multi-credit operations. 145a90cf9f2SGordon Ross */ 146a90cf9f2SGordon Ross #define SMB2_CAP_LARGE_MTU 0x00000004 147a90cf9f2SGordon Ross 148a90cf9f2SGordon Ross /* Added with SMB3.0 */ 149a90cf9f2SGordon Ross #define SMB2_CAP_MULTI_CHANNEL 0x00000008 150a90cf9f2SGordon Ross #define SMB2_CAP_PERSISTENT_HANDLES 0x00000010 151a90cf9f2SGordon Ross #define SMB2_CAP_DIRECTORY_LEASING 0x00000020 152a90cf9f2SGordon Ross #define SMB2_CAP_ENCRYPTION 0x00000040 153a90cf9f2SGordon Ross 154a90cf9f2SGordon Ross /* SMB2 session flags */ 155a90cf9f2SGordon Ross #define SMB2_SESSION_FLAG_IS_GUEST 0x0001 156a90cf9f2SGordon Ross #define SMB2_SESSION_FLAG_IS_NULL 0x0002 157a90cf9f2SGordon Ross #define SMB2_SESSION_FLAG_ENCRYPT_DATA 0x0004 158a90cf9f2SGordon Ross 159c51c88bdSMatt Barden /* 160c51c88bdSMatt Barden * Client wants to bind an existing session to a new connection 161c51c88bdSMatt Barden */ 162c51c88bdSMatt Barden #define SMB2_SESSION_FLAG_BINDING 0x01 163c51c88bdSMatt Barden 164a90cf9f2SGordon Ross /* 165a90cf9f2SGordon Ross * SMB2 Tree connect, disconnect 166a90cf9f2SGordon Ross */ 167a90cf9f2SGordon Ross 168a90cf9f2SGordon Ross /* SMB2 sharetype flags */ 169a90cf9f2SGordon Ross #define SMB2_SHARE_TYPE_DISK 0x1 170a90cf9f2SGordon Ross #define SMB2_SHARE_TYPE_PIPE 0x2 171a90cf9f2SGordon Ross #define SMB2_SHARE_TYPE_PRINT 0x3 172a90cf9f2SGordon Ross 173a90cf9f2SGordon Ross /* SMB2 share flags */ 174a90cf9f2SGordon Ross #define SMB2_SHAREFLAG_MANUAL_CACHING 0x00000000 175a90cf9f2SGordon Ross #define SMB2_SHAREFLAG_AUTO_CACHING 0x00000010 176a90cf9f2SGordon Ross #define SMB2_SHAREFLAG_VDO_CACHING 0x00000020 177a90cf9f2SGordon Ross #define SMB2_SHAREFLAG_NO_CACHING 0x00000030 178a90cf9f2SGordon Ross #define SMB2_SHAREFLAG_DFS 0x00000001 179a90cf9f2SGordon Ross #define SMB2_SHAREFLAG_DFS_ROOT 0x00000002 180a90cf9f2SGordon Ross #define SMB2_SHAREFLAG_RESTRICT_EXCLUSIVE_OPENS 0x00000100 181a90cf9f2SGordon Ross #define SMB2_SHAREFLAG_FORCE_SHARED_DELETE 0x00000200 182a90cf9f2SGordon Ross #define SMB2_SHAREFLAG_ALLOW_NAMESPACE_CACHING 0x00000400 183a90cf9f2SGordon Ross #define SMB2_SHAREFLAG_ACCESS_BASED_DIRECTORY_ENUM 0x00000800 184a90cf9f2SGordon Ross #define SMB2_SHAREFLAG_FORCE_LEVELII_OPLOCK 0x00001000 185a90cf9f2SGordon Ross /* SMB 3.0 */ 186a90cf9f2SGordon Ross #define SMB2_SHAREFLAG_ENABLE_HASH_V1 0x00002000 187a90cf9f2SGordon Ross #define SMB2_SHAREFLAG_ENABLE_HASH_V2 0x00004000 188a90cf9f2SGordon Ross #define SMB2_SHAREFLAG_ENCRYPT_DATA 0x00008000 189a90cf9f2SGordon Ross 190a90cf9f2SGordon Ross /* SMB2 share capabilities */ 191a90cf9f2SGordon Ross #define SMB2_SHARE_CAP_DFS 0x00000008 192a90cf9f2SGordon Ross /* SMB 3.0 */ 193a90cf9f2SGordon Ross #define SMB2_SHARE_CAP_CONTINUOUS_AVAILABILITY 0x00000010 194a90cf9f2SGordon Ross #define SMB2_SHARE_CAP_SCALEOUT 0x00000020 195a90cf9f2SGordon Ross #define SMB2_SHARE_CAP_CLUSTER 0x00000040 196a90cf9f2SGordon Ross 197a90cf9f2SGordon Ross /* 198a90cf9f2SGordon Ross * SMB2 Create (open) 199a90cf9f2SGordon Ross */ 200a90cf9f2SGordon Ross 20194047d49SGordon Ross /* 20294047d49SGordon Ross * SMB2 requested oplock levels 20394047d49SGordon Ross * Corresponds to ntifs.h OPLOCK_LEVEL_... but NOT the same! 20494047d49SGordon Ross */ 205a90cf9f2SGordon Ross #define SMB2_OPLOCK_LEVEL_NONE 0x00 206a90cf9f2SGordon Ross #define SMB2_OPLOCK_LEVEL_II 0x01 207a90cf9f2SGordon Ross #define SMB2_OPLOCK_LEVEL_EXCLUSIVE 0x08 208a90cf9f2SGordon Ross #define SMB2_OPLOCK_LEVEL_BATCH 0x09 209a90cf9f2SGordon Ross #define SMB2_OPLOCK_LEVEL_LEASE 0xFF 210a90cf9f2SGordon Ross 21194047d49SGordon Ross /* 21294047d49SGordon Ross * SMB2 create request lease "type" 21394047d49SGordon Ross * Note: Same as ntifs.h OPLOCK_LEVEL_CACHE... 21494047d49SGordon Ross */ 21594047d49SGordon Ross #define SMB2_LEASE_NONE 0x00 21694047d49SGordon Ross #define SMB2_LEASE_READ_CACHING 0x01 21794047d49SGordon Ross #define SMB2_LEASE_HANDLE_CACHING 0x02 21894047d49SGordon Ross #define SMB2_LEASE_WRITE_CACHING 0x04 21994047d49SGordon Ross 22094047d49SGordon Ross /* SMB2 create lease flags */ 22194047d49SGordon Ross #define SMB2_LEASE_FLAG_BREAK_IN_PROGRESS 0x00000002 22294047d49SGordon Ross #define SMB2_LEASE_FLAG_PARENT_LEASE_KEY_SET 0x00000004 22394047d49SGordon Ross 224a90cf9f2SGordon Ross /* SMB2 impersonation levels */ 225a90cf9f2SGordon Ross #define SMB2_IMPERSONATION_ANONYMOUS 0x00 226a90cf9f2SGordon Ross #define SMB2_IMPERSONATION_IDENTIFICATION 0x01 227a90cf9f2SGordon Ross #define SMB2_IMPERSONATION_IMPERSONATION 0x02 228a90cf9f2SGordon Ross #define SMB2_IMPERSONATION_DELEGATE 0x03 229a90cf9f2SGordon Ross 230a90cf9f2SGordon Ross /* 231a90cf9f2SGordon Ross * Note: ShareAccess, CreateDispositon, CreateOptions, 232a90cf9f2SGordon Ross * all use the same definitions as SMB1 (from MS-FSA). 233a90cf9f2SGordon Ross * Ditto FileAccess flags (as with ACLs) 234a90cf9f2SGordon Ross */ 235a90cf9f2SGordon Ross 236a90cf9f2SGordon Ross /* SMB2 Create Context tags */ 237a90cf9f2SGordon Ross 238a90cf9f2SGordon Ross #define SMB2_CREATE_EA_BUFFER 0x45787441 /* ("ExtA") */ 239a90cf9f2SGordon Ross /* 240a90cf9f2SGordon Ross * The data contains the extended attributes 241a90cf9f2SGordon Ross * that MUST be stored on the created file. 242a90cf9f2SGordon Ross * This value MUST NOT be set for named 243a90cf9f2SGordon Ross * pipes and print files. 244a90cf9f2SGordon Ross */ 245a90cf9f2SGordon Ross 246a90cf9f2SGordon Ross #define SMB2_CREATE_SD_BUFFER 0x53656344 /* ("SecD") */ 247a90cf9f2SGordon Ross /* 248a90cf9f2SGordon Ross * The data contains a security descriptor that 249a90cf9f2SGordon Ross * MUST be stored on the created file. 250a90cf9f2SGordon Ross * This value MUST NOT be set for named 251a90cf9f2SGordon Ross * pipes and print files. 252a90cf9f2SGordon Ross */ 253a90cf9f2SGordon Ross 254a90cf9f2SGordon Ross #define SMB2_CREATE_DURABLE_HANDLE_REQUEST 0x44486e51 /* ("DHnQ") */ 255a90cf9f2SGordon Ross /* The client is requesting the open to be durable */ 256a90cf9f2SGordon Ross 257a90cf9f2SGordon Ross #define SMB2_CREATE_DURABLE_HANDLE_RECONNECT 0x44486e43 /* ("DHnC") */ 258a90cf9f2SGordon Ross /* 259a90cf9f2SGordon Ross * The client is requesting to reconnect to a 260a90cf9f2SGordon Ross * durable open after being disconnected 261a90cf9f2SGordon Ross */ 262a90cf9f2SGordon Ross 263a90cf9f2SGordon Ross #define SMB2_CREATE_ALLOCATION_SIZE 0x416c5369 /* ("AISi") */ 264a90cf9f2SGordon Ross /* 265a90cf9f2SGordon Ross * The data contains the required allocation 266a90cf9f2SGordon Ross * size of the newly created file. 267a90cf9f2SGordon Ross */ 268a90cf9f2SGordon Ross 269a90cf9f2SGordon Ross #define SMB2_CREATE_QUERY_MAXIMAL_ACCESS_REQ 0x4d784163 /* ("MxAc") */ 270a90cf9f2SGordon Ross /* 271a90cf9f2SGordon Ross * The client is requesting that the server 272a90cf9f2SGordon Ross * return maximal access information. 273a90cf9f2SGordon Ross */ 274a90cf9f2SGordon Ross 275a90cf9f2SGordon Ross #define SMB2_CREATE_TIMEWARP_TOKEN 0x54577270 /* ("TWrp") */ 276a90cf9f2SGordon Ross /* 277a90cf9f2SGordon Ross * The client is requesting that the server 278a90cf9f2SGordon Ross * open an earlier version of the file identified 279a90cf9f2SGordon Ross * by the provided time stamp. 280a90cf9f2SGordon Ross */ 281a90cf9f2SGordon Ross 282a90cf9f2SGordon Ross #define SMB2_CREATE_QUERY_ON_DISK_ID 0x51466964 /* ("QFid") */ 283a90cf9f2SGordon Ross /* 284a90cf9f2SGordon Ross * The client is requesting that the server return a 32-byte 285a90cf9f2SGordon Ross * opaque BLOB that uniquely identifies the file being opened 286a90cf9f2SGordon Ross * on disk. No data is passed to the server by the client. 287a90cf9f2SGordon Ross */ 288a90cf9f2SGordon Ross 289811599a4SMatt Barden #define SMB2_CREATE_DURABLE_HANDLE_REQUEST_V2 0x44483251 /* ("DH2Q") */ 290811599a4SMatt Barden /* 291811599a4SMatt Barden * The client is requesting the open to be durable. 292811599a4SMatt Barden * This value is only supported for the SMB 3.x dialect family. 293811599a4SMatt Barden */ 294811599a4SMatt Barden 295811599a4SMatt Barden #define SMB2_CREATE_DURABLE_HANDLE_RECONNECT_V2 0x44483243 /* ("DH2C") */ 296811599a4SMatt Barden /* 297811599a4SMatt Barden * The client is requesting to reconnect to a 298811599a4SMatt Barden * durable open after being disconnected. 299811599a4SMatt Barden * This value is only supported for the SMB 3.x dialect family. 300811599a4SMatt Barden */ 301811599a4SMatt Barden 302811599a4SMatt Barden #define SMB2_DHANDLE_FLAG_PERSISTENT 0x00000002 303811599a4SMatt Barden /* A persistent handle is requested. */ 304811599a4SMatt Barden 305a90cf9f2SGordon Ross #define SMB2_CREATE_REQUEST_LEASE 0x52714c73 /* ("RqLs") */ 306a90cf9f2SGordon Ross /* 307a90cf9f2SGordon Ross * The client is requesting that the server return a lease. 308a90cf9f2SGordon Ross * This value is only supported for the SMB 2.1 and 3.0 dialects. 309a90cf9f2SGordon Ross */ 310a90cf9f2SGordon Ross 311d082c877SGordon Ross #define SMB2_CREATE_CTX_AAPL 0x4141504c /* ("AAPL") */ 312d082c877SGordon Ross /* 313d082c877SGordon Ross * Client is MacOS X looking for MacOS-specific extensions. 314d082c877SGordon Ross */ 315d082c877SGordon Ross 316a90cf9f2SGordon Ross /* 317a90cf9f2SGordon Ross * SMB2 Close 318a90cf9f2SGordon Ross */ 31994047d49SGordon Ross #define SMB2_CLOSE_FLAG_POSTQUERY_ATTRIB 0x0001 320a90cf9f2SGordon Ross 321dfa42fabSMatt Barden /* 322dfa42fabSMatt Barden * SMB2 Read 323dfa42fabSMatt Barden */ 324dfa42fabSMatt Barden #define SMB2_READFLAG_READ_UNBUFFERED 0x00000001 325dfa42fabSMatt Barden 326a90cf9f2SGordon Ross /* 327a90cf9f2SGordon Ross * SMB2 Write 328a90cf9f2SGordon Ross */ 329a90cf9f2SGordon Ross #define SMB2_WRITEFLAG_WRITE_THROUGH 0x00000001 330dfa42fabSMatt Barden #define SMB2_WRITEFLAG_WRITE_UNBUFFERED 0x00000002 331a90cf9f2SGordon Ross 332a90cf9f2SGordon Ross /* 333a90cf9f2SGordon Ross * SMB2 Lock Request 334a90cf9f2SGordon Ross */ 335a90cf9f2SGordon Ross 336a90cf9f2SGordon Ross /* SMB2 lock flags */ 337a90cf9f2SGordon Ross 338a90cf9f2SGordon Ross /* 339a90cf9f2SGordon Ross * SMB2_LOCKFLAG_SHARED_LOCK 340a90cf9f2SGordon Ross * The range MUST be locked shared, allowing other opens 341a90cf9f2SGordon Ross * to read from or take a shared lock on the range. All opens 342a90cf9f2SGordon Ross * MUST NOT be allowed to write within the range. Other 343a90cf9f2SGordon Ross * locks can be requested and taken on this range. 344a90cf9f2SGordon Ross */ 345a90cf9f2SGordon Ross #define SMB2_LOCKFLAG_SHARED_LOCK 0x00000001 346a90cf9f2SGordon Ross 347a90cf9f2SGordon Ross /* 348a90cf9f2SGordon Ross * SMB2_LOCKFLAG_EXCLUSIVE_LOCK 349a90cf9f2SGordon Ross * The range MUST be locked exclusive, not allowing other 350a90cf9f2SGordon Ross * opens to read, write, or lock within the range. 351a90cf9f2SGordon Ross */ 352a90cf9f2SGordon Ross #define SMB2_LOCKFLAG_EXCLUSIVE_LOCK 0x00000002 353a90cf9f2SGordon Ross 354a90cf9f2SGordon Ross /* 355a90cf9f2SGordon Ross * SMB2_LOCKFLAG_UNLOCK 356a90cf9f2SGordon Ross * The range MUST be unlocked from a previous lock taken 357a90cf9f2SGordon Ross * on this range. The unlock range MUST be identical to the 358a90cf9f2SGordon Ross * lock range. Sub-ranges cannot be unlocked. 359a90cf9f2SGordon Ross */ 360a90cf9f2SGordon Ross #define SMB2_LOCKFLAG_UNLOCK 0x00000004 361a90cf9f2SGordon Ross 362a90cf9f2SGordon Ross /* 363a90cf9f2SGordon Ross * SMB2_LOCKFLAG_FAIL_IMMEDIATELY 364a90cf9f2SGordon Ross * The lock operation MUST fail immediately if it conflicts 365a90cf9f2SGordon Ross * with an existing lock, instead of waiting for the range to 366a90cf9f2SGordon Ross * become available. This can be OR'ed with either of 367a90cf9f2SGordon Ross * shared_lock, exclusive_lock (nothing else). 368a90cf9f2SGordon Ross */ 369a90cf9f2SGordon Ross #define SMB2_LOCKFLAG_FAIL_IMMEDIATELY 0x00000010 370a90cf9f2SGordon Ross 371a90cf9f2SGordon Ross /* 372a90cf9f2SGordon Ross * SMB2 Ioctl Request 373a90cf9f2SGordon Ross */ 37494047d49SGordon Ross #define SMB2_0_IOCTL_IS_FSCTL 0x00000001 375a90cf9f2SGordon Ross 376a90cf9f2SGordon Ross 377a90cf9f2SGordon Ross /* 378a90cf9f2SGordon Ross * SMB2 Query Directory 379a90cf9f2SGordon Ross */ 380a90cf9f2SGordon Ross 381a90cf9f2SGordon Ross /* 382a90cf9f2SGordon Ross * SMB2 query directory info levels 383a90cf9f2SGordon Ross * Same as SMB1 (see ntifs.h) 384a90cf9f2SGordon Ross */ 385a90cf9f2SGordon Ross 386a90cf9f2SGordon Ross /* 387a90cf9f2SGordon Ross * SMB2 Query Directory Flags 388a90cf9f2SGordon Ross * (our own names for these - spec. used poor names) 389a90cf9f2SGordon Ross */ 390a90cf9f2SGordon Ross #define SMB2_QDIR_FLAG_RESTART 0x01 /* SMB2_RESTART_SCANS */ 391a90cf9f2SGordon Ross #define SMB2_QDIR_FLAG_SINGLE 0x02 /* SMB2_RETURN_SINGLE_ENTRY */ 392a90cf9f2SGordon Ross #define SMB2_QDIR_FLAG_INDEX 0x04 /* SMB2_INDEX_SPECIFIED */ 393a90cf9f2SGordon Ross #define SMB2_QDIR_FLAG_REOPEN 0x10 /* SMB2_REOPEN */ 394a90cf9f2SGordon Ross 395a90cf9f2SGordon Ross /* 396a90cf9f2SGordon Ross * SMB2 Query Info Request 397a90cf9f2SGordon Ross */ 398a90cf9f2SGordon Ross 399a90cf9f2SGordon Ross /* info type */ 400a90cf9f2SGordon Ross #define SMB2_0_INFO_FILE 0x01 401a90cf9f2SGordon Ross /* The file information is requested. */ 402a90cf9f2SGordon Ross #define SMB2_0_INFO_FILESYSTEM 0x02 403a90cf9f2SGordon Ross /* The underlying object store information is requested. */ 404a90cf9f2SGordon Ross #define SMB2_0_INFO_SECURITY 0x03 405a90cf9f2SGordon Ross /* The security information is requested. */ 406a90cf9f2SGordon Ross #define SMB2_0_INFO_QUOTA 0x04 407a90cf9f2SGordon Ross /* The underlying object store quota information is requested. */ 408a90cf9f2SGordon Ross 409a90cf9f2SGordon Ross /* 410a90cf9f2SGordon Ross * SMB2 Change Nofity Request 411a90cf9f2SGordon Ross */ 412a90cf9f2SGordon Ross #define SMB2_WATCH_TREE 0x00000001 413a90cf9f2SGordon Ross 41494047d49SGordon Ross /* SMB2 Oplock Break: lease break notification flags */ 41594047d49SGordon Ross #define SMB2_NOTIFY_BREAK_LEASE_FLAG_ACK_REQUIRED 0x01 41694047d49SGordon Ross 417dee7ba86SAlexander Stetsenko /* SMB3.1.1 the only pre-authentication hash */ 418dee7ba86SAlexander Stetsenko #define SMB3_HASH_SHA512 1 419dee7ba86SAlexander Stetsenko 420dee7ba86SAlexander Stetsenko /* SMB3.x encryption ciphers */ 421dee7ba86SAlexander Stetsenko #define SMB3_CIPHER_AES128_CCM 1 /* 3.0 */ 422dee7ba86SAlexander Stetsenko #define SMB3_CIPHER_AES128_GCM 2 /* 3.1.1 */ 423*a4568e19SAlexander Stetsenko #define SMB3_CIPHER_AES256_CCM 3 /* 3.1.1 */ 424*a4568e19SAlexander Stetsenko #define SMB3_CIPHER_AES256_GCM 4 /* 3.1.1 */ 425dee7ba86SAlexander Stetsenko 426a90cf9f2SGordon Ross #ifdef __cplusplus 427a90cf9f2SGordon Ross } 428a90cf9f2SGordon Ross #endif 429a90cf9f2SGordon Ross 430a90cf9f2SGordon Ross #endif /* _SMB_SMB2_H */ 431