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