xref: /illumos-gate/usr/src/uts/common/netsmb/smb2.h (revision adee6784)
1*adee6784SGordon Ross /*
2*adee6784SGordon Ross  * This file and its contents are supplied under the terms of the
3*adee6784SGordon Ross  * Common Development and Distribution License ("CDDL"), version 1.0.
4*adee6784SGordon Ross  * You may only use this file in accordance with the terms of version
5*adee6784SGordon Ross  * 1.0 of the CDDL.
6*adee6784SGordon Ross  *
7*adee6784SGordon Ross  * A full copy of the text of the CDDL should have accompanied this
8*adee6784SGordon Ross  * source.  A copy of the CDDL is also available via the Internet at
9*adee6784SGordon Ross  * http://www.illumos.org/license/CDDL.
10*adee6784SGordon Ross  */
11*adee6784SGordon Ross 
12*adee6784SGordon Ross /*
13*adee6784SGordon Ross  * Copyright 2018 Nexenta Systems, Inc.  All rights reserved.
14*adee6784SGordon Ross  */
15*adee6784SGordon Ross 
16*adee6784SGordon Ross #ifndef _NETSMB_SMB2_H
17*adee6784SGordon Ross #define	_NETSMB_SMB2_H
18*adee6784SGordon Ross 
19*adee6784SGordon Ross #ifdef __cplusplus
20*adee6784SGordon Ross extern "C" {
21*adee6784SGordon Ross #endif
22*adee6784SGordon Ross 
23*adee6784SGordon Ross #define	SMB2_PROTOCOL_ID	{ 0xFE, 'S', 'M', 'B' }
24*adee6784SGordon Ross #define	SMB2_HDR_SIZE	64
25*adee6784SGordon Ross #define	SMB2_HDRLEN	SMB2_HDR_SIZE
26*adee6784SGordon Ross 
27*adee6784SGordon Ross /*
28*adee6784SGordon Ross  * SMB2 header command codes.
29*adee6784SGordon Ross  * These are uint16_t on the wire.
30*adee6784SGordon Ross  */
31*adee6784SGordon Ross typedef enum {
32*adee6784SGordon Ross 	SMB2_NEGOTIATE = 0,
33*adee6784SGordon Ross 	SMB2_SESSION_SETUP,
34*adee6784SGordon Ross 	SMB2_LOGOFF,
35*adee6784SGordon Ross 	SMB2_TREE_CONNECT,
36*adee6784SGordon Ross 	SMB2_TREE_DISCONNECT,
37*adee6784SGordon Ross 	SMB2_CREATE,
38*adee6784SGordon Ross 	SMB2_CLOSE,
39*adee6784SGordon Ross 	SMB2_FLUSH,
40*adee6784SGordon Ross 	SMB2_READ,
41*adee6784SGordon Ross 	SMB2_WRITE,
42*adee6784SGordon Ross 	SMB2_LOCK,
43*adee6784SGordon Ross 	SMB2_IOCTL,
44*adee6784SGordon Ross 	SMB2_CANCEL,
45*adee6784SGordon Ross 	SMB2_ECHO,
46*adee6784SGordon Ross 	SMB2_QUERY_DIRECTORY,
47*adee6784SGordon Ross 	SMB2_CHANGE_NOTIFY,
48*adee6784SGordon Ross 	SMB2_QUERY_INFO,
49*adee6784SGordon Ross 	SMB2_SET_INFO,
50*adee6784SGordon Ross 	SMB2_OPLOCK_BREAK,
51*adee6784SGordon Ross 	/*
52*adee6784SGordon Ross 	 * The above (oplock break) is the last real SMB2 op-code.
53*adee6784SGordon Ross 	 * We use one more slot to represent invalid commands, and
54*adee6784SGordon Ross 	 * the final enum value is used for array sizes. Keep last!
55*adee6784SGordon Ross 	 */
56*adee6784SGordon Ross 	SMB2_INVALID_CMD,
57*adee6784SGordon Ross 	SMB2__NCMDS
58*adee6784SGordon Ross } SMB2_cmd_code;
59*adee6784SGordon Ross 
60*adee6784SGordon Ross /*
61*adee6784SGordon Ross  * SMB2 header flags.
62*adee6784SGordon Ross  */
63*adee6784SGordon Ross 
64*adee6784SGordon Ross /*
65*adee6784SGordon Ross  * SERVER_TO_REDIR
66*adee6784SGordon Ross  * When set, indicates the message is a response rather than
67*adee6784SGordon Ross  * a request. This MUST be set on responses sent from the
68*adee6784SGordon Ross  * server to the client, and MUST NOT be set on requests
69*adee6784SGordon Ross  * sent from the client to the server.
70*adee6784SGordon Ross  */
71*adee6784SGordon Ross #define	SMB2_FLAGS_SERVER_TO_REDIR	0x00000001
72*adee6784SGordon Ross 
73*adee6784SGordon Ross /*
74*adee6784SGordon Ross  * ASYNC_COMMAND
75*adee6784SGordon Ross  * When set, indicates that this is an ASYNC SMB2 header.
76*adee6784SGordon Ross  * Always set for headers of the form described in this
77*adee6784SGordon Ross  * section.
78*adee6784SGordon Ross  */
79*adee6784SGordon Ross #define	SMB2_FLAGS_ASYNC_COMMAND	0x00000002
80*adee6784SGordon Ross 
81*adee6784SGordon Ross /*
82*adee6784SGordon Ross  * RELATED_OPERATIONS
83*adee6784SGordon Ross  * When set in an SMB2 request, indicates that this request
84*adee6784SGordon Ross  * is a related operation in a compounded request chain.
85*adee6784SGordon Ross  * [MS-SMB2 sec. 3.2.4.1.4]
86*adee6784SGordon Ross  *
87*adee6784SGordon Ross  * When set in an SMB2 compound response, indicates that
88*adee6784SGordon Ross  * the request corresponding to this response was part of a
89*adee6784SGordon Ross  * related operation in a compounded request chain.
90*adee6784SGordon Ross  * [MS-SMB2 sec. 3.3.5.2.7.2]
91*adee6784SGordon Ross  */
92*adee6784SGordon Ross #define	SMB2_FLAGS_RELATED_OPERATIONS	0x00000004
93*adee6784SGordon Ross 
94*adee6784SGordon Ross /*
95*adee6784SGordon Ross  * SIGNED
96*adee6784SGordon Ross  * When set, indicates that this packet has been signed.
97*adee6784SGordon Ross  * [MS-SMB2 3.1.5.1]
98*adee6784SGordon Ross  */
99*adee6784SGordon Ross #define	SMB2_FLAGS_SIGNED	0x00000008
100*adee6784SGordon Ross 
101*adee6784SGordon Ross /*
102*adee6784SGordon Ross  * [MS-SMB2] 3.2.5.3.1 The SessionKey MUST be set to the
103*adee6784SGordon Ross  * first 16 bytes of the cryptographic key from GSSAPI.
104*adee6784SGordon Ross  * (Padded with zeros if the GSSAPI key is shorter.)
105*adee6784SGordon Ross  */
106*adee6784SGordon Ross #define	SMB2_SESSION_KEY_LEN	16
107*adee6784SGordon Ross 
108*adee6784SGordon Ross /*
109*adee6784SGordon Ross  * DFS_OPERATIONS
110*adee6784SGordon Ross  * When set, indicates that this command is a Distributed
111*adee6784SGordon Ross  * File System (DFS) operation.  [MS-SMB2 3.3.5.9]
112*adee6784SGordon Ross  */
113*adee6784SGordon Ross #define	SMB2_FLAGS_DFS_OPERATIONS	0x10000000
114*adee6784SGordon Ross 
115*adee6784SGordon Ross /*
116*adee6784SGordon Ross  * REPLAY_OPERATION
117*adee6784SGordon Ross  * This flag is only valid for the SMB 3.0 dialect. When set,
118*adee6784SGordon Ross  * it indicates that this command is a replay operation.
119*adee6784SGordon Ross  * The client MUST ignore this bit on receipt.
120*adee6784SGordon Ross  */
121*adee6784SGordon Ross #define	SMB2_FLAGS_REPLAY_OPERATION	0x20000000
122*adee6784SGordon Ross 
123*adee6784SGordon Ross /*
124*adee6784SGordon Ross  * SMB2 Netgotiate [MS-SMB2 2.2.3]
125*adee6784SGordon Ross  */
126*adee6784SGordon Ross 
127*adee6784SGordon Ross #define	SMB2_NEGOTIATE_SIGNING_ENABLED	0x01
128*adee6784SGordon Ross #define	SMB2_NEGOTIATE_SIGNING_REQUIRED	0x02
129*adee6784SGordon Ross 
130*adee6784SGordon Ross #define	SMB2_CAP_DFS			0x00000001
131*adee6784SGordon Ross 
132*adee6784SGordon Ross /* Added with SMB2.1 */
133*adee6784SGordon Ross #define	SMB2_CAP_DFS			0x00000001
134*adee6784SGordon Ross #define	SMB2_CAP_LEASING		0x00000002
135*adee6784SGordon Ross /*
136*adee6784SGordon Ross  * LARGE_MTU:
137*adee6784SGordon Ross  * When set, indicates that the client supports multi-credit operations.
138*adee6784SGordon Ross  */
139*adee6784SGordon Ross #define	SMB2_CAP_LARGE_MTU		0x00000004
140*adee6784SGordon Ross 
141*adee6784SGordon Ross /* Added with SMB3.0 */
142*adee6784SGordon Ross #define	SMB2_CAP_MULTI_CHANNEL		0x00000008
143*adee6784SGordon Ross #define	SMB2_CAP_PERSISTENT_HANDLES	0x00000010
144*adee6784SGordon Ross #define	SMB2_CAP_DIRECTORY_LEASING	0x00000020
145*adee6784SGordon Ross #define	SMB2_CAP_ENCRYPTION		0x00000040
146*adee6784SGordon Ross 
147*adee6784SGordon Ross /* SMB2 session flags */
148*adee6784SGordon Ross #define	SMB2_SESSION_FLAG_IS_GUEST	0x0001
149*adee6784SGordon Ross #define	SMB2_SESSION_FLAG_IS_NULL	0x0002
150*adee6784SGordon Ross #define	SMB2_SESSION_FLAG_ENCRYPT_DATA	0x0004
151*adee6784SGordon Ross 
152*adee6784SGordon Ross /*
153*adee6784SGordon Ross  * SMB2 Tree connect, disconnect
154*adee6784SGordon Ross  */
155*adee6784SGordon Ross 
156*adee6784SGordon Ross /* SMB2 sharetype flags */
157*adee6784SGordon Ross #define	SMB2_SHARE_TYPE_DISK		0x1
158*adee6784SGordon Ross #define	SMB2_SHARE_TYPE_PIPE		0x2
159*adee6784SGordon Ross #define	SMB2_SHARE_TYPE_PRINT		0x3
160*adee6784SGordon Ross 
161*adee6784SGordon Ross /* SMB2 share flags */
162*adee6784SGordon Ross #define	SMB2_SHAREFLAG_MANUAL_CACHING			0x00000000
163*adee6784SGordon Ross #define	SMB2_SHAREFLAG_AUTO_CACHING			0x00000010
164*adee6784SGordon Ross #define	SMB2_SHAREFLAG_VDO_CACHING			0x00000020
165*adee6784SGordon Ross #define	SMB2_SHAREFLAG_NO_CACHING			0x00000030
166*adee6784SGordon Ross #define	SMB2_SHAREFLAG_DFS				0x00000001
167*adee6784SGordon Ross #define	SMB2_SHAREFLAG_DFS_ROOT				0x00000002
168*adee6784SGordon Ross #define	SMB2_SHAREFLAG_RESTRICT_EXCLUSIVE_OPENS		0x00000100
169*adee6784SGordon Ross #define	SMB2_SHAREFLAG_FORCE_SHARED_DELETE		0x00000200
170*adee6784SGordon Ross #define	SMB2_SHAREFLAG_ALLOW_NAMESPACE_CACHING		0x00000400
171*adee6784SGordon Ross #define	SMB2_SHAREFLAG_ACCESS_BASED_DIRECTORY_ENUM	0x00000800
172*adee6784SGordon Ross #define	SMB2_SHAREFLAG_FORCE_LEVELII_OPLOCK		0x00001000
173*adee6784SGordon Ross /* SMB 3.0 */
174*adee6784SGordon Ross #define	SMB2_SHAREFLAG_ENABLE_HASH_V1			0x00002000
175*adee6784SGordon Ross #define	SMB2_SHAREFLAG_ENABLE_HASH_V2			0x00004000
176*adee6784SGordon Ross #define	SMB2_SHAREFLAG_ENCRYPT_DATA			0x00008000
177*adee6784SGordon Ross 
178*adee6784SGordon Ross /* SMB2 share capabilities */
179*adee6784SGordon Ross #define	SMB2_SHARE_CAP_DFS				0x00000008
180*adee6784SGordon Ross /* SMB 3.0 */
181*adee6784SGordon Ross #define	SMB2_SHARE_CAP_CONTINUOUS_AVAILABILITY		0x00000010
182*adee6784SGordon Ross #define	SMB2_SHARE_CAP_SCALEOUT				0x00000020
183*adee6784SGordon Ross #define	SMB2_SHARE_CAP_CLUSTER				0x00000040
184*adee6784SGordon Ross 
185*adee6784SGordon Ross /*
186*adee6784SGordon Ross  * SMB2 Create (open)
187*adee6784SGordon Ross  */
188*adee6784SGordon Ross 
189*adee6784SGordon Ross /* SMB2 requested oplock levels */
190*adee6784SGordon Ross #define	SMB2_OPLOCK_LEVEL_NONE				0x00
191*adee6784SGordon Ross #define	SMB2_OPLOCK_LEVEL_II				0x01
192*adee6784SGordon Ross #define	SMB2_OPLOCK_LEVEL_EXCLUSIVE			0x08
193*adee6784SGordon Ross #define	SMB2_OPLOCK_LEVEL_BATCH				0x09
194*adee6784SGordon Ross #define	SMB2_OPLOCK_LEVEL_LEASE				0xFF
195*adee6784SGordon Ross 
196*adee6784SGordon Ross /* SMB2 impersonation levels */
197*adee6784SGordon Ross #define	SMB2_IMPERSONATION_ANONYMOUS			0x00
198*adee6784SGordon Ross #define	SMB2_IMPERSONATION_IDENTIFICATION		0x01
199*adee6784SGordon Ross #define	SMB2_IMPERSONATION_IMPERSONATION		0x02
200*adee6784SGordon Ross #define	SMB2_IMPERSONATION_DELEGATE			0x03
201*adee6784SGordon Ross 
202*adee6784SGordon Ross /*
203*adee6784SGordon Ross  * Note: ShareAccess, CreateDispositon, CreateOptions,
204*adee6784SGordon Ross  * all use the same definitions as SMB1 (from MS-FSA).
205*adee6784SGordon Ross  * Ditto FileAccess flags (as with ACLs)
206*adee6784SGordon Ross  */
207*adee6784SGordon Ross 
208*adee6784SGordon Ross /* SMB2 Create Context tags */
209*adee6784SGordon Ross 
210*adee6784SGordon Ross #define	SMB2_CREATE_EA_BUFFER			0x45787441 /* ("ExtA") */
211*adee6784SGordon Ross /*
212*adee6784SGordon Ross  * The data contains the extended attributes
213*adee6784SGordon Ross  * that MUST be stored on the created file.
214*adee6784SGordon Ross  * This value MUST NOT be set for named
215*adee6784SGordon Ross  * pipes and print files.
216*adee6784SGordon Ross  */
217*adee6784SGordon Ross 
218*adee6784SGordon Ross #define	SMB2_CREATE_SD_BUFFER			0x53656344 /* ("SecD") */
219*adee6784SGordon Ross /*
220*adee6784SGordon Ross  * The data contains a security descriptor that
221*adee6784SGordon Ross  * MUST be stored on the created file.
222*adee6784SGordon Ross  * This value MUST NOT be set for named
223*adee6784SGordon Ross  * pipes and print files.
224*adee6784SGordon Ross  */
225*adee6784SGordon Ross 
226*adee6784SGordon Ross #define	SMB2_CREATE_DURABLE_HANDLE_REQUEST	0x44486e51 /* ("DHnQ") */
227*adee6784SGordon Ross /* The client is requesting the open to be durable */
228*adee6784SGordon Ross 
229*adee6784SGordon Ross #define	SMB2_CREATE_DURABLE_HANDLE_RECONNECT	0x44486e43 /* ("DHnC") */
230*adee6784SGordon Ross /*
231*adee6784SGordon Ross  * The client is requesting to reconnect to a
232*adee6784SGordon Ross  * durable open after being disconnected
233*adee6784SGordon Ross  */
234*adee6784SGordon Ross 
235*adee6784SGordon Ross #define	SMB2_CREATE_ALLOCATION_SIZE		0x416c5369 /* ("AISi") */
236*adee6784SGordon Ross /*
237*adee6784SGordon Ross  * The data contains the required allocation
238*adee6784SGordon Ross  * size of the newly created file.
239*adee6784SGordon Ross  */
240*adee6784SGordon Ross 
241*adee6784SGordon Ross #define	SMB2_CREATE_QUERY_MAXIMAL_ACCESS	0x4d784163 /* ("MxAc") */
242*adee6784SGordon Ross /*
243*adee6784SGordon Ross  * The client is requesting that the server
244*adee6784SGordon Ross  * return maximal access information.
245*adee6784SGordon Ross  */
246*adee6784SGordon Ross 
247*adee6784SGordon Ross #define	SMB2_CREATE_TIMEWARP_TOKEN		0x54577270 /* ("TWrp") */
248*adee6784SGordon Ross /*
249*adee6784SGordon Ross  * The client is requesting that the server
250*adee6784SGordon Ross  * open an earlier version of the file identified
251*adee6784SGordon Ross  * by the provided time stamp.
252*adee6784SGordon Ross  */
253*adee6784SGordon Ross 
254*adee6784SGordon Ross #define	SMB2_CREATE_QUERY_ON_DISK_ID		0x51466964 /* ("QFid") */
255*adee6784SGordon Ross /*
256*adee6784SGordon Ross  * The client is requesting that the server return a 32-byte
257*adee6784SGordon Ross  * opaque BLOB that uniquely identifies the file being opened
258*adee6784SGordon Ross  * on disk. No data is passed to the server by the client.
259*adee6784SGordon Ross  */
260*adee6784SGordon Ross 
261*adee6784SGordon Ross #define	SMB2_CREATE_REQUEST_LEASE		0x52714c73 /* ("RqLs") */
262*adee6784SGordon Ross /*
263*adee6784SGordon Ross  * The client is requesting that the server return a lease.
264*adee6784SGordon Ross  * This value is only supported for the SMB 2.1 and 3.0 dialects.
265*adee6784SGordon Ross  */
266*adee6784SGordon Ross 
267*adee6784SGordon Ross /* SMB2 create request lease */
268*adee6784SGordon Ross #define	SMB2_LEASE_NONE				0x00
269*adee6784SGordon Ross #define	SMB2_LEASE_READ_CACHING			0x01
270*adee6784SGordon Ross #define	SMB2_LEASE_HANDLE_CACHING		0x02
271*adee6784SGordon Ross #define	SMB2_LEASE_WRITE_CACHING		0x04
272*adee6784SGordon Ross 
273*adee6784SGordon Ross /* SMB2 lease break notification flags */
274*adee6784SGordon Ross #define	SMB2_NOTIFY_BREAK_LEASE_FLAG_ACK_REQUIRED  0x01
275*adee6784SGordon Ross 
276*adee6784SGordon Ross /*
277*adee6784SGordon Ross  * SMB2 Close
278*adee6784SGordon Ross  */
279*adee6784SGordon Ross #define	SMB2_CLOSE_FLAG_POSTQUERY_ATTRIB	0x0001
280*adee6784SGordon Ross 
281*adee6784SGordon Ross /*
282*adee6784SGordon Ross  * SMB2 Write
283*adee6784SGordon Ross  */
284*adee6784SGordon Ross #define	SMB2_WRITEFLAG_WRITE_THROUGH		0x00000001
285*adee6784SGordon Ross 
286*adee6784SGordon Ross /*
287*adee6784SGordon Ross  * SMB2 Lock Request
288*adee6784SGordon Ross  */
289*adee6784SGordon Ross 
290*adee6784SGordon Ross /* SMB2 lock flags */
291*adee6784SGordon Ross 
292*adee6784SGordon Ross /*
293*adee6784SGordon Ross  * SMB2_LOCKFLAG_SHARED_LOCK
294*adee6784SGordon Ross  * The range MUST be locked shared, allowing other opens
295*adee6784SGordon Ross  * to read from or take a shared lock on the range. All opens
296*adee6784SGordon Ross  * MUST NOT be allowed to write within the range. Other
297*adee6784SGordon Ross  * locks can be requested and taken on this range.
298*adee6784SGordon Ross  */
299*adee6784SGordon Ross #define	SMB2_LOCKFLAG_SHARED_LOCK	0x00000001
300*adee6784SGordon Ross 
301*adee6784SGordon Ross /*
302*adee6784SGordon Ross  * SMB2_LOCKFLAG_EXCLUSIVE_LOCK
303*adee6784SGordon Ross  * The range MUST be locked exclusive, not allowing other
304*adee6784SGordon Ross  * opens to read, write, or lock within the range.
305*adee6784SGordon Ross  */
306*adee6784SGordon Ross #define	SMB2_LOCKFLAG_EXCLUSIVE_LOCK	0x00000002
307*adee6784SGordon Ross 
308*adee6784SGordon Ross /*
309*adee6784SGordon Ross  * SMB2_LOCKFLAG_UNLOCK
310*adee6784SGordon Ross  * The range MUST be unlocked from a previous lock taken
311*adee6784SGordon Ross  * on this range. The unlock range MUST be identical to the
312*adee6784SGordon Ross  * lock range. Sub-ranges cannot be unlocked.
313*adee6784SGordon Ross  */
314*adee6784SGordon Ross #define	SMB2_LOCKFLAG_UNLOCK		0x00000004
315*adee6784SGordon Ross 
316*adee6784SGordon Ross /*
317*adee6784SGordon Ross  * SMB2_LOCKFLAG_FAIL_IMMEDIATELY
318*adee6784SGordon Ross  * The lock operation MUST fail immediately if it conflicts
319*adee6784SGordon Ross  * with an existing lock, instead of waiting for the range to
320*adee6784SGordon Ross  * become available.  This can be OR'ed with either of
321*adee6784SGordon Ross  * shared_lock, exclusive_lock (nothing else).
322*adee6784SGordon Ross  */
323*adee6784SGordon Ross #define	SMB2_LOCKFLAG_FAIL_IMMEDIATELY	0x00000010
324*adee6784SGordon Ross 
325*adee6784SGordon Ross /*
326*adee6784SGordon Ross  * SMB2 Ioctl Request
327*adee6784SGordon Ross  */
328*adee6784SGordon Ross #define	SMB2_IOCTL_IS_FSCTL		0x00000001
329*adee6784SGordon Ross 
330*adee6784SGordon Ross 
331*adee6784SGordon Ross /*
332*adee6784SGordon Ross  * SMB2 Query Directory
333*adee6784SGordon Ross  */
334*adee6784SGordon Ross 
335*adee6784SGordon Ross /*
336*adee6784SGordon Ross  * SMB2 query directory info levels
337*adee6784SGordon Ross  * Same as SMB1 (see ntifs.h)
338*adee6784SGordon Ross  */
339*adee6784SGordon Ross 
340*adee6784SGordon Ross /*
341*adee6784SGordon Ross  * SMB2 Query Directory Flags
342*adee6784SGordon Ross  * (our own names for these - spec. used poor names)
343*adee6784SGordon Ross  */
344*adee6784SGordon Ross #define	SMB2_QDIR_FLAG_RESTART		0x01 /* SMB2_RESTART_SCANS */
345*adee6784SGordon Ross #define	SMB2_QDIR_FLAG_SINGLE		0x02 /* SMB2_RETURN_SINGLE_ENTRY */
346*adee6784SGordon Ross #define	SMB2_QDIR_FLAG_INDEX		0x04 /* SMB2_INDEX_SPECIFIED */
347*adee6784SGordon Ross #define	SMB2_QDIR_FLAG_REOPEN		0x10 /* SMB2_REOPEN */
348*adee6784SGordon Ross 
349*adee6784SGordon Ross /*
350*adee6784SGordon Ross  * SMB2 Query Info Request
351*adee6784SGordon Ross  */
352*adee6784SGordon Ross 
353*adee6784SGordon Ross /* info type */
354*adee6784SGordon Ross #define	SMB2_0_INFO_FILE		0x01
355*adee6784SGordon Ross /* The file information is requested. */
356*adee6784SGordon Ross #define	SMB2_0_INFO_FILESYSTEM		0x02
357*adee6784SGordon Ross /* The underlying object store information is requested. */
358*adee6784SGordon Ross #define	SMB2_0_INFO_SECURITY		0x03
359*adee6784SGordon Ross /* The security information is requested. */
360*adee6784SGordon Ross #define	SMB2_0_INFO_QUOTA		0x04
361*adee6784SGordon Ross /* The underlying object store quota information is requested. */
362*adee6784SGordon Ross 
363*adee6784SGordon Ross /*
364*adee6784SGordon Ross  * MS-FSCC 2.5 FileSystem Information Classes.
365*adee6784SGordon Ross  * Also see MSDN for ZwQueryVolumeInformationFile.
366*adee6784SGordon Ross  */
367*adee6784SGordon Ross typedef enum _FS_INFORMATION_CLASS
368*adee6784SGordon Ross {
369*adee6784SGordon Ross 	FileFsVolumeInformation		= 1, /* Query */
370*adee6784SGordon Ross 	FileFsLabelInformation		= 2, /* Set */
371*adee6784SGordon Ross 	FileFsSizeInformation		= 3, /* Query */
372*adee6784SGordon Ross 	FileFsDeviceInformation		= 4, /* Query */
373*adee6784SGordon Ross 	FileFsAttributeInformation	= 5, /* Query */
374*adee6784SGordon Ross 	FileFsControlInformation	= 6, /* Query, Set */
375*adee6784SGordon Ross 	FileFsFullSizeInformation	= 7, /* Query */
376*adee6784SGordon Ross 	FileFsObjectIdInformation	= 8, /* Query, Set */
377*adee6784SGordon Ross 	FileFsDriverPathInformation	= 9 /* Query */
378*adee6784SGordon Ross } FS_INFORMATION_CLASS;
379*adee6784SGordon Ross 
380*adee6784SGordon Ross /*
381*adee6784SGordon Ross  * MS-FSCC 2.4 File Information Classes
382*adee6784SGordon Ross  */
383*adee6784SGordon Ross typedef enum _FILE_INFORMATION_CLASS
384*adee6784SGordon Ross {
385*adee6784SGordon Ross 	FileDirectoryInformation	= 1,
386*adee6784SGordon Ross 	FileFullDirectoryInformation	= 2,
387*adee6784SGordon Ross 	FileBothDirectoryInformation	= 3,
388*adee6784SGordon Ross 	FileBasicInformation		= 4,
389*adee6784SGordon Ross 	FileStandardInformation		= 5,
390*adee6784SGordon Ross 	FileInternalInformation		= 6,
391*adee6784SGordon Ross 	FileEaInformation		= 7,
392*adee6784SGordon Ross 	FileAccessInformation		= 8,
393*adee6784SGordon Ross 	FileNameInformation		= 9,
394*adee6784SGordon Ross 	FileRenameInformation		= 10,
395*adee6784SGordon Ross 	FileLinkInformation		= 11,
396*adee6784SGordon Ross 	FileNamesInformation		= 12,
397*adee6784SGordon Ross 	FileDispositionInformation	= 13,
398*adee6784SGordon Ross 	FilePositionInformation		= 14,
399*adee6784SGordon Ross 	FileFullEaInformation		= 15,
400*adee6784SGordon Ross 	FileModeInformation		= 16,
401*adee6784SGordon Ross 	FileAlignmentInformation	= 17,
402*adee6784SGordon Ross 	FileAllInformation		= 18,
403*adee6784SGordon Ross 	FileAllocationInformation	= 19,
404*adee6784SGordon Ross 	FileEndOfFileInformation	= 20,
405*adee6784SGordon Ross 	FileAlternateNameInformation	= 21,
406*adee6784SGordon Ross 	FileStreamInformation		= 22,
407*adee6784SGordon Ross 	FilePipeInformation		= 23,
408*adee6784SGordon Ross 	FilePipeLocalInformation	= 24,
409*adee6784SGordon Ross 	FilePipeRemoteInformation	= 25,
410*adee6784SGordon Ross 	FileMailslotQueryInformation	= 26,
411*adee6784SGordon Ross 	FileMailslotSetInformation	= 27,
412*adee6784SGordon Ross 	FileCompressionInformation	= 28,
413*adee6784SGordon Ross 	FileObjectIdInformation		= 29,
414*adee6784SGordon Ross 	FileMoveClusterInformation	= 31,
415*adee6784SGordon Ross 	FileQuotaInformation		= 32,
416*adee6784SGordon Ross 	FileReparsePointInformation	= 33,
417*adee6784SGordon Ross 	FileNetworkOpenInformation	= 34,
418*adee6784SGordon Ross 	FileAttributeTagInformation	= 35,
419*adee6784SGordon Ross 	FileTrackingInformation		= 36,
420*adee6784SGordon Ross 	FileIdBothDirectoryInformation	= 37,
421*adee6784SGordon Ross 	FileIdFullDirectoryInformation	= 38,
422*adee6784SGordon Ross 	FileValidDataLengthInformation	= 39,
423*adee6784SGordon Ross 	FileShortNameInformation	= 40,
424*adee6784SGordon Ross 	FileSfioReserveInformation	= 44,
425*adee6784SGordon Ross 	FileSfioVolumeInformation	= 45,
426*adee6784SGordon Ross 	FileHardLinkInformation		= 46,
427*adee6784SGordon Ross 	FileNormalizedNameInformation	= 48,
428*adee6784SGordon Ross 	FileIdGlobalTxDirectoryInformation = 50,
429*adee6784SGordon Ross 	FileStandardLinkInformation	= 54
430*adee6784SGordon Ross } FILE_INFORMATION_CLASS;
431*adee6784SGordon Ross 
432*adee6784SGordon Ross /*
433*adee6784SGordon Ross  * SMB2 Change Nofity Request
434*adee6784SGordon Ross  */
435*adee6784SGordon Ross #define	SMB2_WATCH_TREE			0x00000001
436*adee6784SGordon Ross 
437*adee6784SGordon Ross /*
438*adee6784SGordon Ross  * After here, added stuff from darwin
439*adee6784SGordon Ross  */
440*adee6784SGordon Ross #define	SMB2_TID_UNKNOWN	0
441*adee6784SGordon Ross #define	SMB2_FID_UNUSED		0xffffffffffffffff
442*adee6784SGordon Ross 
443*adee6784SGordon Ross /* smb2_durable_handle flags */
444*adee6784SGordon Ross typedef enum _SMB2_DURABLE_HANDLE_FLAGS
445*adee6784SGordon Ross {
446*adee6784SGordon Ross 	SMB2_DURABLE_HANDLE_REQUEST = 0x0001,
447*adee6784SGordon Ross 	SMB2_DURABLE_HANDLE_RECONNECT = 0x0002,
448*adee6784SGordon Ross 	SMB2_DURABLE_HANDLE_GRANTED = 0x0004,
449*adee6784SGordon Ross 	SMB2_LEASE_GRANTED = 0x0008
450*adee6784SGordon Ross } _SMB2_DURABLE_HANDLE_FLAGS;
451*adee6784SGordon Ross 
452*adee6784SGordon Ross struct smb2_durable_handle {
453*adee6784SGordon Ross 	uint64_t fid;	/* SMBFID to reconnect in durable handle reconnect */
454*adee6784SGordon Ross 	uint64_t flags;
455*adee6784SGordon Ross 	uint64_t lease_key_hi;	/* atomic increment number */
456*adee6784SGordon Ross 	uint64_t lease_key_low;	/* node hash value */
457*adee6784SGordon Ross 	uint32_t lease_state;
458*adee6784SGordon Ross 	uint32_t pad;
459*adee6784SGordon Ross };
460*adee6784SGordon Ross 
461*adee6784SGordon Ross #ifdef __cplusplus
462*adee6784SGordon Ross }
463*adee6784SGordon Ross #endif
464*adee6784SGordon Ross 
465*adee6784SGordon Ross #endif /* _NETSMB_SMB2_H */
466