3882 Remove xmod & friends
[illumos-gate.git] / usr / src / uts / common / smbsrv / smb.h
blob59e056a52e0bf3e4df113d439c6f978151685631
1 /*
2 * CDDL HEADER START
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License (the "License").
6 * You may not use this file except in compliance with the License.
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 * or http://www.opensolaris.org/os/licensing.
10 * See the License for the specific language governing permissions
11 * and limitations under the License.
13 * When distributing Covered Code, include this CDDL HEADER in each
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 * If applicable, add the following below this CDDL HEADER, with the
16 * fields enclosed by brackets "[]" replaced with your own identifying
17 * information: Portions Copyright [yyyy] [name of copyright owner]
19 * CDDL HEADER END
23 * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
26 #ifndef _SMBSRV_SMB_H
27 #define _SMBSRV_SMB_H
31 * SMB definitions and interfaces, mostly defined in the SMB and CIFS specs.
33 #ifdef _KERNEL
34 #include <sys/types.h>
35 #endif
36 #include <smbsrv/string.h>
37 #include <smbsrv/msgbuf.h>
39 #include <smb/ntstatus.h>
40 #include <smb/nterror.h>
41 #include <smb/lmerr.h>
42 #include <smb/doserror.h>
43 #include <smbsrv/ntaccess.h>
46 * Macintosh Extensions for CIFS
48 #include <smbsrv/mac_cifs.h>
51 * NT Installable File System (IFS) interface.
53 #include <smbsrv/ntifs.h>
55 #ifdef __cplusplus
56 extern "C" {
57 #endif
60 * The msgbuf format and length of an SMB header.
62 #define SMB_HEADER_DOS_FMT "Mbbbwbww10.wwww"
63 #define SMB_HEADER_NT_FMT "Mblbww#c2.wwww"
64 #define SMB_HEADER_LEN 32
65 #define SMB_SIG_SIZE 8 /* SMB signature size */
67 #define SMB_HEADER_ED_FMT "Mbbbwbww8c2.wwww"
68 #define SMB_HEADER_ED_LEN (4+1+1+1+2+1+2+12+2+2+2+2)
69 #define SMB_TRANSHDR_ED_FMT "wwwwb.wl2.wwwwb."
70 #define SMB_TRANSHDR_ED_LEN (2+2+2+2+1+1+2+4+2+2+2+2+2+1+1)
71 #define SMB_TRANSSHDR_ED_FMT "wwwwwwwww"
72 #define SMB_TRANSSHDR_ED_LEN (2+2+2+2+2+2+2+2)
73 #define SMB_TRANS2SHDR_ED_FMT "wwwwwwwww"
74 #define SMB_TRANS2SHDR_ED_LEN (2+2+2+2+2+2+2+2+2)
75 /* There is something wrong with this. Should be 38 bytes. It is 37 bytes */
76 #define SMB_NT_TRANSHDR_ED_FMT "b2.llllllllbw"
77 #define SMB_NT_TRANSHDR_ED_LEN (1+2+4+4+4+4+4+4+4+4+1+2)
80 * CIFS definition for the SMB header (CIFS Section 3.2). Note that the
81 * pid_high field is not documented in the 1997 CIFS specificaction. This
82 * is a decoded or memory-based definition, which may be padded to align
83 * its elements on word boundaries. See smb_hdrbuf_t for the network
84 * ready structure.
86 typedef struct smb_hdr {
87 uint8_t protocol[4];
88 uint8_t command;
90 union {
91 struct {
92 uint8_t error_class;
93 uint8_t reserved;
94 uint16_t error;
95 } dos_error;
96 uint32_t ntstatus;
97 } status;
99 uint8_t flags;
100 uint16_t flags2;
101 uint16_t pid_high;
103 union {
104 uint16_t pad[5];
105 struct {
106 uint16_t reserved;
107 uint8_t security_sig[SMB_SIG_SIZE];
108 } extra;
109 } extra;
111 uint16_t tid;
112 uint16_t pid;
113 uint16_t uid;
114 uint16_t mid;
115 } smb_hdr_t;
118 * Encoded or packed SMB header in network ready format.
120 typedef struct smb_hdrbuf {
121 uint8_t hdr[SMB_HEADER_LEN];
122 } smb_hdrbuf_t;
125 * Protocol magic value as a 32-bit. This will be 0xff 0x53 0x4d 0x42 on
126 * the wire.
129 #define SMB_PROTOCOL_MAGIC 0x424d53ff
132 * Time and date encoding (CIFS Section 3.6). The date is encoded such
133 * that the year has a range of 0-119, which represents 1980-2099. The
134 * month range is 1-12, and the day range is 1-31.
136 typedef struct smb_date {
137 uint16_t day : 5;
138 uint16_t month : 4;
139 uint16_t year : 7;
140 } smb_date_t;
143 * The hours range is 0-23, the minutes range is 0-59 and the two_sec
144 * range is 0-29.
146 typedef struct smb_time {
147 uint16_t two_sec : 5;
148 uint16_t minutes : 6;
149 uint16_t hours : 5;
150 } smb_time_t;
153 * This is a 64-bit signed absolute time representing 100ns increments.
154 * A positive value represents the absolute time since 1601AD. A
155 * negative value represents a context specific relative time.
157 typedef struct smb_time2 {
158 uint32_t low_time;
159 int32_t high_time;
160 } smb_time2_t;
163 * The number of seconds since Jan 1, 1970, 00:00:00.0.
165 typedef uint32_t smb_utime_t;
167 #define SMB_LM_NEGOTIATE_WORDCNT 13
168 #define SMB_NT_NEGOTIATE_WORDCNT 17
170 #define SMB_NAME83_EXTLEN 3
171 #define SMB_NAME83_BASELEN 8
172 #define SMB_NAME83_LEN 12
174 /* Share types */
175 #ifndef _SHARE_TYPES_DEFINED_
176 #define _SHARE_TYPES_DEFINED_
177 #define STYPE_DISKTREE 0x00000000
178 #define STYPE_PRINTQ 0x00000001
179 #define STYPE_DEVICE 0x00000002
180 #define STYPE_IPC 0x00000003
181 #define STYPE_MASK 0x0000000F
182 #define STYPE_DFS 0x00000064
183 #define STYPE_HIDDEN 0x80000000
184 #define STYPE_SPECIAL 0x80000000
185 #endif /* _SHARE_TYPES_DEFINED_ */
187 #define STYPE_ISDSK(S) (((S) & STYPE_MASK) == STYPE_DISKTREE)
188 #define STYPE_ISPRN(S) (((S) & STYPE_MASK) == STYPE_PRINTQ)
189 #define STYPE_ISDEV(S) (((S) & STYPE_MASK) == STYPE_DEVICE)
190 #define STYPE_ISIPC(S) (((S) & STYPE_MASK) == STYPE_IPC)
193 * NtCreateAndX and NtTransactCreate creation flags: defined in CIFS
194 * section 4.2.2
196 * Creation Flag Name Value Description
197 * ========================== ====== ==================================
198 * NT_CREATE_REQUEST_OPLOCK 0x02 Level I oplock requested
199 * NT_CREATE_REQUEST_OPBATCH 0x04 Batch oplock requested
200 * NT_CREATE_OPEN_TARGET_DIR 0x08 Target for open is a directory
202 #define NT_CREATE_FLAG_REQUEST_OPLOCK 0x02
203 #define NT_CREATE_FLAG_REQUEST_OPBATCH 0x04
204 #define NT_CREATE_FLAG_OPEN_TARGET_DIR 0x08
208 * Define the filter flags for NtNotifyChangeDirectoryFile
210 #define FILE_NOTIFY_CHANGE_FILE_NAME 0x00000001
211 #define FILE_NOTIFY_CHANGE_DIR_NAME 0x00000002
212 #define FILE_NOTIFY_CHANGE_NAME 0x00000003
213 #define FILE_NOTIFY_CHANGE_ATTRIBUTES 0x00000004
214 #define FILE_NOTIFY_CHANGE_SIZE 0x00000008
215 #define FILE_NOTIFY_CHANGE_LAST_WRITE 0x00000010
216 #define FILE_NOTIFY_CHANGE_LAST_ACCESS 0x00000020
217 #define FILE_NOTIFY_CHANGE_CREATION 0x00000040
218 #define FILE_NOTIFY_CHANGE_EA 0x00000080
219 #define FILE_NOTIFY_CHANGE_SECURITY 0x00000100
220 #define FILE_NOTIFY_CHANGE_STREAM_NAME 0x00000200
221 #define FILE_NOTIFY_CHANGE_STREAM_SIZE 0x00000400
222 #define FILE_NOTIFY_CHANGE_STREAM_WRITE 0x00000800
223 #define FILE_NOTIFY_VALID_MASK 0x00000fff
227 * Define the file action type codes for NtNotifyChangeDirectoryFile
229 #define FILE_ACTION_ADDED 0x00000001
230 #define FILE_ACTION_REMOVED 0x00000002
231 #define FILE_ACTION_MODIFIED 0x00000003
232 #define FILE_ACTION_RENAMED_OLD_NAME 0x00000004
233 #define FILE_ACTION_RENAMED_NEW_NAME 0x00000005
234 #define FILE_ACTION_ADDED_STREAM 0x00000006
235 #define FILE_ACTION_REMOVED_STREAM 0x00000007
236 #define FILE_ACTION_MODIFIED_STREAM 0x00000008
239 /* Lock type flags */
240 #define LOCKING_ANDX_NORMAL_LOCK 0x00
241 #define LOCKING_ANDX_SHARED_LOCK 0x01
242 #define LOCKING_ANDX_OPLOCK_RELEASE 0x02
243 #define LOCKING_ANDX_CHANGE_LOCK_TYPE 0x04
244 #define LOCKING_ANDX_CANCEL_LOCK 0x08
245 #define LOCKING_ANDX_LARGE_FILES 0x10
247 #define SMB_COM_CREATE_DIRECTORY 0x00
248 #define SMB_COM_DELETE_DIRECTORY 0x01
249 #define SMB_COM_OPEN 0x02
250 #define SMB_COM_CREATE 0x03
251 #define SMB_COM_CLOSE 0x04
252 #define SMB_COM_FLUSH 0x05
253 #define SMB_COM_DELETE 0x06
254 #define SMB_COM_RENAME 0x07
255 #define SMB_COM_QUERY_INFORMATION 0x08
256 #define SMB_COM_SET_INFORMATION 0x09
257 #define SMB_COM_READ 0x0A
258 #define SMB_COM_WRITE 0x0B
259 #define SMB_COM_LOCK_BYTE_RANGE 0x0C
260 #define SMB_COM_UNLOCK_BYTE_RANGE 0x0D
261 #define SMB_COM_CREATE_TEMPORARY 0x0E
262 #define SMB_COM_CREATE_NEW 0x0F
263 #define SMB_COM_CHECK_DIRECTORY 0x10
264 #define SMB_COM_PROCESS_EXIT 0x11
265 #define SMB_COM_SEEK 0x12
266 #define SMB_COM_LOCK_AND_READ 0x13
267 #define SMB_COM_WRITE_AND_UNLOCK 0x14
269 #define SMB_COM_READ_RAW 0x1A
270 #define SMB_COM_READ_MPX 0x1B
271 #define SMB_COM_READ_MPX_SECONDARY 0x1C
272 #define SMB_COM_WRITE_RAW 0x1D
273 #define SMB_COM_WRITE_MPX 0x1E
274 #define SMB_COM_WRITE_MPX_SECONDARY 0x1F
275 #define SMB_COM_WRITE_COMPLETE 0x20
277 #define SMB_COM_SET_INFORMATION2 0x22
278 #define SMB_COM_QUERY_INFORMATION2 0x23
279 #define SMB_COM_LOCKING_ANDX 0x24
280 #define SMB_COM_TRANSACTION 0x25
281 #define SMB_COM_TRANSACTION_SECONDARY 0x26
282 #define SMB_COM_IOCTL 0x27
283 #define SMB_COM_IOCTL_SECONDARY 0x28
284 #define SMB_COM_COPY 0x29
285 #define SMB_COM_MOVE 0x2A
286 #define SMB_COM_ECHO 0x2B
287 #define SMB_COM_WRITE_AND_CLOSE 0x2C
288 #define SMB_COM_OPEN_ANDX 0x2D
289 #define SMB_COM_READ_ANDX 0x2E
290 #define SMB_COM_WRITE_ANDX 0x2F
292 #define SMB_COM_CLOSE_AND_TREE_DISC 0x31
293 #define SMB_COM_TRANSACTION2 0x32
294 #define SMB_COM_TRANSACTION2_SECONDARY 0x33
295 #define SMB_COM_FIND_CLOSE2 0x34
296 #define SMB_COM_FIND_NOTIFY_CLOSE 0x35
298 #define SMB_COM_TREE_CONNECT 0x70
299 #define SMB_COM_TREE_DISCONNECT 0x71
300 #define SMB_COM_NEGOTIATE 0x72
301 #define SMB_COM_SESSION_SETUP_ANDX 0x73
302 #define SMB_COM_LOGOFF_ANDX 0x74
303 #define SMB_COM_TREE_CONNECT_ANDX 0x75
305 #define SMB_COM_QUERY_INFORMATION_DISK 0x80
306 #define SMB_COM_SEARCH 0x81
307 #define SMB_COM_FIND 0x82
308 #define SMB_COM_FIND_UNIQUE 0x83
309 #define SMB_COM_FIND_CLOSE 0x84
311 #define SMB_COM_NT_TRANSACT 0xA0
312 #define SMB_COM_NT_TRANSACT_SECONDARY 0xA1
313 #define SMB_COM_NT_CREATE_ANDX 0xA2
314 #define SMB_COM_NT_CANCEL 0xA4
316 #define SMB_COM_OPEN_PRINT_FILE 0xC0
317 #define SMB_COM_WRITE_PRINT_FILE 0xC1
318 #define SMB_COM_CLOSE_PRINT_FILE 0xC2
319 #define SMB_COM_GET_PRINT_QUEUE 0xC3
321 #define SMB_COM_NUM 0x100
324 * Flags field of the SMB header. The names in parenthesis represent
325 * alternative names for the flags.
327 * SMB_FLAGS_LOCK_AND_READ_OK If the server supports LockAndRead and
328 * (SMB_FLAGS_LOCKS_SUBDIALECT) WriteAndUnlock, it sets this bit in the
329 * Negotiate response.
331 * SMB_FLAGS_SEND_NO_ACK When on, the client guarantees that there
332 * (SMB_FLAGS_RCV_BUF_POSTED) is a receive buffer posted such that a
333 * "Send-No-Ack" can be used by the server
334 * to respond to the client's request.
336 * SMB_FLAGS_CASE_INSENSITIVE This is part of the Flags field of every
337 * SMB header. If this bit is set, then all
338 * pathnames in the SMB should be treated as
339 * case-insensitive. Otherwise pathnames are
340 * case-sensitive.
342 * SMB_FLAGS_CANONICALIZED_PATHS When on in SessionSetupX, this indicates
343 * that all paths sent to the server are
344 * already in OS/2 canonicalized format.
346 * OS/2 canonical format means that file/directory names are in upper case,
347 * are valid characters, . and .. have been removed and single backslashes
348 * are used as separators.
350 * SMB_FLAGS_OPLOCK When set in an open file request SMBs
351 * (Open, Create, OpenX, etc.) this bit
352 * indicates a request for an oplock on the
353 * file. When set in the response, this bit
354 * indicates that the oplock was granted.
356 * SMB_FLAGS_OPLOCK_NOTIFY_ANY When on, this bit indicates that the server
357 * should notify the client on any request
358 * that could cause the file to be changed.
359 * If not set, the server only notifies the
360 * client on other open requests on the file.
361 * This bit is only relevant when
362 * SMB_FLAGS_OPLOCK is set.
364 * SMB_FLAGS_SERVER_TO_REDIR This bit indicates that the SMB is being
365 * (SMB_FLAGS_REPLY) sent from server to (client) redirector.
367 #define SMB_FLAGS_LOCK_AND_READ_OK 0x01
368 #define SMB_FLAGS_SEND_NO_ACK 0x02
369 #define SMB_FLAGS_RESERVED 0x04
370 #define SMB_FLAGS_CASE_INSENSITIVE 0x08
371 #define SMB_FLAGS_CANONICALIZED_PATHS 0x10
372 #define SMB_FLAGS_OPLOCK 0x20
373 #define SMB_FLAGS_OPLOCK_NOTIFY_ANY 0x40
374 #define SMB_FLAGS_REPLY 0x80
378 * Flags2 field of the SMB header.
380 * SMB_FLAGS2_READ_IF_EXECUTE is also known as SMB_FLAGS2_PAGING_IO
382 #define SMB_FLAGS2_KNOWS_LONG_NAMES 0x0001
383 #define SMB_FLAGS2_KNOWS_EAS 0x0002
384 #define SMB_FLAGS2_SMB_SECURITY_SIGNATURE 0x0004
385 #define SMB_FLAGS2_IS_LONG_NAME 0x0040
386 #define SMB_FLAGS2_REPARSE_PATH 0x0400
387 #define SMB_FLAGS2_EXT_SEC 0x0800
388 #define SMB_FLAGS2_DFS 0x1000
389 #define SMB_FLAGS2_READ_IF_EXECUTE 0x2000
390 #define SMB_FLAGS2_NT_STATUS 0x4000
391 #define SMB_FLAGS2_UNICODE 0x8000
393 #define DIALECT_UNKNOWN 0
394 #define PC_NETWORK_PROGRAM_1_0 1 /* The original MSNET SMB protocol */
395 #define PCLAN1_0 2 /* Some versions of the original MSNET */
396 #define MICROSOFT_NETWORKS_1_03 3 /* This is used for the MS-NET 1.03 */
397 #define MICROSOFT_NETWORKS_3_0 4 /* This is the DOS LANMAN 1.0 specific */
398 #define LANMAN1_0 5 /* This is the first version of the full */
399 #define LM1_2X002 6 /* This is the first version of the full */
400 #define DOS_LM1_2X002 7 /* This is the dos equivalent of the */
401 #define DOS_LANMAN2_1 8 /* DOS LANMAN2.1 */
402 #define LANMAN2_1 9 /* OS/2 LANMAN2.1 */
403 #define Windows_for_Workgroups_3_1a 10 /* Windows for Workgroups Version 1.0 */
404 #define NT_LM_0_12 11 /* The SMB protocol designed for NT */
407 * SMB_TREE_CONNECT_ANDX OptionalSupport flags
409 * SMB_SUPPORT_SEARCH_BITS The server supports SearchAttributes.
410 * SMB_SHARE_IS_IN_DFS The share is managed by DFS.
411 * SMB_CSC_MASK Offline-caching mask - see CSC values.
412 * SMB_UNIQUE_FILE_NAME The server uses long names and does not support
413 * short names. This indicates to clients that
414 * they may perform directory name-space caching.
415 * SMB_EXTENDED_SIGNATURES The server will use signing key protection.
417 * SMB_CSC_CACHE_MANUAL_REINT Clients are allowed to cache files for offline
418 * use as requested by users but automatic
419 * file-by-file reintegration is not allowed.
420 * SMB_CSC_CACHE_AUTO_REINT Clients are allowed to automatically cache
421 * files for offline use and file-by-file
422 * reintegration is allowed.
423 * SMB_CSC_CACHE_VDO Clients are allowed to automatically cache files
424 * for offline use, file-by-file reintegration is
425 * allowed and clients are permitted to work from
426 * their local cache even while offline.
427 * SMB_CSC_CACHE_NONE Client-side caching is disabled for this share.
429 * SHI1005_FLAGS_ACCESS_BASED_DIRECTORY_ENUM
430 * The server will filter directory entries based
431 * on the access permissions of the client.
433 #define SMB_SUPPORT_SEARCH_BITS 0x0001
434 #define SMB_SHARE_IS_IN_DFS 0x0002
435 #define SMB_CSC_MASK 0x000C
436 #define SMB_UNIQUE_FILE_NAME 0x0010
437 #define SMB_EXTENDED_SIGNATURES 0x0020
439 #define SMB_CSC_CACHE_MANUAL_REINT 0x0000
440 #define SMB_CSC_CACHE_AUTO_REINT 0x0004
441 #define SMB_CSC_CACHE_VDO 0x0008
442 #define SMB_CSC_CACHE_NONE 0x000C
444 #define SHI1005_FLAGS_ACCESS_BASED_DIRECTORY_ENUM 0x0800
445 #define SHI1005_FLAGS_ALLOW_NAMESPACE_CACHING 0x0400
448 * The subcommand codes, placed in SETUP[0], for named pipe operations are:
449 * SubCommand Code Value Description
450 * =================== ===== =========================================
453 #define CallNamedPipe 0x54 /* open/write/read/close pipe */
454 #define WaitNamedPipe 0x53 /* wait for pipe to be nonbusy */
455 #define PeekNmPipe 0x23 /* read but don't remove data */
456 #define QNmPHandState 0x21 /* query pipe handle modes */
457 #define SetNmPHandState 0x01 /* set pipe handle modes */
458 #define QNmPipeInfo 0x22 /* query pipe attributes */
459 #define TransactNmPipe 0x26 /* write/read operation on pipe */
460 #define RawReadNmPipe 0x11 /* read pipe in "raw" (non message mode) */
461 #define RawWriteNmPipe 0x31 /* write pipe "raw" (non message mode) */
466 * Setup[0] Transaction2 Value Description
467 * Subcommand Code
468 * ========================== ===== =============================
471 #define TRANS2_OPEN2 0x00 /* Create file, extended attributes */
472 #define TRANS2_FIND_FIRST2 0x01 /* Begin search for files */
473 #define TRANS2_FIND_NEXT2 0x02 /* Resume search for files */
474 #define TRANS2_QUERY_FS_INFORMATION 0x03 /* Get file system information */
475 #define TRANS2_SET_FS_INFORMATION 0x04 /* Set file system info. */
476 #define TRANS2_QUERY_PATH_INFORMATION 0x05 /* Get info, named file or dir */
477 #define TRANS2_SET_PATH_INFORMATION 0x06 /* Set info, named file or dir */
478 #define TRANS2_QUERY_FILE_INFORMATION 0x07 /* Get info, handle */
479 #define TRANS2_SET_FILE_INFORMATION 0x08 /* Set info, handle */
480 #define TRANS2_FSCTL 0x09 /* Not implemented by NT server */
481 #define TRANS2_IOCTL2 0x0A /* Not implemented by NT server */
482 #define TRANS2_FIND_NOTIFY_FIRST 0x0B /* Not implemented by NT server */
483 #define TRANS2_FIND_NOTIFY_NEXT 0x0C /* Not implemented by NT server */
484 #define TRANS2_CREATE_DIRECTORY 0x0D /* Create dir, extended attributes */
485 #define TRANS2_SESSION_SETUP 0x0E /* Session setup, extended security */
486 #define TRANS2_GET_DFS_REFERRAL 0x10 /* Get a Dfs referral */
487 #define TRANS2_REPORT_DFS_INCONSISTENCY 0x11 /* Report a Dfs inconsistency */
490 * Access Mode Encoding (CIFS/1.0 1996 Section 3.8).
492 * The desired access mode passed in SmbOpen and SmbOpenAndX has the following
493 * mapping:
495 * 1111 11
496 * 5432 1098 7654 3210
497 * rWrC rLLL rSSS rAAA
499 * where:
501 * W - Write through mode. No read ahead or write behind allowed on
502 * this file or device. When protocol is returned, data is expected
503 * to be on the disk or device.
505 * S - Sharing mode:
506 * 0 - Compatibility mode (as in core open)
507 * 1 - Deny read/write/execute (exclusive)
508 * 2 - Deny write
509 * 3 - Deny read/execute
510 * 4 - Deny none
512 * A - Access mode
513 * 0 - Open for reading
514 * 1 - Open for writing
515 * 2 - Open for reading and writing
516 * 3 - Open for execute
518 * rSSSrAAA = 11111111 (hex FF) indicates FCB open (as in core protocol)
520 * C - Cache mode
521 * 0 - Normal file
522 * 1 - Do not cache this file
524 * L - Locality of reference
525 * 0 - Locality of reference is unknown
526 * 1 - Mainly sequential access
527 * 2 - Mainly random access
528 * 3 - Random access with some locality
529 * 4 to 7 - Currently undefined
533 #define SMB_DA_SHARE_MASK 0x70
534 #define SMB_DA_ACCESS_MASK 0x07
535 #define SMB_DA_FCB_MASK (UCHAR)0xFF
537 #define SMB_DA_ACCESS_READ 0x00
538 #define SMB_DA_ACCESS_WRITE 0x01
539 #define SMB_DA_ACCESS_READ_WRITE 0x02
540 #define SMB_DA_ACCESS_EXECUTE 0x03
542 #define SMB_DA_SHARE_COMPATIBILITY 0x00
543 #define SMB_DA_SHARE_EXCLUSIVE 0x10
544 #define SMB_DA_SHARE_DENY_WRITE 0x20
545 #define SMB_DA_SHARE_DENY_READ 0x30
546 #define SMB_DA_SHARE_DENY_NONE 0x40
548 #define SMB_DA_FCB (UCHAR)0xFF
550 #define SMB_CACHE_NORMAL 0x0000
551 #define SMB_DO_NOT_CACHE 0x1000
553 #define SMB_LR_UNKNOWN 0x0000
554 #define SMB_LR_SEQUENTIAL 0x0100
555 #define SMB_LR_RANDOM 0x0200
556 #define SMB_LR_RANDOM_WITH_LOCALITY 0x0300
557 #define SMB_LR_MASK 0x0F00
559 #define SMB_DA_WRITE_THROUGH 0x4000
562 * Macros used for share reservation rule checking
565 #define SMB_DENY_READ(share_access) ((share_access & FILE_SHARE_READ) == 0)
567 #define SMB_DENY_WRITE(share_access) ((share_access & FILE_SHARE_WRITE) == 0)
569 #define SMB_DENY_DELETE(share_access) ((share_access & FILE_SHARE_DELETE) == 0)
571 #define SMB_DENY_RW(share_access) \
572 ((share_access & (FILE_SHARE_READ | FILE_SHARE_WRITE)) == 0)
574 #define SMB_DENY_ALL(share_access) (share_access == 0)
576 #define SMB_DENY_NONE(share_access) (share_access == FILE_SHARE_ALL)
579 * The SMB open function determines what action should be taken depending
580 * on the existence or lack thereof of files used in the operation. It
581 * has the following mapping:
583 * 1111 1
584 * 5432 1098 7654 3210
585 * rrrr rrrr rrrC rrOO
587 * where:
589 * O - Open (action to be taken if the target file exists)
590 * 0 - Fail
591 * 1 - Open or Append file
592 * 2 - Truncate file
594 * C - Create (action to be taken if the target file does not exist)
595 * 0 - Fail
596 * 1 - Create file
599 #define SMB_OFUN_OPEN_MASK 0x3
600 #define SMB_OFUN_CREATE_MASK 0x10
602 #define SMB_OFUN_OPEN_FAIL 0
603 #define SMB_OFUN_OPEN_APPEND 1
604 #define SMB_OFUN_OPEN_OPEN 1
605 #define SMB_OFUN_OPEN_TRUNCATE 2
607 #define SMB_OFUN_CREATE_FAIL 0x00
608 #define SMB_OFUN_CREATE_CREATE 0x10
611 * The Action field of OpenAndX has the following format:
613 * 1111 11
614 * 5432 1098 7654 3210
615 * Lrrr rrrr rrrr rrOO
617 * where:
619 * L - Opportunistic lock. 1 if lock granted, else 0.
621 * O - Open action:
622 * 1 - The file existed and was opened
623 * 2 - The file did not exist but was created
624 * 3 - The file existed and was truncated
627 #define SMB_OACT_LOCK 0x8000
628 #define SMB_OACT_OPENED 0x01
629 #define SMB_OACT_CREATED 0x02
630 #define SMB_OACT_TRUNCATED 0x03
632 #define SMB_OACT_OPLOCK 0x8000
634 #define SMB_FTYPE_DISK 0
635 #define SMB_FTYPE_BYTE_PIPE 1
636 #define SMB_FTYPE_MESG_PIPE 2
637 #define SMB_FTYPE_PRINTER 3
638 #define SMB_FTYPE_UNKNOWN 0xFFFF
640 #define SMB_DEVST_BLOCKING 0x8000
641 #define SMB_DEVST_ENDPOINT 0x4000
642 #define SMB_DEVST_TYPE_MASK 0x0C00
643 #define SMB_DEVST_TYPE_BYTE_PIPE 0x0000
644 #define SMB_DEVST_TYPE_MESG_PIPE 0x0400
645 #define SMB_DEVST_RMODE_MASK 0x0300
646 #define SMB_DEVST_RMODE_BYTES 0x0000
647 #define SMB_DEVST_RMODE_MESGS 0x0100
648 #define SMB_DEVST_ICOUNT_MASK 0x00FF /* not used */
650 #define SMB_FTYPE_IS_DISK(F) ((F) == SMB_FTYPE_DISK)
651 #define SMB_FTYPE_IS_PIPE(F) \
652 (((F) == SMB_FTYPE_BYTE_PIPE) || ((F) == SMB_FTYPE_MESG_PIPE))
653 #define SMB_FTYPE_IS_PRINTER(F) ((F) == SMB_FTYPE_PRINTER)
656 * TRANS2_FIND
658 #define SMB_FIND_FILE_DIRECTORY_INFO 0x101
659 #define SMB_FIND_FILE_FULL_DIRECTORY_INFO 0x102
660 #define SMB_FIND_FILE_NAMES_INFO 0x103
661 #define SMB_FIND_FILE_BOTH_DIRECTORY_INFO 0x104
662 #define SMB_FIND_FILE_ID_FULL_DIRECTORY_INFO 0x105
663 #define SMB_FIND_FILE_ID_BOTH_DIRECTORY_INFO 0x106
664 #define SMB_MAC_FIND_BOTH_HFS_INFO MAC_FIND_BOTH_HFS_INFO
668 * Flags for TRANS2_FIND_FIRST2 and TRANS2_FIND_NEXT2 (NTDDK).
670 * If SMB_FIND_RETURN_RESUME_KEYS was set in the request parameters,
671 * each entry is preceded by a four-byte resume key.
673 #define SMB_FIND_CLOSE_AFTER_REQUEST 0x01
674 #define SMB_FIND_CLOSE_AT_EOS 0x02
675 #define SMB_FIND_RETURN_RESUME_KEYS 0x04
676 #define SMB_FIND_CONTINUE_FROM_LAST 0x08
677 #define SMB_FIND_WITH_BACKUP_INTENT 0x10
681 * TRANS2_QUERY_FS_INFORMATION
683 * SMB_QUERY_FS_QUOTA_INFO, SMB_QUERY_FS_CONTROL_INFO are not used in Windows
684 * NT, and are not used in any post NT Windows operating systems. If a server
685 * receives these information levels from a client, it should handle them as
686 * invalid information levels.
688 #define SMB_INFO_ALLOCATION 1
689 #define SMB_INFO_VOLUME 2
690 #define SMB_QUERY_FS_LABEL_INFO 0x101
691 #define SMB_QUERY_FS_VOLUME_INFO 0x102
692 #define SMB_QUERY_FS_SIZE_INFO 0x103
693 #define SMB_QUERY_FS_DEVICE_INFO 0x104
694 #define SMB_QUERY_FS_ATTRIBUTE_INFO 0x105
695 #define SMB_QUERY_FS_QUOTA_INFO 0x106
696 #define SMB_QUERY_FS_CONTROL_INFO 0x107
698 #define SMB_MAC_QUERY_FS_INFO MAC_QUERY_FS_INFO
701 * Internal use only.
702 * Define information levels to represent the following requests:
703 * smb_query_information
704 * smb_query_information2
705 * smb_set_information
706 * smb_set_information2
708 #define SMB_QUERY_INFORMATION 0x3001
709 #define SMB_QUERY_INFORMATION2 0x3002
710 #define SMB_SET_INFORMATION 0x3001
711 #define SMB_SET_INFORMATION2 0x3002
713 /* TRANS2_QUERY_{PATH,FILE}_INFORMATION */
714 #define SMB_INFO_STANDARD 1 /* query, set */
715 #define SMB_INFO_QUERY_EA_SIZE 2 /* query */
716 #define SMB_INFO_SET_EAS 2 /* set */
717 #define SMB_INFO_QUERY_EAS_FROM_LIST 3 /* query */
718 #define SMB_INFO_QUERY_ALL_EAS 4 /* query */
719 #define SMB_INFO_QUERY_FULL_NAME 5 /* unused */
720 #define SMB_INFO_IS_NAME_VALID 6 /* query */
722 #define SMB_QUERY_FILE_BASIC_INFO 0x101
723 #define SMB_QUERY_FILE_STANDARD_INFO 0x102
724 #define SMB_QUERY_FILE_EA_INFO 0x103
725 #define SMB_QUERY_FILE_NAME_INFO 0x104
726 #define SMB_QUERY_FILE_ALLOCATION_INFO 0x105 /* unused */
727 #define SMB_QUERY_FILE_END_OF_FILE_INFO 0x106 /* unused */
728 #define SMB_QUERY_FILE_ALL_INFO 0x107
729 #define SMB_QUERY_FILE_ALT_NAME_INFO 0x108
730 #define SMB_QUERY_FILE_STREAM_INFO 0x109
731 #define SMB_QUERY_FILE_COMPRESSION_INFO 0x10B
733 #define SMB_MAC_SET_FINDER_INFO MAC_SET_FINDER_INFO
734 #define SMB_MAC_DT_ADD_APPL MAC_DT_ADD_APPL
735 #define SMB_MAC_DT_REMOVE_APPL MAC_DT_REMOVE_APPL
736 #define SMB_MAC_DT_GET_APPL MAC_DT_GET_APPL
737 #define SMB_MAC_DT_GET_ICON MAC_DT_GET_ICON
738 #define SMB_MAC_DT_GET_ICON_INFO MAC_DT_GET_ICON_INFO
739 #define SMB_MAC_DT_ADD_ICON MAC_DT_ADD_ICON
741 #define SMB_SET_FILE_BASIC_INFO 0x101
742 #define SMB_SET_FILE_DISPOSITION_INFO 0x102
743 #define SMB_SET_FILE_ALLOCATION_INFO 0x103
744 #define SMB_SET_FILE_END_OF_FILE_INFO 0x104
747 /* NT passthrough levels - see ntifs.h FILE_INFORMATION_CLASS */
748 #define SMB_FILE_BASIC_INFORMATION 1004
749 #define SMB_FILE_STANDARD_INFORMATION 1005
750 #define SMB_FILE_INTERNAL_INFORMATION 1006
751 #define SMB_FILE_EA_INFORMATION 1007
752 #define SMB_FILE_ACCESS_INFORMATION 1008
753 #define SMB_FILE_NAME_INFORMATION 1009
754 #define SMB_FILE_RENAME_INFORMATION 1010
755 #define SMB_FILE_LINK_INFORMATION 1011
756 #define SMB_FILE_DISPOSITION_INFORMATION 1013
757 #define SMB_FILE_ALL_INFORMATION 1018
758 #define SMB_FILE_ALLOCATION_INFORMATION 1019
759 #define SMB_FILE_END_OF_FILE_INFORMATION 1020
760 #define SMB_FILE_ALT_NAME_INFORMATION 1021
761 #define SMB_FILE_STREAM_INFORMATION 1022
762 #define SMB_FILE_COMPRESSION_INFORMATION 1028
763 #define SMB_FILE_NETWORK_OPEN_INFORMATION 1034
764 #define SMB_FILE_ATTR_TAG_INFORMATION 1035
766 /* NT passthrough levels - see ntifs.h FILE_FS_INFORMATION_CLASS */
767 #define SMB_FILE_FS_VOLUME_INFORMATION 1001
768 #define SMB_FILE_FS_LABEL_INFORMATION 1002
769 #define SMB_FILE_FS_SIZE_INFORMATION 1003
770 #define SMB_FILE_FS_DEVICE_INFORMATION 1004
771 #define SMB_FILE_FS_ATTRIBUTE_INFORMATION 1005
772 #define SMB_FILE_FS_CONTROL_INFORMATION 1006
773 #define SMB_FILE_FS_FULLSIZE_INFORMATION 1007
774 #define SMB_FILE_FS_OBJECTID_INFORMATION 1008
775 #define SMB_FILE_FS_DRIVERPATH_INFORMATION 1009
778 * The following bits may be set in the SecurityMode field of the
779 * SMB_COM_NEGOTIATE response.
781 * Notes:
782 * NEGOTIATE_SECURITY_SHARE_LEVEL is a montana2 invention.
784 * The NTDDK definitions are:
785 * #define NEGOTIATE_USER_SECURITY 0x01
786 * #define NEGOTIATE_ENCRYPT_PASSWORDS 0x02
787 * #define NEGOTIATE_SECURITY_SIGNATURES_ENABLED 0x04
788 * #define NEGOTIATE_SECURITY_SIGNATURES_REQUIRED 0x08
790 #define NEGOTIATE_SECURITY_SHARE_LEVEL 0x00
791 #define NEGOTIATE_SECURITY_USER_LEVEL 0x01
792 #define NEGOTIATE_SECURITY_CHALLENGE_RESPONSE 0x02
793 #define NEGOTIATE_SECURITY_SIGNATURES_ENABLED 0x04
794 #define NEGOTIATE_SECURITY_SIGNATURES_REQUIRED 0x08
798 * Negotiated Capabilities (CIFS/1.0 section 4.1.1)
800 * Capabilities allow the server to tell the client what it supports.
801 * Undefined bits MUST be set to zero by servers, and MUST be ignored
802 * by clients. The bit definitions are:
804 * Capability Name Encoding Meaning
805 * ==================== ======== ==================================
806 * CAP_RAW_MODE 0x0001 The server supports SMB_COM_READ_RAW and
807 * SMB_COM_WRITE_RAW (obsolescent)
808 * CAP_MPX_MODE 0x0002 The server supports SMB_COM_READ_MPX and
809 * SMB_COM_WRITE_MPX (obsolescent)
810 * CAP_UNICODE 0x0004 The server supports Unicode strings
811 * CAP_LARGE_FILES 0x0008 The server supports large files with 64
812 * bit offsets
813 * CAP_NT_SMBS 0x0010 The server supports the SMBs particular
814 * to the NT LM 0.12 dialect.
815 * Implies CAP_NT_FIND.
816 * CAP_RPC_REMOTE_APIS 0x0020 The server supports remote admin API
817 * requests via DCE RPC
818 * CAP_STATUS32 0x0040 The server can respond with 32 bit
819 * status codes in Status.Status
820 * CAP_LEVEL_II_OPLOCKS 0x0080 The server supports level 2 oplocks
821 * CAP_LOCK_AND_READ 0x0100 The server supports the
822 * SMB_COM_LOCK_AND_READ SMB
823 * CAP_NT_FIND 0x0200
824 * CAP_BULK_TRANSFER 0x0400
825 * CAP_COMPRESSED_BULK 0x0800
826 * CAP_DFS 0x1000 The server is DFS aware
827 * CAP_INFOLEVEL_PASSTHRU 0x2000 The server supports passthru information
828 * level processing capability.
829 * CAP_LARGE_READX 0x4000 The server supports large
830 * SMB_COM_READ_ANDX
831 * CAP_LARGE_WRITEX 0x8000 The server supports large
832 * SMB_COM_WRITE_ANDX
833 * CAP_RESERVED 0x02000000 Reserved for future use.
834 * CAP_EXTENDED_SECURITY 0x80000000 The server supports extended security
835 * exchanges.
837 * Extended security exchanges provides a means of supporting arbitrary
838 * authentication protocols within CIFS. Security blobs are opaque to the
839 * CIFS protocol; they are messages in some authentication protocol that
840 * has been agreed upon by client and server by some out of band mechanism,
841 * for which CIFS merely functions as a transport. When
842 * CAP_EXTENDED_SECURITY is negotiated, the server includes a first
843 * security blob in its response; subsequent security blobs are exchanged
844 * in SMB_COM_SESSION_SETUP_ANDX requests and responses until the
845 * authentication protocol terminates.
847 #define CAP_RAW_MODE 0x0001
848 #define CAP_MPX_MODE 0x0002
849 #define CAP_UNICODE 0x0004
850 #define CAP_LARGE_FILES 0x0008
851 #define CAP_NT_SMBS 0x0010
852 #define CAP_RPC_REMOTE_APIS 0x0020
853 #define CAP_STATUS32 0x0040
854 #define CAP_LEVEL_II_OPLOCKS 0x0080
855 #define CAP_LOCK_AND_READ 0x0100
856 #define CAP_NT_FIND 0x0200
857 #define CAP_BULK_TRANSFER 0x0400
858 #define CAP_COMPRESSED_BULK 0x0800
859 #define CAP_DFS 0x1000
860 #define CAP_INFOLEVEL_PASSTHRU 0x2000
861 #define CAP_LARGE_READX 0x4000
862 #define CAP_LARGE_WRITEX 0x8000
863 #define CAP_RESERVED 0x02000000
864 #define CAP_EXTENDED_SECURITY 0x80000000
868 * Different device types according to NT
870 #define FILE_DEVICE_BEEP 0x00000001
871 #define FILE_DEVICE_CD_ROM 0x00000002
872 #define FILE_DEVICE_CD_ROM_FILE_SYSTEM 0x00000003
873 #define FILE_DEVICE_CONTROLLER 0x00000004
874 #define FILE_DEVICE_DATALINK 0x00000005
875 #define FILE_DEVICE_DFS 0x00000006
876 #define FILE_DEVICE_DISK 0x00000007
877 #define FILE_DEVICE_DISK_FILE_SYSTEM 0x00000008
878 #define FILE_DEVICE_FILE_SYSTEM 0x00000009
879 #define FILE_DEVICE_INPORT_PORT 0x0000000a
880 #define FILE_DEVICE_KEYBOARD 0x0000000b
881 #define FILE_DEVICE_MAILSLOT 0x0000000c
882 #define FILE_DEVICE_MIDI_IN 0x0000000d
883 #define FILE_DEVICE_MIDI_OUT 0x0000000e
884 #define FILE_DEVICE_MOUSE 0x0000000f
885 #define FILE_DEVICE_MULTI_UNC_PROVIDER 0x00000010
886 #define FILE_DEVICE_NAMED_PIPE 0x00000011
887 #define FILE_DEVICE_NETWORK 0x00000012
888 #define FILE_DEVICE_NETWORK_BROWSER 0x00000013
889 #define FILE_DEVICE_NETWORK_FILE_SYSTEM 0x00000014
890 #define FILE_DEVICE_NULL 0x00000015
891 #define FILE_DEVICE_PARALLEL_PORT 0x00000016
892 #define FILE_DEVICE_PHYSICAL_NETCARD 0x00000017
893 #define FILE_DEVICE_PRINTER 0x00000018
894 #define FILE_DEVICE_SCANNER 0x00000019
895 #define FILE_DEVICE_SERIAL_MOUSE_PORT 0x0000001a
896 #define FILE_DEVICE_SERIAL_PORT 0x0000001b
897 #define FILE_DEVICE_SCREEN 0x0000001c
898 #define FILE_DEVICE_SOUND 0x0000001d
899 #define FILE_DEVICE_STREAMS 0x0000001e
900 #define FILE_DEVICE_TAPE 0x0000001f
901 #define FILE_DEVICE_TAPE_FILE_SYSTEM 0x00000020
902 #define FILE_DEVICE_TRANSPORT 0x00000021
903 #define FILE_DEVICE_UNKNOWN 0x00000022
904 #define FILE_DEVICE_VIDEO 0x00000023
905 #define FILE_DEVICE_VIRTUAL_DISK 0x00000024
906 #define FILE_DEVICE_WAVE_IN 0x00000025
907 #define FILE_DEVICE_WAVE_OUT 0x00000026
908 #define FILE_DEVICE_8042_PORT 0x00000027
909 #define FILE_DEVICE_NETWORK_REDIRECTOR 0x00000028
910 #define FILE_DEVICE_BATTERY 0x00000029
911 #define FILE_DEVICE_BUS_EXTENDER 0x0000002a
912 #define FILE_DEVICE_MODEM 0x0000002b
913 #define FILE_DEVICE_VDM 0x0000002c
916 * Some of these device types are not currently accessible over the network
917 * and may never be accessible over the network. Some may change to be
919 * accessible over the network. The values for device types that may never
920 * be accessible over the network may be redefined to be just reserved at
921 * some date in the future.
923 * Characteristics is the sum of any of the following:
926 #define FILE_REMOVABLE_MEDIA 0x00000001
927 #define FILE_READ_ONLY_DEVICE 0x00000002
928 #define FILE_FLOPPY_DISKETTE 0x00000004
929 #define FILE_WRITE_ONE_MEDIA 0x00000008
930 #define FILE_REMOTE_DEVICE 0x00000010
931 #define FILE_DEVICE_IS_MOUNTED 0x00000020
932 #define FILE_VIRTUAL_VOLUME 0x00000040
935 * CREATE_ANDX ShareAccess Flags
938 #define FILE_SHARE_NONE 0x00000000
939 #define FILE_SHARE_READ 0x00000001
940 #define FILE_SHARE_WRITE 0x00000002
941 #define FILE_SHARE_DELETE 0x00000004
942 #define FILE_SHARE_ALL 0x00000007
943 #define FILE_SHARE_VALID_FLAGS 0x00000007
947 * CREATE_ANDX CreateDisposition flags
949 * FILE_SUPERSEDE If the file already exists it should be superseded
950 * by the specified file. If the file does not already
951 * exist then it should be created.
953 * FILE_CREATE If the file already exists the operation should fail.
954 * If the file does not already exist then it should be
955 * created. (aka CREATE_NEW)
957 * FILE_OPEN If the file already exists then it should be opened.
958 * If the file does not already exist then the operation
959 * should fail. (aka OPEN_EXISTING)
961 * FILE_OPEN_IF If the file already exists then it should be opened.
962 * If the file does not already exist then it should be
963 * created. (aka OPEN_ALWAYS)
965 * FILE_OVERWRITE If the file already exists, it should be opened and
966 * overwritten. If the file does not already exist then
967 * the operation should fail. (aka TRUNCATE_EXISTING)
969 * FILE_OVERWRITE_IF If the file already exists, it should be opened and
970 * overwritten. If the file does not already exist then
971 * it should be created. (aka CREATE_ALWAYS)
973 #define FILE_SUPERSEDE 0x00000000
974 #define FILE_OPEN 0x00000001
975 #define FILE_CREATE 0x00000002
976 #define FILE_OPEN_IF 0x00000003
977 #define FILE_OVERWRITE 0x00000004
978 #define FILE_OVERWRITE_IF 0x00000005
979 #define FILE_MAXIMUM_DISPOSITION 0x00000005
982 * CREATE_ANDX Impersonation levels
985 #define SECURITY_ANONYMOUS 0x00000001
986 #define SECURITY_IDENTIFICATION 0x00000002
987 #define SECURITY_IMPERSONATION 0x00000003
988 #define SECURITY_DELEGATION 0x00000004
991 * CREATE_ANDX SecurityFlags
994 #define SECURITY_CONTEXT_TRACKING 0x00000001
995 #define SECURITY_EFFECTIVE_ONLY 0x00000002
998 * Server types
1000 #define SV_WORKSTATION 0x00000001 /* All workstations */
1001 #define SV_SERVER 0x00000002 /* All servers */
1002 #define SV_SQLSERVER 0x00000004 /* running with SQL server */
1003 #define SV_DOMAIN_CTRL 0x00000008 /* Primary domain controller */
1004 #define SV_DOMAIN_BAKCTRL 0x00000010 /* Backup domain controller */
1005 #define SV_TIME_SOURCE 0x00000020 /* running timesource service */
1006 #define SV_AFP 0x00000040 /* Apple File Protocol */
1007 #define SV_NOVELL 0x00000080 /* Novell servers */
1008 #define SV_DOMAIN_MEMBER 0x00000100 /* Domain Member */
1009 #define SV_PRINTQ_SERVER 0x00000200 /* Server sharing print queue */
1010 #define SV_DIALIN_SERVER 0x00000400 /* Server running dialin */
1011 #define SV_XENIX_SERVER 0x00000800 /* Xenix server */
1012 #define SV_NT 0x00001000 /* NT server */
1013 #define SV_WFW 0x00002000 /* Server running Windows for */
1014 #define SV_SERVER_NT 0x00008000 /* Windows NT non DC server */
1015 #define SV_POTENTIAL_BROWSER 0x00010000 /* can run browser service */
1016 #define SV_BACKUP_BROWSER 0x00020000 /* Backup browser server */
1017 #define SV_MASTER_BROWSER 0x00040000 /* Master browser server */
1018 #define SV_DOMAIN_MASTER 0x00080000 /* Domain Master Browser */
1019 #define SV_OSF 0x00100000 /* OSF operating system */
1020 #define SV_VMS 0x00200000 /* VMS operating system */
1021 #define SV_WINDOWS_95_PLUS 0x00400000 /* Windows 95 or better */
1023 #define SV_LOCAL_LIST_ONLY 0x40000000 /* Enumerate only "local" */
1024 #define SV_TYPE_DOMAIN_ENUM 0x80000000 /* Enumerate Domains */
1026 #define MY_SERVER_TYPE (SV_SERVER | SV_NT | SV_SERVER_NT)
1029 #define PRQ_ACTIVE 0 /* Active */
1030 #define PRQ_PAUSE 1 /* Paused */
1031 #define PRQ_ERROR 2 /* Error Occurred */
1032 #define PRQ_PENDING 3 /* Deletion pending */
1034 #define PRJ_QS_QUEUED 0 /* Active */
1035 #define PRJ_QS_PAUSED 1 /* Paused */
1036 #define PRJ_QS_SPOOLING 2 /* Paused */
1037 #define PRJ_QS_PRINTING 3 /* Paused */
1040 #define SHARE_ACCESS_READ 0x01 /* read & execute from resource */
1041 #define SHARE_ACCESS_WRITE 0x02 /* write data to resource */
1042 #define SHARE_ACCESS_CREATE 0x04 /* create an instance of */
1043 #define SHARE_ACCESS_EXEC 0x08 /* execute from resource */
1044 #define SHARE_ACCESS_DELETE 0x10 /* Permission to delete the resource */
1045 #define SHARE_ACCESS_ATTRIB 0x20 /* Permission to modify the resource */
1046 #define SHARE_ACCESS_PERM 0x40 /* Permission to change permissions */
1047 #define SHARE_ACCESS_ALL 0x7F /* All of the above permissions */
1051 * SMB_COM_NT_TRANSACTION sub-command codes (CIFS/1.0 section 5.3)
1053 * SubCommand Code Value Description
1054 * =============================== ===== =================================
1055 * NT_TRANSACT_CREATE 1 File open/create
1056 * NT_TRANSACT_IOCTL 2 Device IOCTL
1057 * NT_TRANSACT_SET_SECURITY_DESC 3 Set security descriptor
1058 * NT_TRANSACT_NOTIFY_CHANGE 4 Start directory watch
1059 * NT_TRANSACT_RENAME 5 Reserved (handle-based rename)
1060 * NT_TRANSACT_QUERY_SECURITY_DESC 6 Retrieve security descriptor
1061 * NT_TRANSACT_QUERY_QUOTA 7 Retrieve quota information
1062 * NT_TRANSACT_SET_QUOTA 8 Set quota information
1064 #define NT_TRANSACT_MIN_FUNCTION 1
1066 #define NT_TRANSACT_CREATE 1
1067 #define NT_TRANSACT_IOCTL 2
1068 #define NT_TRANSACT_SET_SECURITY_DESC 3
1069 #define NT_TRANSACT_NOTIFY_CHANGE 4
1070 #define NT_TRANSACT_RENAME 5
1071 #define NT_TRANSACT_QUERY_SECURITY_DESC 6
1072 #define NT_TRANSACT_QUERY_QUOTA 7
1073 #define NT_TRANSACT_SET_QUOTA 8
1075 #define NT_TRANSACT_MAX_FUNCTION 8
1079 * Pipe states
1081 #define SMB_PIPE_READMODE_BYTE 0x0000
1082 #define SMB_PIPE_READMODE_MESSAGE 0x0100
1083 #define SMB_PIPE_TYPE_BYTE 0x0000
1084 #define SMB_PIPE_TYPE_MESSAGE 0x0400
1085 #define SMB_PIPE_END_CLIENT 0x0000
1086 #define SMB_PIPE_END_SERVER 0x4000
1087 #define SMB_PIPE_WAIT 0x0000
1088 #define SMB_PIPE_NOWAIT 0x8000
1089 #define SMB_PIPE_UNLIMITED_INSTANCES 0x00FF
1092 * smb_com_seek request
1094 #define SMB_SEEK_SET 0 /* set file offset to specified offset */
1095 #define SMB_SEEK_CUR 1 /* set file offset to current plus specified offset */
1096 #define SMB_SEEK_END 2 /* set file offset to EOF plus specified offset */
1099 * API Numbers for Transact based RAP (Remote Administration Protocol) calls
1101 #define API_WshareEnum 0
1102 #define API_WshareGetInfo 1
1103 #define API_WshareSetInfo 2
1104 #define API_WshareAdd 3
1105 #define API_WshareDel 4
1106 #define API_NetShareCheck 5
1107 #define API_WsessionEnum 6
1108 #define API_WsessionGetInfo 7
1109 #define API_WsessionDel 8
1110 #define API_WconnectionEnum 9
1111 #define API_WfileEnum 10
1112 #define API_WfileGetInfo 11
1113 #define API_WfileClose 12
1114 #define API_WserverGetInfo 13
1115 #define API_WserverSetInfo 14
1116 #define API_WserverDiskEnum 15
1117 #define API_WserverAdminCommand 16
1118 #define API_NetAuditOpen 17
1119 #define API_WauditClear 18
1120 #define API_NetErrorLogOpen 19
1121 #define API_WerrorLogClear 20
1122 #define API_NetCharDevEnum 21
1123 #define API_NetCharDevGetInfo 22
1124 #define API_WCharDevControl 23
1125 #define API_NetCharDevQEnum 24
1126 #define API_NetCharDevQGetInfo 25
1127 #define API_WCharDevQSetInfo 26
1128 #define API_WCharDevQPurge 27
1129 #define API_WCharDevQPurgeSelf 28
1130 #define API_WMessageNameEnum 29
1131 #define API_WMessageNameGetInfo 30
1132 #define API_WMessageNameAdd 31
1133 #define API_WMessageNameDel 32
1134 #define API_WMessageNameFwd 33
1135 #define API_WMessageNameUnFwd 34
1136 #define API_WMessageBufferSend 35
1137 #define API_WMessageFileSend 36
1138 #define API_WMessageLogFileSet 37
1139 #define API_WMessageLogFileGet 38
1140 #define API_WServiceEnum 39
1141 #define API_WServiceInstall 40
1142 #define API_WServiceControl 41
1143 #define API_WAccessEnum 42
1144 #define API_WAccessGetInfo 43
1145 #define API_WAccessSetInfo 44
1146 #define API_WAccessAdd 45
1147 #define API_WAccessDel 46
1148 #define API_WGroupEnum 47
1149 #define API_WGroupAdd 48
1150 #define API_WGroupDel 49
1151 #define API_WGroupAddUser 50
1152 #define API_WGroupDelUser 51
1153 #define API_WGroupGetUsers 52
1154 #define API_WUserEnum 53
1155 #define API_WUserAdd 54
1156 #define API_WUserDel 55
1157 #define API_WUserGetInfo 56
1158 #define API_WUserSetInfo 57
1159 #define API_WUserPasswordSet 58
1160 #define API_WUserGetGroups 59
1161 #define API_DeadTableEntry 60
1162 #define API_WWkstaSetUID 62
1163 #define API_WWkstaGetInfo 63
1164 #define API_WWkstaSetInfo 64
1165 #define API_WUseEnum 65
1166 #define API_WUseAdd 66
1167 #define API_WUseDel 67
1168 #define API_WUseGetInfo 68
1169 #define API_WPrintQEnum 69
1170 #define API_WPrintQGetInfo 70
1171 #define API_WPrintQSetInfo 71
1172 #define API_WPrintQAdd 72
1173 #define API_WPrintQDel 73
1174 #define API_WPrintQPause 74
1175 #define API_WPrintQContinue 75
1176 #define API_WPrintJobEnum 76
1177 #define API_WPrintJobGetInfo 77
1178 #define API_WPrintJobSetInfo_OLD 78
1179 #define API_WPrintJobDel 81
1180 #define API_WPrintJobPause 82
1181 #define API_WPrintJobContinue 83
1182 #define API_WPrintDestEnum 84
1183 #define API_WPrintDestGetInfo 85
1184 #define API_WPrintDestControl 86
1185 #define API_WProfileSave 87
1186 #define API_WProfileLoad 88
1187 #define API_WStatisticsGet 89
1188 #define API_WStatisticsClear 90
1189 #define API_NetRemoteTOD 91
1190 #define API_WNetBiosEnum 92
1191 #define API_WNetBiosGetInfo 93
1192 #define API_NetServerEnum 94
1193 #define API_I_NetServerEnum 95
1194 #define API_WServiceGetInfo 96
1195 #define API_WPrintQPurge 103
1196 #define API_NetServerEnum2 104
1197 #define API_WAccessGetUserPerms 105
1198 #define API_WGroupGetInfo 106
1199 #define API_WGroupSetInfo 107
1200 #define API_WGroupSetUsers 108
1201 #define API_WUserSetGroups 109
1202 #define API_WUserModalsGet 110
1203 #define API_WUserModalsSet 111
1204 #define API_WFileEnum2 112
1205 #define API_WUserAdd2 113
1206 #define API_WUserSetInfo2 114
1207 #define API_WUserPasswordSet2 115
1208 #define API_I_NetServerEnum2 116
1209 #define API_WConfigGet2 117
1210 #define API_WConfigGetAll2 118
1211 #define API_WGetDCName 119
1212 #define API_NetHandleGetInfo 120
1213 #define API_NetHandleSetInfo 121
1214 #define API_WStatisticsGet2 122
1215 #define API_WBuildGetInfo 123
1216 #define API_WFileGetInfo2 124
1217 #define API_WFileClose2 125
1218 #define API_WNetServerReqChallenge 126
1219 #define API_WNetServerAuthenticate 127
1220 #define API_WNetServerPasswordSet 128
1221 #define API_WNetAccountDeltas 129
1222 #define API_WNetAccountSync 130
1223 #define API_WUserEnum2 131
1224 #define API_WWkstaUserLogon 132
1225 #define API_WWkstaUserLogoff 133
1226 #define API_WLogonEnum 134
1227 #define API_WErrorLogRead 135
1228 #define API_WI_NetPathType 136
1229 #define API_WI_NetPathCanonicalize 137
1230 #define API_WI_NetPathCompare 138
1231 #define API_WI_NetNameValidate 139
1232 #define API_WI_NetNameCanonicalize 140
1233 #define API_WI_NetNameCompare 141
1234 #define API_WAuditRead 142
1235 #define API_WPrintDestAdd 143
1236 #define API_WPrintDestSetInfo 144
1237 #define API_WPrintDestDel 145
1238 #define API_WUserValidate2 146
1239 #define API_WPrintJobSetInfo 147
1240 #define API_TI_NetServerDiskEnum 148
1241 #define API_TI_NetServerDiskGetInfo 149
1242 #define API_TI_FTVerifyMirror 150
1243 #define API_TI_FTAbortVerify 151
1244 #define API_TI_FTGetInfo 152
1245 #define API_TI_FTSetInfo 153
1246 #define API_TI_FTLockDisk 154
1247 #define API_TI_FTFixError 155
1248 #define API_TI_FTAbortFix 156
1249 #define API_TI_FTDiagnoseError 157
1250 #define API_TI_FTGetDriveStats 158
1251 #define API_TI_FTErrorGetInfo 160
1252 #define API_NetAccessCheck 163
1253 #define API_NetAlertRaise 164
1254 #define API_NetAlertStart 165
1255 #define API_NetAlertStop 166
1256 #define API_NetAuditWrite 167
1257 #define API_NetIRemoteAPI 168
1258 #define API_NetServiceStatus 169
1259 #define API_I_NetServerRegister 170
1260 #define API_I_NetServerDeregister 171
1261 #define API_I_NetSessionEntryMake 172
1262 #define API_I_NetSessionEntryClear 173
1263 #define API_I_NetSessionEntryGetInfo 174
1264 #define API_I_NetSessionEntrySetInfo 175
1265 #define API_I_NetConnectionEntryMake 176
1266 #define API_I_NetConnectionEntryClear 177
1267 #define API_I_NetConnectionEntrySetInfo 178
1268 #define API_I_NetConnectionEntryGetInfo 179
1269 #define API_I_NetFileEntryMake 180
1270 #define API_I_NetFileEntryClear 181
1271 #define API_I_NetFileEntrySetInfo 182
1272 #define API_I_NetFileEntryGetInfo 183
1273 #define API_AltSrvMessageBufferSend 184
1274 #define API_AltSrvMessageFileSend 185
1275 #define API_wI_NetRplWkstaEnum 186
1276 #define API_wI_NetRplWkstaGetInfo 187
1277 #define API_wI_NetRplWkstaSetInfo 188
1278 #define API_wI_NetRplWkstaAdd 189
1279 #define API_wI_NetRplWkstaDel 190
1280 #define API_wI_NetRplProfileEnum 191
1281 #define API_wI_NetRplProfileGetInfo 192
1282 #define API_wI_NetRplProfileSetInfo 193
1283 #define API_wI_NetRplProfileAdd 194
1284 #define API_wI_NetRplProfileDel 195
1285 #define API_wI_NetRplProfileClone 196
1286 #define API_wI_NetRplBaseProfileEnum 197
1287 #define API_WIServerSetInfo 201
1288 #define API_WPrintDriverEnum 205
1289 #define API_WPrintQProcessorEnum 206
1290 #define API_WPrintPortEnum 207
1291 #define API_WNetWriteUpdateLog 208
1292 #define API_WNetAccountUpdate 209
1293 #define API_WNetAccountConfirmUpdate 210
1294 #define API_WConfigSet 211
1295 #define API_WAccountsReplicate 212
1296 #define API_SamOEMChgPasswordUser2_P 214
1297 #define API_NetServerEnum3 215
1298 #define API_WprintDriverGetInfo 250
1299 #define API_WprintDriverSetInfo 251
1300 #define API_WaliasAdd 252
1301 #define API_WaliasDel 253
1302 #define API_WaliasGetInfo 254
1303 #define API_WaliasSetInfo 255
1304 #define API_WaliasEnum 256
1305 #define API_WuserGetLogonAsn 257
1306 #define API_WuserSetLogonAsn 258
1307 #define API_WuserGetAppSel 259
1308 #define API_WuserSetAppSel 260
1309 #define API_WappAdd 261
1310 #define API_WappDel 262
1311 #define API_WappGetInfo 263
1312 #define API_WappSetInfo 264
1313 #define API_WappEnum 265
1314 #define API_WUserDCDBInit 266
1315 #define API_WDASDAdd 267
1316 #define API_WDASDDel 268
1317 #define API_WDASDGetInfo 269
1318 #define API_WDASDSetInfo 270
1319 #define API_WDASDEnum 271
1320 #define API_WDASDCheck 272
1321 #define API_WDASDCtl 273
1322 #define API_WuserRemoteLogonCheck 274
1323 #define API_WUserPasswordSet3 275
1324 #define API_WCreateRIPLMachine 276
1325 #define API_WDeleteRIPLMachine 277
1326 #define API_WGetRIPLMachineInfo 278
1327 #define API_WSetRIPLMachineInfo 279
1328 #define API_WEnumRIPLMachine 280
1329 #define API_WI_ShareAdd 281
1330 #define API_WI_AliasEnum 282
1331 #define API_WaccessApply 283
1332 #define API_WPrt16Query 284
1333 #define API_WPrt16Set 285
1334 #define API_WUserDel100 286
1335 #define API_WUserRemoteLogonCheck2 287
1336 #define API_WRemoteTODSet 294
1337 #define API_WprintJobMoveAll 295
1338 #define API_W16AppParmAdd 296
1339 #define API_W16AppParmDel 297
1340 #define API_W16AppParmGet 298
1341 #define API_W16AppParmSet 299
1342 #define API_W16RIPLMachineCreate 300
1343 #define API_W16RIPLMachineGetInfo 301
1344 #define API_W16RIPLMachineSetInfo 302
1345 #define API_W16RIPLMachineEnum 303
1346 #define API_W16RIPLMachineListParmEnum 304
1347 #define API_W16RIPLMachClassGetInfo 305
1348 #define API_W16RIPLMachClassEnum 306
1349 #define API_W16RIPLMachClassCreate 307
1350 #define API_W16RIPLMachClassSetInfo 308
1351 #define API_W16RIPLMachClassDelete 309
1352 #define API_W16RIPLMachClassLPEnum 310
1353 #define API_W16RIPLMachineDelete 311
1354 #define API_W16WSLevelGetInfo 312
1355 #define API_WserverNameAdd 313
1356 #define API_WserverNameDel 314
1357 #define API_WserverNameEnum 315
1358 #define API_I_WDASDEnum 316
1359 #define API_I_WDASDEnumTerminate 317
1360 #define API_I_WDASDSetInfo2 318
1361 #define MAX_RAP_API 318
1363 #ifdef __cplusplus
1365 #endif
1367 #endif /* _SMBSRV_SMB_H */