|
root / base / usr / src / uts / common / smbsrv / smb.h
smb.h C 1410 lines 47.5 KB
   1
   2
   3
   4
   5
   6
   7
   8
   9
  10
  11
  12
  13
  14
  15
  16
  17
  18
  19
  20
  21
  22
  23
  24
  25
  26
  27
  28
  29
  30
  31
  32
  33
  34
  35
  36
  37
  38
  39
  40
  41
  42
  43
  44
  45
  46
  47
  48
  49
  50
  51
  52
  53
  54
  55
  56
  57
  58
  59
  60
  61
  62
  63
  64
  65
  66
  67
  68
  69
  70
  71
  72
  73
  74
  75
  76
  77
  78
  79
  80
  81
  82
  83
  84
  85
  86
  87
  88
  89
  90
  91
  92
  93
  94
  95
  96
  97
  98
  99
 100
 101
 102
 103
 104
 105
 106
 107
 108
 109
 110
 111
 112
 113
 114
 115
 116
 117
 118
 119
 120
 121
 122
 123
 124
 125
 126
 127
 128
 129
 130
 131
 132
 133
 134
 135
 136
 137
 138
 139
 140
 141
 142
 143
 144
 145
 146
 147
 148
 149
 150
 151
 152
 153
 154
 155
 156
 157
 158
 159
 160
 161
 162
 163
 164
 165
 166
 167
 168
 169
 170
 171
 172
 173
 174
 175
 176
 177
 178
 179
 180
 181
 182
 183
 184
 185
 186
 187
 188
 189
 190
 191
 192
 193
 194
 195
 196
 197
 198
 199
 200
 201
 202
 203
 204
 205
 206
 207
 208
 209
 210
 211
 212
 213
 214
 215
 216
 217
 218
 219
 220
 221
 222
 223
 224
 225
 226
 227
 228
 229
 230
 231
 232
 233
 234
 235
 236
 237
 238
 239
 240
 241
 242
 243
 244
 245
 246
 247
 248
 249
 250
 251
 252
 253
 254
 255
 256
 257
 258
 259
 260
 261
 262
 263
 264
 265
 266
 267
 268
 269
 270
 271
 272
 273
 274
 275
 276
 277
 278
 279
 280
 281
 282
 283
 284
 285
 286
 287
 288
 289
 290
 291
 292
 293
 294
 295
 296
 297
 298
 299
 300
 301
 302
 303
 304
 305
 306
 307
 308
 309
 310
 311
 312
 313
 314
 315
 316
 317
 318
 319
 320
 321
 322
 323
 324
 325
 326
 327
 328
 329
 330
 331
 332
 333
 334
 335
 336
 337
 338
 339
 340
 341
 342
 343
 344
 345
 346
 347
 348
 349
 350
 351
 352
 353
 354
 355
 356
 357
 358
 359
 360
 361
 362
 363
 364
 365
 366
 367
 368
 369
 370
 371
 372
 373
 374
 375
 376
 377
 378
 379
 380
 381
 382
 383
 384
 385
 386
 387
 388
 389
 390
 391
 392
 393
 394
 395
 396
 397
 398
 399
 400
 401
 402
 403
 404
 405
 406
 407
 408
 409
 410
 411
 412
 413
 414
 415
 416
 417
 418
 419
 420
 421
 422
 423
 424
 425
 426
 427
 428
 429
 430
 431
 432
 433
 434
 435
 436
 437
 438
 439
 440
 441
 442
 443
 444
 445
 446
 447
 448
 449
 450
 451
 452
 453
 454
 455
 456
 457
 458
 459
 460
 461
 462
 463
 464
 465
 466
 467
 468
 469
 470
 471
 472
 473
 474
 475
 476
 477
 478
 479
 480
 481
 482
 483
 484
 485
 486
 487
 488
 489
 490
 491
 492
 493
 494
 495
 496
 497
 498
 499
 500
 501
 502
 503
 504
 505
 506
 507
 508
 509
 510
 511
 512
 513
 514
 515
 516
 517
 518
 519
 520
 521
 522
 523
 524
 525
 526
 527
 528
 529
 530
 531
 532
 533
 534
 535
 536
 537
 538
 539
 540
 541
 542
 543
 544
 545
 546
 547
 548
 549
 550
 551
 552
 553
 554
 555
 556
 557
 558
 559
 560
 561
 562
 563
 564
 565
 566
 567
 568
 569
 570
 571
 572
 573
 574
 575
 576
 577
 578
 579
 580
 581
 582
 583
 584
 585
 586
 587
 588
 589
 590
 591
 592
 593
 594
 595
 596
 597
 598
 599
 600
 601
 602
 603
 604
 605
 606
 607
 608
 609
 610
 611
 612
 613
 614
 615
 616
 617
 618
 619
 620
 621
 622
 623
 624
 625
 626
 627
 628
 629
 630
 631
 632
 633
 634
 635
 636
 637
 638
 639
 640
 641
 642
 643
 644
 645
 646
 647
 648
 649
 650
 651
 652
 653
 654
 655
 656
 657
 658
 659
 660
 661
 662
 663
 664
 665
 666
 667
 668
 669
 670
 671
 672
 673
 674
 675
 676
 677
 678
 679
 680
 681
 682
 683
 684
 685
 686
 687
 688
 689
 690
 691
 692
 693
 694
 695
 696
 697
 698
 699
 700
 701
 702
 703
 704
 705
 706
 707
 708
 709
 710
 711
 712
 713
 714
 715
 716
 717
 718
 719
 720
 721
 722
 723
 724
 725
 726
 727
 728
 729
 730
 731
 732
 733
 734
 735
 736
 737
 738
 739
 740
 741
 742
 743
 744
 745
 746
 747
 748
 749
 750
 751
 752
 753
 754
 755
 756
 757
 758
 759
 760
 761
 762
 763
 764
 765
 766
 767
 768
 769
 770
 771
 772
 773
 774
 775
 776
 777
 778
 779
 780
 781
 782
 783
 784
 785
 786
 787
 788
 789
 790
 791
 792
 793
 794
 795
 796
 797
 798
 799
 800
 801
 802
 803
 804
 805
 806
 807
 808
 809
 810
 811
 812
 813
 814
 815
 816
 817
 818
 819
 820
 821
 822
 823
 824
 825
 826
 827
 828
 829
 830
 831
 832
 833
 834
 835
 836
 837
 838
 839
 840
 841
 842
 843
 844
 845
 846
 847
 848
 849
 850
 851
 852
 853
 854
 855
 856
 857
 858
 859
 860
 861
 862
 863
 864
 865
 866
 867
 868
 869
 870
 871
 872
 873
 874
 875
 876
 877
 878
 879
 880
 881
 882
 883
 884
 885
 886
 887
 888
 889
 890
 891
 892
 893
 894
 895
 896
 897
 898
 899
 900
 901
 902
 903
 904
 905
 906
 907
 908
 909
 910
 911
 912
 913
 914
 915
 916
 917
 918
 919
 920
 921
 922
 923
 924
 925
 926
 927
 928
 929
 930
 931
 932
 933
 934
 935
 936
 937
 938
 939
 940
 941
 942
 943
 944
 945
 946
 947
 948
 949
 950
 951
 952
 953
 954
 955
 956
 957
 958
 959
 960
 961
 962
 963
 964
 965
 966
 967
 968
 969
 970
 971
 972
 973
 974
 975
 976
 977
 978
 979
 980
 981
 982
 983
 984
 985
 986
 987
 988
 989
 990
 991
 992
 993
 994
 995
 996
 997
 998
 999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
/*
 * CDDL HEADER START
 *
 * The contents of this file are subject to the terms of the
 * Common Development and Distribution License (the "License").
 * You may not use this file except in compliance with the License.
 *
 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
 * or http://www.opensolaris.org/os/licensing.
 * See the License for the specific language governing permissions
 * and limitations under the License.
 *
 * When distributing Covered Code, include this CDDL HEADER in each
 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
 * If applicable, add the following below this CDDL HEADER, with the
 * fields enclosed by brackets "[]" replaced with your own identifying
 * information: Portions Copyright [yyyy] [name of copyright owner]
 *
 * CDDL HEADER END
 */

/*
 * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
 * Copyright 2018 Nexenta Systems, Inc.  All rights reserved.
 */

#ifndef _SMBSRV_SMB_H
#define	_SMBSRV_SMB_H


/*
 * SMB definitions and interfaces, mostly defined in the SMB and CIFS specs.
 */
#include <sys/types.h>
#include <smbsrv/string.h>
#include <smbsrv/msgbuf.h>

#include <smb/ntstatus.h>
#include <smb/nterror.h>
#include <smb/lmerr.h>
#include <smb/doserror.h>
#include <smb/ntaccess.h>

/*
 * Macintosh Extensions for CIFS
 */
#include <smbsrv/mac_cifs.h>

/*
 * NT Installable File System (IFS) interface.
 */
#include <smbsrv/ntifs.h>

#ifdef __cplusplus
extern "C" {
#endif

/*
 * The msgbuf format and length of an SMB header.
 */
#define	SMB_HEADER_DOS_FMT	"Mbbbwbww10.wwww"
#define	SMB_HEADER_NT_FMT	"Mblbww#c2.wwww"
#define	SMB_HEADER_LEN		32
#define	SMB_SIG_SIZE		8	/* SMB signature size */

#define	SMB_HEADER_ED_FMT	"Mbbbwbww8c2.wwww"
#define	SMB_HEADER_ED_LEN	(4+1+1+1+2+1+2+12+2+2+2+2)
#define	SMB_TRANSHDR_ED_FMT	"wwwwb.wl2.wwwwb."
#define	SMB_TRANSHDR_ED_LEN	(2+2+2+2+1+1+2+4+2+2+2+2+2+1+1)
#define	SMB_TRANSSHDR_ED_FMT	"wwwwwwwww"
#define	SMB_TRANSSHDR_ED_LEN	(2+2+2+2+2+2+2+2)
#define	SMB_TRANS2SHDR_ED_FMT	"wwwwwwwww"
#define	SMB_TRANS2SHDR_ED_LEN	(2+2+2+2+2+2+2+2+2)
/* There is something wrong with this. Should be 38 bytes. It is 37 bytes */
#define	SMB_NT_TRANSHDR_ED_FMT	"b2.llllllllbw"
#define	SMB_NT_TRANSHDR_ED_LEN	(1+2+4+4+4+4+4+4+4+4+1+2)

/*
 * CIFS definition for the SMB header (CIFS Section 3.2). Note that the
 * pid_high field is not documented in the 1997 CIFS specificaction. This
 * is a decoded or memory-based definition, which may be padded to align
 * its elements on word boundaries. See smb_hdrbuf_t for the network
 * ready structure.
 */
typedef struct smb_hdr {
	uint8_t protocol[4];
	uint8_t command;

	union {
		struct {
			uint8_t error_class;
			uint8_t reserved;
			uint16_t error;
		} dos_error;
		uint32_t ntstatus;
	} status;

	uint8_t flags;
	uint16_t flags2;
	uint16_t pid_high;

	union {
		uint16_t pad[5];
		struct {
			uint16_t reserved;
			uint8_t security_sig[SMB_SIG_SIZE];
		} extra;
	} extra;

	uint16_t tid;
	uint16_t pid;
	uint16_t uid;
	uint16_t mid;
} smb_hdr_t;

/*
 * Encoded or packed SMB header in network ready format.
 */
typedef struct smb_hdrbuf {
	uint8_t hdr[SMB_HEADER_LEN];
} smb_hdrbuf_t;

/*
 * Protocol magic value as a 32-bit.  This will be 0xff 0x53 0x4d 0x42 on
 * the wire.
 */

#define	SMB_PROTOCOL_MAGIC	0x424d53ff
#define	SMB2_PROTOCOL_MAGIC	0x424d53fe

/*
 * Time and date encoding (CIFS Section 3.6). The date is encoded such
 * that the year has a range of 0-119, which represents 1980-2099. The
 * month range is 1-12, and the day range is 1-31.
 */
typedef struct smb_date {
	uint16_t day   : 5;
	uint16_t month : 4;
	uint16_t year  : 7;
} smb_date_t;

/*
 * The hours range is 0-23, the minutes range is 0-59 and the two_sec
 * range is 0-29.
 */
typedef struct smb_time {
	uint16_t two_sec : 5;
	uint16_t minutes : 6;
	uint16_t hours    : 5;
} smb_time_t;

/*
 * This is a 64-bit signed absolute time representing 100ns increments.
 * A positive value represents the absolute time since 1601AD. A
 * negative value represents a context specific relative time.
 */
typedef struct smb_time2 {
	uint32_t low_time;
	int32_t high_time;
} smb_time2_t;

/*
 * The number of seconds since Jan 1, 1970, 00:00:00.0.
 */
typedef uint32_t smb_utime_t;

#define	SMB_LM_NEGOTIATE_WORDCNT		13
#define	SMB_NT_NEGOTIATE_WORDCNT		17

#define	SMB_NAME83_EXTLEN			3
#define	SMB_NAME83_BASELEN			8
#define	SMB_NAME83_LEN				12

/* Share types */
#ifndef _SHARE_TYPES_DEFINED_
#define	_SHARE_TYPES_DEFINED_
#define	STYPE_DISKTREE			0x00000000
#define	STYPE_PRINTQ			0x00000001
#define	STYPE_DEVICE			0x00000002
#define	STYPE_IPC			0x00000003
#define	STYPE_MASK			0x0000000F
#define	STYPE_DFS			0x00000064
#define	STYPE_HIDDEN			0x80000000
#define	STYPE_SPECIAL			0x80000000
#endif /* _SHARE_TYPES_DEFINED_ */

#define	STYPE_ISDSK(S)	(((S) & STYPE_MASK) == STYPE_DISKTREE)
#define	STYPE_ISPRN(S)	(((S) & STYPE_MASK) == STYPE_PRINTQ)
#define	STYPE_ISDEV(S)	(((S) & STYPE_MASK) == STYPE_DEVICE)
#define	STYPE_ISIPC(S)	(((S) & STYPE_MASK) == STYPE_IPC)

/*
 * NtCreateAndX and NtTransactCreate creation flags: defined in CIFS
 * section 4.2.2
 *
 * Creation Flag Name         Value  Description
 * ========================== ====== ==================================
 * NT_CREATE_REQUEST_OPLOCK   0x02   Level I oplock requested
 * NT_CREATE_REQUEST_OPBATCH  0x04   Batch oplock requested
 * NT_CREATE_OPEN_TARGET_DIR  0x08   Target for open is a directory
 */
#define	NT_CREATE_FLAG_REQUEST_OPLOCK		0x02
#define	NT_CREATE_FLAG_REQUEST_OPBATCH		0x04
#define	NT_CREATE_FLAG_OPEN_TARGET_DIR		0x08
#define	NT_CREATE_FLAG_EXTENDED_RESPONSE	0x10

/*
 * The option flags valid in the SMB nt_create_andx call are a subset of
 * those defined in ntifs.h (ditto SMB nt_transact_create)
 */
#define	SMB_NTCREATE_VALID_OPTIONS (FILE_VALID_OPTION_FLAGS & ~( \
	FILE_SYNCHRONOUS_IO_ALERT | FILE_SYNCHRONOUS_IO_NONALERT |\
	FILE_RESERVE_OPFILTER))

/*
 * Oplocks levels as expressed in the SMB procotol, i.e.
 * in nt_create_andx and nt_transact_create responses.
 * The FS-level oplock interface flags are in ntifs.h
 * (See OPLOCK_LEVEL_...)
 */
#define	SMB_OPLOCK_NONE		0
#define	SMB_OPLOCK_EXCLUSIVE	1
#define	SMB_OPLOCK_BATCH	2
#define	SMB_OPLOCK_LEVEL_II	3

/*
 * Define the filter flags for NtNotifyChangeDirectoryFile
 */
#define	FILE_NOTIFY_CHANGE_FILE_NAME	0x00000001
#define	FILE_NOTIFY_CHANGE_DIR_NAME	0x00000002
#define	FILE_NOTIFY_CHANGE_NAME		0x00000003
#define	FILE_NOTIFY_CHANGE_ATTRIBUTES	0x00000004
#define	FILE_NOTIFY_CHANGE_SIZE		0x00000008
#define	FILE_NOTIFY_CHANGE_LAST_WRITE	0x00000010
#define	FILE_NOTIFY_CHANGE_LAST_ACCESS	0x00000020
#define	FILE_NOTIFY_CHANGE_CREATION	0x00000040
#define	FILE_NOTIFY_CHANGE_EA		0x00000080
#define	FILE_NOTIFY_CHANGE_SECURITY	0x00000100
#define	FILE_NOTIFY_CHANGE_STREAM_NAME	0x00000200
#define	FILE_NOTIFY_CHANGE_STREAM_SIZE	0x00000400
#define	FILE_NOTIFY_CHANGE_STREAM_WRITE	0x00000800
#define	FILE_NOTIFY_VALID_MASK		0x00000fff


/*
 * Define the file action type codes for NtNotifyChangeDirectoryFile
 */
#define	FILE_ACTION_ADDED		0x00000001
#define	FILE_ACTION_REMOVED		0x00000002
#define	FILE_ACTION_MODIFIED		0x00000003
#define	FILE_ACTION_RENAMED_OLD_NAME	0x00000004
#define	FILE_ACTION_RENAMED_NEW_NAME	0x00000005
#define	FILE_ACTION_ADDED_STREAM	0x00000006
#define	FILE_ACTION_REMOVED_STREAM	0x00000007
#define	FILE_ACTION_MODIFIED_STREAM	0x00000008
/* See also: FILE_ACTION_SUBDIR_CHANGED etc. */

/* Lock type flags */
#define	LOCKING_ANDX_NORMAL_LOCK	0x00
#define	LOCKING_ANDX_SHARED_LOCK	0x01
#define	LOCKING_ANDX_OPLOCK_RELEASE	0x02
#define	LOCKING_ANDX_CHANGE_LOCK_TYPE	0x04
#define	LOCKING_ANDX_CANCEL_LOCK	0x08
#define	LOCKING_ANDX_LARGE_FILES	0x10

#define	SMB_COM_CREATE_DIRECTORY	0x00
#define	SMB_COM_DELETE_DIRECTORY	0x01
#define	SMB_COM_OPEN			0x02
#define	SMB_COM_CREATE			0x03
#define	SMB_COM_CLOSE			0x04
#define	SMB_COM_FLUSH			0x05
#define	SMB_COM_DELETE			0x06
#define	SMB_COM_RENAME			0x07
#define	SMB_COM_QUERY_INFORMATION	0x08
#define	SMB_COM_SET_INFORMATION		0x09
#define	SMB_COM_READ			0x0A
#define	SMB_COM_WRITE			0x0B
#define	SMB_COM_LOCK_BYTE_RANGE		0x0C
#define	SMB_COM_UNLOCK_BYTE_RANGE	0x0D
#define	SMB_COM_CREATE_TEMPORARY	0x0E
#define	SMB_COM_CREATE_NEW		0x0F
#define	SMB_COM_CHECK_DIRECTORY		0x10
#define	SMB_COM_PROCESS_EXIT		0x11
#define	SMB_COM_SEEK			0x12
#define	SMB_COM_LOCK_AND_READ		0x13
#define	SMB_COM_WRITE_AND_UNLOCK	0x14

#define	SMB_COM_READ_RAW		0x1A
#define	SMB_COM_READ_MPX		0x1B
#define	SMB_COM_READ_MPX_SECONDARY	0x1C
#define	SMB_COM_WRITE_RAW		0x1D
#define	SMB_COM_WRITE_MPX		0x1E
#define	SMB_COM_WRITE_MPX_SECONDARY	0x1F
#define	SMB_COM_WRITE_COMPLETE		0x20

#define	SMB_COM_SET_INFORMATION2	0x22
#define	SMB_COM_QUERY_INFORMATION2	0x23
#define	SMB_COM_LOCKING_ANDX		0x24
#define	SMB_COM_TRANSACTION		0x25
#define	SMB_COM_TRANSACTION_SECONDARY	0x26
#define	SMB_COM_IOCTL			0x27
#define	SMB_COM_IOCTL_SECONDARY		0x28
#define	SMB_COM_COPY			0x29
#define	SMB_COM_MOVE			0x2A
#define	SMB_COM_ECHO			0x2B
#define	SMB_COM_WRITE_AND_CLOSE		0x2C
#define	SMB_COM_OPEN_ANDX		0x2D
#define	SMB_COM_READ_ANDX		0x2E
#define	SMB_COM_WRITE_ANDX		0x2F

#define	SMB_COM_CLOSE_AND_TREE_DISC	0x31
#define	SMB_COM_TRANSACTION2		0x32
#define	SMB_COM_TRANSACTION2_SECONDARY	0x33
#define	SMB_COM_FIND_CLOSE2		0x34
#define	SMB_COM_FIND_NOTIFY_CLOSE	0x35

#define	SMB_COM_TREE_CONNECT		0x70
#define	SMB_COM_TREE_DISCONNECT		0x71
#define	SMB_COM_NEGOTIATE		0x72
#define	SMB_COM_SESSION_SETUP_ANDX	0x73
#define	SMB_COM_LOGOFF_ANDX		0x74
#define	SMB_COM_TREE_CONNECT_ANDX	0x75

#define	SMB_COM_QUERY_INFORMATION_DISK	0x80
#define	SMB_COM_SEARCH			0x81
#define	SMB_COM_FIND			0x82
#define	SMB_COM_FIND_UNIQUE		0x83
#define	SMB_COM_FIND_CLOSE		0x84

#define	SMB_COM_NT_TRANSACT		0xA0
#define	SMB_COM_NT_TRANSACT_SECONDARY	0xA1
#define	SMB_COM_NT_CREATE_ANDX		0xA2
#define	SMB_COM_NT_CANCEL		0xA4

#define	SMB_COM_OPEN_PRINT_FILE		0xC0
#define	SMB_COM_WRITE_PRINT_FILE	0xC1
#define	SMB_COM_CLOSE_PRINT_FILE	0xC2
#define	SMB_COM_GET_PRINT_QUEUE		0xC3

#define	SMB_COM_NUM			0x100

/*
 * Flags field of the SMB header. The names in parenthesis represent
 * alternative names for the flags.
 *
 * SMB_FLAGS_LOCK_AND_READ_OK     If the server supports LockAndRead and
 * (SMB_FLAGS_LOCKS_SUBDIALECT)   WriteAndUnlock, it sets this bit in the
 *                                Negotiate response.
 *
 * SMB_FLAGS_SEND_NO_ACK          When on, the client guarantees that there
 * (SMB_FLAGS_RCV_BUF_POSTED)     is a receive buffer posted such that a
 *                                "Send-No-Ack" can be used by the server
 *                                to respond to the client's request.
 *
 * SMB_FLAGS_CASE_INSENSITIVE     This is part of the Flags field of every
 *                                SMB header. If this bit is set, then all
 *                                pathnames in the SMB should be treated as
 *                                case-insensitive. Otherwise pathnames are
 *                                case-sensitive.
 *
 * SMB_FLAGS_CANONICALIZED_PATHS  When on in SessionSetupX, this indicates
 *                                that all paths sent to the server are
 *                                already in OS/2 canonicalized format.
 *
 * OS/2 canonical format means that file/directory names are in upper case,
 * are valid characters, . and .. have been removed and single backslashes
 * are used as separators.
 *
 * SMB_FLAGS_OPLOCK               When set in an open file request SMBs
 *                                (Open, Create, OpenX, etc.) this bit
 *                                indicates a request for an oplock on the
 *                                file. When set in the response, this bit
 *                                indicates that the oplock was granted.
 *
 * SMB_FLAGS_OPLOCK_NOTIFY_ANY    When on, this bit indicates that the server
 *                                should notify the client on any request
 *                                that could cause the file to be changed.
 *                                If not set, the server only notifies the
 *                                client on other open requests on the file.
 *                                This bit is only relevant when
 *                                SMB_FLAGS_OPLOCK is set.
 *
 * SMB_FLAGS_SERVER_TO_REDIR      This bit indicates that the SMB is being
 * (SMB_FLAGS_REPLY)              sent from server to (client) redirector.
 */
#define	SMB_FLAGS_LOCK_AND_READ_OK	0x01
#define	SMB_FLAGS_SEND_NO_ACK		0x02
#define	SMB_FLAGS_RESERVED		0x04
#define	SMB_FLAGS_CASE_INSENSITIVE	0x08
#define	SMB_FLAGS_CANONICALIZED_PATHS	0x10
#define	SMB_FLAGS_OPLOCK		0x20
#define	SMB_FLAGS_OPLOCK_NOTIFY_ANY	0x40
#define	SMB_FLAGS_REPLY			0x80


/*
 * Flags2 field of the SMB header.
 *
 * SMB_FLAGS2_READ_IF_EXECUTE is also known as SMB_FLAGS2_PAGING_IO
 */
#define	SMB_FLAGS2_KNOWS_LONG_NAMES		0x0001
#define	SMB_FLAGS2_KNOWS_EAS			0x0002
#define	SMB_FLAGS2_SMB_SECURITY_SIGNATURE	0x0004
#define	SMB_FLAGS2_IS_LONG_NAME			0x0040
#define	SMB_FLAGS2_REPARSE_PATH			0x0400
#define	SMB_FLAGS2_EXT_SEC			0x0800
#define	SMB_FLAGS2_DFS				0x1000
#define	SMB_FLAGS2_READ_IF_EXECUTE		0x2000
#define	SMB_FLAGS2_NT_STATUS			0x4000
#define	SMB_FLAGS2_UNICODE			0x8000

#define	DIALECT_UNKNOWN		 0
#define	PC_NETWORK_PROGRAM_1_0	 1  /* The original MSNET SMB protocol */
#define	PCLAN1_0		 2  /* Some versions of the original MSNET */
#define	MICROSOFT_NETWORKS_1_03	 3  /* This is used for the MS-NET 1.03 */
#define	MICROSOFT_NETWORKS_3_0	 4  /* This is the  DOS LANMAN 1.0 specific */
#define	LANMAN1_0		 5  /* This is the first version of the full */
#define	LM1_2X002		 6  /* This is the first version of the full */
#define	DOS_LM1_2X002		 7  /* This is the dos equivalent of the */
#define	DOS_LANMAN2_1		 8  /* DOS LANMAN2.1 */
#define	LANMAN2_1		 9  /* OS/2 LANMAN2.1 */
#define	Windows_for_Workgroups_3_1a 10 /* Windows for Workgroups Version 1.0 */
#define	NT_LM_0_12		11  /* The SMB protocol designed for NT */
#define	DIALECT_SMB2002		12  /* SMB 2.002 (switch to SMB2) */
#define	DIALECT_SMB2XXX		13  /* SMB 2.??? (switch to SMB2) */

/*
 * SMB_TREE_CONNECT_ANDX  request flags
 *
 * The tree specified by TID in the SMB header
 * should be disconnected - disconnect errors
 * should be ignored.
 */
#define	SMB_TCONX_DISCONECT_TID		0x0001
/*
 * Client request for signing key protection.
 */
#define	SMB_TCONX_EXTENDED_SIGNATURES	0x0004
/*
 * Client request for extended information.
 */
#define	SMB_TCONX_EXTENDED_RESPONSE	0x0008

/*
 * SMB_TREE_CONNECT_ANDX OptionalSupport flags
 *
 * SMB_SUPPORT_SEARCH_BITS    The server supports SearchAttributes.
 * SMB_SHARE_IS_IN_DFS        The share is managed by DFS.
 * SMB_CSC_MASK               Offline-caching mask - see CSC values.
 * SMB_UNIQUE_FILE_NAME       The server uses long names and does not support
 *                            short names.  This indicates to clients that
 *                            they may perform directory name-space caching.
 * SMB_EXTENDED_SIGNATURES    The server will use signing key protection.
 *
 * SMB_CSC_CACHE_MANUAL_REINT Clients are allowed to cache files for offline
 *                            use as requested by users but automatic
 *                            file-by-file reintegration is not allowed.
 * SMB_CSC_CACHE_AUTO_REINT   Clients are allowed to automatically cache
 *                            files for offline use and file-by-file
 *                            reintegration is allowed.
 * SMB_CSC_CACHE_VDO          Clients are allowed to automatically cache files
 *                            for offline use, file-by-file reintegration is
 *                            allowed and clients are permitted to work from
 *                            their local cache even while offline.
 * SMB_CSC_CACHE_NONE         Client-side caching is disabled for this share.
 *
 * SHI1005_FLAGS_ACCESS_BASED_DIRECTORY_ENUM
 *			      The server will filter directory entries based
 *			      on the access permissions of the client.
 */
#define	SMB_SUPPORT_SEARCH_BITS		0x0001
#define	SMB_SHARE_IS_IN_DFS		0x0002
#define	SMB_CSC_MASK			0x000C
#define	SMB_UNIQUE_FILE_NAME		0x0010
#define	SMB_EXTENDED_SIGNATURES		0x0020

#define	SMB_CSC_CACHE_MANUAL_REINT	0x0000
#define	SMB_CSC_CACHE_AUTO_REINT	0x0004
#define	SMB_CSC_CACHE_VDO		0x0008
#define	SMB_CSC_CACHE_NONE		0x000C

#define	SHI1005_FLAGS_ACCESS_BASED_DIRECTORY_ENUM	0x0800
#define	SHI1005_FLAGS_ALLOW_NAMESPACE_CACHING		0x0400

/*
 * The subcommand codes, placed in SETUP[0], for named pipe operations are:
 * SubCommand Code	Value Description
 * ===================	===== =========================================
 */

#define	CallNamedPipe	0x54	/* open/write/read/close pipe */
#define	WaitNamedPipe	0x53	/* wait for pipe to be nonbusy */
#define	PeekNmPipe	0x23	/* read but don't remove data */
#define	QNmPHandState	0x21	/* query pipe handle modes */
#define	SetNmPHandState	0x01	/* set pipe handle modes */
#define	QNmPipeInfo	0x22	/* query pipe attributes */
#define	TransactNmPipe	0x26	/* write/read operation on pipe */
#define	RawReadNmPipe	0x11	/* read pipe in "raw" (non message mode) */
#define	RawWriteNmPipe	0x31	/* write pipe "raw" (non message mode) */



/*
 * Setup[0] Transaction2       Value  Description
 * Subcommand Code
 * ==========================  =====  =============================
 */

#define	TRANS2_OPEN2		0x00	/* Create file, extended attributes */
#define	TRANS2_FIND_FIRST2	0x01	/* Begin search for files */
#define	TRANS2_FIND_NEXT2	0x02	/* Resume search for files */
#define	TRANS2_QUERY_FS_INFORMATION 0x03 /* Get file system information */
#define	TRANS2_SET_FS_INFORMATION	0x04	/* Set file system info. */
#define	TRANS2_QUERY_PATH_INFORMATION 0x05 /* Get info, named file or dir */
#define	TRANS2_SET_PATH_INFORMATION 0x06 /* Set info, named file or dir */
#define	TRANS2_QUERY_FILE_INFORMATION 0x07 /* Get info, handle */
#define	TRANS2_SET_FILE_INFORMATION 0x08 /* Set info, handle */
#define	TRANS2_FSCTL		0x09	/* Not implemented by NT server */
#define	TRANS2_IOCTL2		0x0A	/* Not implemented by NT server */
#define	TRANS2_FIND_NOTIFY_FIRST 0x0B	/* Not implemented by NT server */
#define	TRANS2_FIND_NOTIFY_NEXT 0x0C	/* Not implemented by NT server */
#define	TRANS2_CREATE_DIRECTORY 0x0D	/* Create dir, extended attributes */
#define	TRANS2_SESSION_SETUP	0x0E	/* Session setup, extended security */
#define	TRANS2_GET_DFS_REFERRAL	0x10	/* Get a Dfs referral */
#define	TRANS2_REPORT_DFS_INCONSISTENCY 0x11 /* Report a Dfs inconsistency */

/*
 * Access Mode Encoding (CIFS/1.0 1996 Section 3.8).
 *
 * The desired access mode passed in SmbOpen and SmbOpenAndX has the following
 * mapping:
 *
 *    1111 11
 *    5432 1098 7654 3210
 *    rWrC rLLL rSSS rAAA
 *
 * where:
 *
 *    W - Write through mode.  No read ahead or write behind allowed on
 *        this file or device.  When protocol is returned, data is expected
 *        to be on the disk or device.
 *
 *    S - Sharing mode:
 *        0 - Compatibility mode (as in core open)
 *        1 - Deny read/write/execute (exclusive)
 *        2 - Deny write
 *        3 - Deny read/execute
 *        4 - Deny none
 *
 *    A - Access mode
 *        0 - Open for reading
 *        1 - Open for writing
 *        2 - Open for reading and writing
 *        3 - Open for execute
 *
 *    rSSSrAAA = 11111111 (hex FF) indicates FCB open (as in core protocol)
 *
 *    C - Cache mode
 *        0 - Normal file
 *        1 - Do not cache this file
 *
 *    L - Locality of reference
 *        0 - Locality of reference is unknown
 *        1 - Mainly sequential access
 *        2 - Mainly random access
 *        3 - Random access with some locality
 *        4 to 7 - Currently undefined
 */


#define	SMB_DA_SHARE_MASK		0x70
#define	SMB_DA_ACCESS_MASK		0x07
#define	SMB_DA_FCB_MASK			(UCHAR)0xFF

#define	SMB_DA_ACCESS_READ		0x00
#define	SMB_DA_ACCESS_WRITE		0x01
#define	SMB_DA_ACCESS_READ_WRITE	0x02
#define	SMB_DA_ACCESS_EXECUTE		0x03

#define	SMB_DA_SHARE_COMPATIBILITY	0x00
#define	SMB_DA_SHARE_EXCLUSIVE		0x10
#define	SMB_DA_SHARE_DENY_WRITE		0x20
#define	SMB_DA_SHARE_DENY_READ		0x30
#define	SMB_DA_SHARE_DENY_NONE		0x40

#define	SMB_DA_FCB			(UCHAR)0xFF

#define	SMB_CACHE_NORMAL		0x0000
#define	SMB_DO_NOT_CACHE		0x1000

#define	SMB_LR_UNKNOWN			0x0000
#define	SMB_LR_SEQUENTIAL		0x0100
#define	SMB_LR_RANDOM			0x0200
#define	SMB_LR_RANDOM_WITH_LOCALITY	0x0300
#define	SMB_LR_MASK			0x0F00

#define	SMB_DA_WRITE_THROUGH		0x4000

/*
 * Macros used for share reservation rule checking
 */

#define	SMB_DENY_READ(share_access) ((share_access & FILE_SHARE_READ) == 0)

#define	SMB_DENY_WRITE(share_access) ((share_access & FILE_SHARE_WRITE) == 0)

#define	SMB_DENY_DELETE(share_access) ((share_access & FILE_SHARE_DELETE) == 0)

#define	SMB_DENY_RW(share_access) \
	((share_access & (FILE_SHARE_READ | FILE_SHARE_WRITE)) == 0)

#define	SMB_DENY_ALL(share_access) (share_access == 0)

#define	SMB_DENY_NONE(share_access) (share_access == FILE_SHARE_ALL)

/*
 * The SMB open function determines what action should be taken depending
 * on the existence or lack thereof of files used in the operation.  It
 * has the following mapping:
 *
 *    1111 1
 *    5432 1098 7654 3210
 *    rrrr rrrr rrrC rrOO
 *
 * where:
 *
 *    O - Open (action to be taken if the target file exists)
 *        0 - Fail
 *        1 - Open or Append file
 *        2 - Truncate file
 *
 *    C - Create (action to be taken if the target file does not exist)
 *        0 - Fail
 *        1 - Create file
 */

#define	SMB_OFUN_OPEN_MASK		0x3
#define	SMB_OFUN_CREATE_MASK		0x10

#define	SMB_OFUN_OPEN_FAIL		0
#define	SMB_OFUN_OPEN_APPEND		1
#define	SMB_OFUN_OPEN_OPEN		1
#define	SMB_OFUN_OPEN_TRUNCATE		2

#define	SMB_OFUN_CREATE_FAIL		0x00
#define	SMB_OFUN_CREATE_CREATE		0x10

/*
 * The Action field of OpenAndX has the following format:
 *
 *    1111 11
 *    5432 1098 7654 3210
 *    Lrrr rrrr rrrr rrOO
 *
 * where:
 *
 *    L - Opportunistic lock.  1 if lock granted, else 0.
 *
 *    O - Open action:
 *        1 - The file existed and was opened
 *        2 - The file did not exist but was created
 *        3 - The file existed and was truncated
 */

#define	SMB_OACT_OPENED			0x01
#define	SMB_OACT_CREATED		0x02
#define	SMB_OACT_TRUNCATED		0x03
#define	SMB_OACT_OPLOCK			0x8000

#define	SMB_FTYPE_DISK			0
#define	SMB_FTYPE_BYTE_PIPE		1
#define	SMB_FTYPE_MESG_PIPE		2
#define	SMB_FTYPE_PRINTER		3
#define	SMB_FTYPE_UNKNOWN		0xFFFF

#define	SMB_DEVST_BLOCKING		0x8000
#define	SMB_DEVST_ENDPOINT		0x4000
#define	SMB_DEVST_TYPE_MASK		0x0C00
#define	SMB_DEVST_TYPE_BYTE_PIPE	0x0000
#define	SMB_DEVST_TYPE_MESG_PIPE	0x0400
#define	SMB_DEVST_RMODE_MASK		0x0300
#define	SMB_DEVST_RMODE_BYTES		0x0000
#define	SMB_DEVST_RMODE_MESGS		0x0100
#define	SMB_DEVST_ICOUNT_MASK		0x00FF		/* not used */

#define	SMB_FTYPE_IS_DISK(F)		((F) == SMB_FTYPE_DISK)
#define	SMB_FTYPE_IS_PIPE(F) \
	(((F) == SMB_FTYPE_BYTE_PIPE) || ((F) == SMB_FTYPE_MESG_PIPE))
#define	SMB_FTYPE_IS_PRINTER(F)		((F) == SMB_FTYPE_PRINTER)

/*
 * TRANS2_FIND
 */
#define	SMB_FIND_FILE_DIRECTORY_INFO		0x101
#define	SMB_FIND_FILE_FULL_DIRECTORY_INFO	0x102
#define	SMB_FIND_FILE_NAMES_INFO		0x103
#define	SMB_FIND_FILE_BOTH_DIRECTORY_INFO	0x104
#define	SMB_FIND_FILE_ID_FULL_DIRECTORY_INFO	0x105
#define	SMB_FIND_FILE_ID_BOTH_DIRECTORY_INFO	0x106
#define	SMB_MAC_FIND_BOTH_HFS_INFO		MAC_FIND_BOTH_HFS_INFO


/*
 * Flags for TRANS2_FIND_FIRST2 and TRANS2_FIND_NEXT2 (NTDDK).
 *
 * If SMB_FIND_RETURN_RESUME_KEYS was set in the request parameters,
 * each entry is preceded by a four-byte resume key.
 */
#define	SMB_FIND_CLOSE_AFTER_REQUEST	0x01
#define	SMB_FIND_CLOSE_AT_EOS		0x02
#define	SMB_FIND_RETURN_RESUME_KEYS	0x04
#define	SMB_FIND_CONTINUE_FROM_LAST	0x08
#define	SMB_FIND_WITH_BACKUP_INTENT	0x10


/*
 * TRANS2_QUERY_FS_INFORMATION
 *
 * SMB_QUERY_FS_QUOTA_INFO, SMB_QUERY_FS_CONTROL_INFO are not used in Windows
 * NT, and are not used in any post NT Windows operating systems. If a server
 * receives these information levels from a client, it should handle them as
 * invalid information levels.
 */
#define	SMB_INFO_ALLOCATION		1
#define	SMB_INFO_VOLUME			2
#define	SMB_QUERY_FS_LABEL_INFO		0x101
#define	SMB_QUERY_FS_VOLUME_INFO	0x102
#define	SMB_QUERY_FS_SIZE_INFO		0x103
#define	SMB_QUERY_FS_DEVICE_INFO	0x104
#define	SMB_QUERY_FS_ATTRIBUTE_INFO	0x105
#define	SMB_QUERY_FS_QUOTA_INFO		0x106
#define	SMB_QUERY_FS_CONTROL_INFO	0x107

#define	SMB_MAC_QUERY_FS_INFO		MAC_QUERY_FS_INFO

/*
 * Internal use only.
 * Define information levels to represent the following requests:
 *    smb_query_information
 *    smb_query_information2
 *    smb_set_information
 *    smb_set_information2
 */
#define	SMB_QUERY_INFORMATION	0x3001
#define	SMB_QUERY_INFORMATION2	0x3002
#define	SMB_SET_INFORMATION	0x3001
#define	SMB_SET_INFORMATION2	0x3002

/* TRANS2_QUERY_{PATH,FILE}_INFORMATION */
#define	SMB_INFO_STANDARD		 1	/* query, set */
#define	SMB_INFO_QUERY_EA_SIZE		 2	/* query */
#define	SMB_INFO_SET_EAS		 2	/* set */
#define	SMB_INFO_QUERY_EAS_FROM_LIST	 3	/* query */
#define	SMB_INFO_QUERY_ALL_EAS		 4	/* query */
#define	SMB_INFO_QUERY_FULL_NAME	 5	/* unused */
#define	SMB_INFO_IS_NAME_VALID		 6	/* query */

#define	SMB_QUERY_FILE_BASIC_INFO	 0x101
#define	SMB_QUERY_FILE_STANDARD_INFO	 0x102
#define	SMB_QUERY_FILE_EA_INFO		 0x103
#define	SMB_QUERY_FILE_NAME_INFO	 0x104
#define	SMB_QUERY_FILE_ALLOCATION_INFO	 0x105	/* unused */
#define	SMB_QUERY_FILE_END_OF_FILE_INFO	 0x106	/* unused */
#define	SMB_QUERY_FILE_ALL_INFO		 0x107
#define	SMB_QUERY_FILE_ALT_NAME_INFO	 0x108
#define	SMB_QUERY_FILE_STREAM_INFO	 0x109
#define	SMB_QUERY_FILE_COMPRESSION_INFO	 0x10B

#define	SMB_MAC_SET_FINDER_INFO		MAC_SET_FINDER_INFO
#define	SMB_MAC_DT_ADD_APPL		MAC_DT_ADD_APPL
#define	SMB_MAC_DT_REMOVE_APPL		MAC_DT_REMOVE_APPL
#define	SMB_MAC_DT_GET_APPL		MAC_DT_GET_APPL
#define	SMB_MAC_DT_GET_ICON		MAC_DT_GET_ICON
#define	SMB_MAC_DT_GET_ICON_INFO	MAC_DT_GET_ICON_INFO
#define	SMB_MAC_DT_ADD_ICON		MAC_DT_ADD_ICON

#define	SMB_SET_FILE_BASIC_INFO		0x101
#define	SMB_SET_FILE_DISPOSITION_INFO	0x102
#define	SMB_SET_FILE_ALLOCATION_INFO	0x103
#define	SMB_SET_FILE_END_OF_FILE_INFO	0x104


/* NT passthrough levels - see ntifs.h FILE_INFORMATION_CLASS */
#define	SMB_FILE_BASIC_INFORMATION		1004
#define	SMB_FILE_STANDARD_INFORMATION		1005
#define	SMB_FILE_INTERNAL_INFORMATION		1006
#define	SMB_FILE_EA_INFORMATION			1007
#define	SMB_FILE_ACCESS_INFORMATION		1008
#define	SMB_FILE_NAME_INFORMATION		1009
#define	SMB_FILE_RENAME_INFORMATION		1010
#define	SMB_FILE_LINK_INFORMATION		1011
#define	SMB_FILE_DISPOSITION_INFORMATION	1013
#define	SMB_FILE_ALL_INFORMATION		1018
#define	SMB_FILE_ALLOCATION_INFORMATION		1019
#define	SMB_FILE_END_OF_FILE_INFORMATION	1020
#define	SMB_FILE_ALT_NAME_INFORMATION		1021
#define	SMB_FILE_STREAM_INFORMATION		1022
#define	SMB_FILE_COMPRESSION_INFORMATION	1028
#define	SMB_FILE_NETWORK_OPEN_INFORMATION	1034
#define	SMB_FILE_ATTR_TAG_INFORMATION		1035

/* NT passthrough levels - see ntifs.h FILE_FS_INFORMATION_CLASS */
#define	SMB_FILE_FS_VOLUME_INFORMATION		1001
#define	SMB_FILE_FS_LABEL_INFORMATION		1002
#define	SMB_FILE_FS_SIZE_INFORMATION		1003
#define	SMB_FILE_FS_DEVICE_INFORMATION		1004
#define	SMB_FILE_FS_ATTRIBUTE_INFORMATION	1005
#define	SMB_FILE_FS_CONTROL_INFORMATION		1006
#define	SMB_FILE_FS_FULLSIZE_INFORMATION	1007
#define	SMB_FILE_FS_OBJECTID_INFORMATION	1008
#define	SMB_FILE_FS_DRIVERPATH_INFORMATION	1009

/*
 * The following bits may be set in the SecurityMode field of the
 * SMB_COM_NEGOTIATE response.
 *
 * Note: Same as the NTDDK definitions.
 */
#define	NEGOTIATE_USER_SECURITY				0x01
#define	NEGOTIATE_ENCRYPT_PASSWORDS			0x02
#define	NEGOTIATE_SECURITY_SIGNATURES_ENABLED		0x04
#define	NEGOTIATE_SECURITY_SIGNATURES_REQUIRED		0x08


/*
 * Negotiated Capabilities (CIFS/1.0 section 4.1.1)
 *
 * Capabilities allow the server to tell the client what it supports.
 * Undefined bits MUST be set to zero by servers, and MUST be ignored
 * by clients. The bit definitions are:
 *
 * Capability Name	 Encoding   Meaning
 * ====================	 ========   ==================================
 * CAP_RAW_MODE		 0x0001	    The server supports SMB_COM_READ_RAW and
 *				    SMB_COM_WRITE_RAW (obsolescent)
 * CAP_MPX_MODE		 0x0002	    The server supports SMB_COM_READ_MPX and
 *				    SMB_COM_WRITE_MPX (obsolescent)
 * CAP_UNICODE		 0x0004	    The server supports Unicode strings
 * CAP_LARGE_FILES	 0x0008	    The server supports large files with 64
 *				    bit offsets
 * CAP_NT_SMBS		 0x0010	    The server supports the SMBs particular
 *				    to the NT LM 0.12 dialect.
 *				    Implies CAP_NT_FIND.
 * CAP_RPC_REMOTE_APIS	 0x0020	    The server supports remote admin API
 *				    requests via DCE RPC
 * CAP_STATUS32		 0x0040	    The server can respond with 32 bit
 *				    status codes in Status.Status
 * CAP_LEVEL_II_OPLOCKS	 0x0080	    The server supports level 2 oplocks
 * CAP_LOCK_AND_READ	 0x0100	    The server supports the
 *				    SMB_COM_LOCK_AND_READ SMB
 * CAP_NT_FIND		 0x0200
 * CAP_BULK_TRANSFER	 0x0400
 * CAP_COMPRESSED_BULK	 0x0800
 * CAP_DFS		 0x1000	    The server is DFS aware
 * CAP_INFOLEVEL_PASSTHRU 0x2000    The server supports passthru information
 *				    level processing capability.
 * CAP_LARGE_READX	 0x4000	    The server supports large
 *				    SMB_COM_READ_ANDX
 * CAP_LARGE_WRITEX	 0x8000	    The server supports large
 *				    SMB_COM_WRITE_ANDX
 * CAP_RESERVED		 0x02000000 Reserved for future use.
 * CAP_EXTENDED_SECURITY 0x80000000 The server supports extended security
 *				    exchanges.
 *
 * Extended security exchanges provides a means of supporting arbitrary
 * authentication protocols within CIFS. Security blobs are opaque to the
 * CIFS protocol; they are messages in some authentication protocol that
 * has been agreed upon by client and server by some out of band mechanism,
 * for which CIFS merely functions as a transport. When
 * CAP_EXTENDED_SECURITY is negotiated, the server includes a first
 * security blob in its response; subsequent security blobs are exchanged
 * in SMB_COM_SESSION_SETUP_ANDX requests and responses until the
 * authentication protocol terminates.
 */
#define	CAP_RAW_MODE			0x0001
#define	CAP_MPX_MODE			0x0002
#define	CAP_UNICODE			0x0004
#define	CAP_LARGE_FILES			0x0008
#define	CAP_NT_SMBS			0x0010
#define	CAP_RPC_REMOTE_APIS		0x0020
#define	CAP_STATUS32			0x0040
#define	CAP_LEVEL_II_OPLOCKS		0x0080
#define	CAP_LOCK_AND_READ		0x0100
#define	CAP_NT_FIND			0x0200
#define	CAP_BULK_TRANSFER		0x0400
#define	CAP_COMPRESSED_BULK		0x0800
#define	CAP_DFS				0x1000
#define	CAP_INFOLEVEL_PASSTHRU		0x2000
#define	CAP_LARGE_READX			0x4000
#define	CAP_LARGE_WRITEX		0x8000
#define	CAP_RESERVED			0x02000000
#define	CAP_EXTENDED_SECURITY		0x80000000


/*
 * Different device types according to NT
 */
#define	FILE_DEVICE_BEEP		0x00000001
#define	FILE_DEVICE_CD_ROM		0x00000002
#define	FILE_DEVICE_CD_ROM_FILE_SYSTEM	0x00000003
#define	FILE_DEVICE_CONTROLLER		0x00000004
#define	FILE_DEVICE_DATALINK		0x00000005
#define	FILE_DEVICE_DFS			0x00000006
#define	FILE_DEVICE_DISK		0x00000007
#define	FILE_DEVICE_DISK_FILE_SYSTEM	0x00000008
#define	FILE_DEVICE_FILE_SYSTEM		0x00000009
#define	FILE_DEVICE_INPORT_PORT		0x0000000a
#define	FILE_DEVICE_KEYBOARD		0x0000000b
#define	FILE_DEVICE_MAILSLOT		0x0000000c
#define	FILE_DEVICE_MIDI_IN		0x0000000d
#define	FILE_DEVICE_MIDI_OUT		0x0000000e
#define	FILE_DEVICE_MOUSE		0x0000000f
#define	FILE_DEVICE_MULTI_UNC_PROVIDER	0x00000010
#define	FILE_DEVICE_NAMED_PIPE		0x00000011
#define	FILE_DEVICE_NETWORK		0x00000012
#define	FILE_DEVICE_NETWORK_BROWSER	0x00000013
#define	FILE_DEVICE_NETWORK_FILE_SYSTEM 0x00000014
#define	FILE_DEVICE_NULL		0x00000015
#define	FILE_DEVICE_PARALLEL_PORT	0x00000016
#define	FILE_DEVICE_PHYSICAL_NETCARD	0x00000017
#define	FILE_DEVICE_PRINTER		0x00000018
#define	FILE_DEVICE_SCANNER		0x00000019
#define	FILE_DEVICE_SERIAL_MOUSE_PORT	0x0000001a
#define	FILE_DEVICE_SERIAL_PORT		0x0000001b
#define	FILE_DEVICE_SCREEN		0x0000001c
#define	FILE_DEVICE_SOUND		0x0000001d
#define	FILE_DEVICE_STREAMS		0x0000001e
#define	FILE_DEVICE_TAPE		0x0000001f
#define	FILE_DEVICE_TAPE_FILE_SYSTEM	0x00000020
#define	FILE_DEVICE_TRANSPORT		0x00000021
#define	FILE_DEVICE_UNKNOWN		0x00000022
#define	FILE_DEVICE_VIDEO		0x00000023
#define	FILE_DEVICE_VIRTUAL_DISK	0x00000024
#define	FILE_DEVICE_WAVE_IN		0x00000025
#define	FILE_DEVICE_WAVE_OUT		0x00000026
#define	FILE_DEVICE_8042_PORT		0x00000027
#define	FILE_DEVICE_NETWORK_REDIRECTOR	0x00000028
#define	FILE_DEVICE_BATTERY		0x00000029
#define	FILE_DEVICE_BUS_EXTENDER	0x0000002a
#define	FILE_DEVICE_MODEM		0x0000002b
#define	FILE_DEVICE_VDM			0x0000002c

/*
 * Some of these device types are not currently accessible over the network
 * and may never be accessible over the network. Some may change to be
 *
 * accessible over the network. The values for device types that may never
 * be accessible over the network may be redefined to be just reserved at
 * some date in the future.
 *
 * Characteristics is the sum of any of the following:
 */

#define	FILE_REMOVABLE_MEDIA		0x00000001
#define	FILE_READ_ONLY_DEVICE		0x00000002
#define	FILE_FLOPPY_DISKETTE		0x00000004
#define	FILE_WRITE_ONE_MEDIA		0x00000008
#define	FILE_REMOTE_DEVICE		0x00000010
#define	FILE_DEVICE_IS_MOUNTED		0x00000020
#define	FILE_VIRTUAL_VOLUME		0x00000040

/*
 * File System Control Flags for smb_com_trans2_query|set_fs_information
 * level SMB_FILE_FS_CONTROL_INFORMATION
 */
#define	FILE_VC_QUOTA_TRACK		0x00000001
#define	FILE_VC_QUOTA_ENFORCE		0x00000002
#define	FILE_VC_CONTENT_INDEX_DISABLED	0x00000008
#define	FILE_VC_LOG_QUOTA_THRESHOLD	0x00000010
#define	FILE_VC_LOG_QUOTA_LIMIT		0x00000020
#define	FILE_VC_LOG_VOLUME_THRESHOLD	0x00000040
#define	FILE_VC_LOG_VOLUME_LIMIT	0x00000080
#define	FILE_VC_QUOTAS_INCOMPLETE	0x00000100
#define	FILE_VC_QUOTAS_REBUILDING	0x00000200

/*
 * CREATE_ANDX ShareAccess Flags
 */

#define	FILE_SHARE_NONE			0x00000000
#define	FILE_SHARE_READ			0x00000001
#define	FILE_SHARE_WRITE		0x00000002
#define	FILE_SHARE_DELETE		0x00000004
#define	FILE_SHARE_ALL			0x00000007
#define	FILE_SHARE_VALID_FLAGS		0x00000007


/*
 * CREATE_ANDX CreateDisposition flags
 *
 * FILE_SUPERSEDE     If the file already exists it should be superseded
 *		      by the specified file. If the file does not already
 *		      exist then it should be created.
 *
 * FILE_CREATE	      If the file already exists the operation should fail.
 *		      If the file does not already exist then it should be
 *		      created. (aka CREATE_NEW)
 *
 * FILE_OPEN	      If the file already exists then it should be opened.
 *		      If the file does not already exist then the operation
 *		      should fail. (aka OPEN_EXISTING)
 *
 * FILE_OPEN_IF	      If the file already exists then it should be opened.
 *		      If the file does not already exist then it should be
 *		      created. (aka OPEN_ALWAYS)
 *
 * FILE_OVERWRITE     If the file already exists, it should be opened and
 *		      overwritten. If the file does not already exist then
 *		      the operation should fail. (aka TRUNCATE_EXISTING)
 *
 * FILE_OVERWRITE_IF  If the file already exists, it should be opened and
 *		      overwritten. If the file does not already exist then
 *		      it should be created. (aka CREATE_ALWAYS)
 */
#define	FILE_SUPERSEDE			0x00000000
#define	FILE_OPEN			0x00000001
#define	FILE_CREATE			0x00000002
#define	FILE_OPEN_IF			0x00000003
#define	FILE_OVERWRITE			0x00000004
#define	FILE_OVERWRITE_IF		0x00000005
#define	FILE_MAXIMUM_DISPOSITION	0x00000005

/*
 * CREATE_ANDX Impersonation levels
 */

#define	SECURITY_ANONYMOUS	0x00000001
#define	SECURITY_IDENTIFICATION	0x00000002
#define	SECURITY_IMPERSONATION	0x00000003
#define	SECURITY_DELEGATION	0x00000004

/*
 * CREATE_ANDX SecurityFlags
 */

#define	SECURITY_CONTEXT_TRACKING	0x00000001
#define	SECURITY_EFFECTIVE_ONLY		0x00000002

/*
 * Server types
 */
#define	SV_WORKSTATION		0x00000001	/* All workstations */
#define	SV_SERVER		0x00000002	/* All servers */
#define	SV_SQLSERVER		0x00000004	/* running with SQL server */
#define	SV_DOMAIN_CTRL		0x00000008	/* Primary domain controller */
#define	SV_DOMAIN_BAKCTRL	0x00000010	/* Backup domain controller */
#define	SV_TIME_SOURCE		0x00000020	/* running timesource service */
#define	SV_AFP			0x00000040	/* Apple File Protocol */
#define	SV_NOVELL		0x00000080	/* Novell servers */
#define	SV_DOMAIN_MEMBER	0x00000100	/* Domain Member */
#define	SV_PRINTQ_SERVER	0x00000200	/* Server sharing print queue */
#define	SV_DIALIN_SERVER	0x00000400	/* Server running dialin */
#define	SV_XENIX_SERVER		0x00000800	/* Xenix server */
#define	SV_NT			0x00001000	/* NT server */
#define	SV_WFW			0x00002000	/* Server running Windows for */
#define	SV_SERVER_NT		0x00008000	/* Windows NT non DC server */
#define	SV_POTENTIAL_BROWSER	0x00010000	/* can run browser service */
#define	SV_BACKUP_BROWSER	0x00020000	/* Backup browser server */
#define	SV_MASTER_BROWSER	0x00040000	/* Master browser server */
#define	SV_DOMAIN_MASTER	0x00080000	/* Domain Master Browser */
#define	SV_OSF			0x00100000	/* OSF operating system */
#define	SV_VMS			0x00200000	/* VMS operating system */
#define	SV_WINDOWS_95_PLUS	0x00400000	/* Windows 95 or better */

#define	SV_LOCAL_LIST_ONLY	0x40000000	/* Enumerate only "local" */
#define	SV_TYPE_DOMAIN_ENUM	0x80000000	/*  Enumerate Domains */

#define	MY_SERVER_TYPE	(SV_SERVER | SV_NT | SV_SERVER_NT)


#define	PRQ_ACTIVE	0	/* Active */
#define	PRQ_PAUSE	1	/* Paused */
#define	PRQ_ERROR	2	/* Error Occurred */
#define	PRQ_PENDING	3	/* Deletion pending */

#define	PRJ_QS_QUEUED	0	/* Active */
#define	PRJ_QS_PAUSED	1	/* Paused */
#define	PRJ_QS_SPOOLING	2	/* Paused */
#define	PRJ_QS_PRINTING	3	/* Paused */


#define	SHARE_ACCESS_READ	0x01	/* read & execute from resource	*/
#define	SHARE_ACCESS_WRITE	0x02	/* write data to resource	*/
#define	SHARE_ACCESS_CREATE	0x04	/* create an instance of	*/
#define	SHARE_ACCESS_EXEC	0x08	/* execute from resource	*/
#define	SHARE_ACCESS_DELETE	0x10	/* Permission to delete the resource */
#define	SHARE_ACCESS_ATTRIB	0x20	/* Permission to modify the resource */
#define	SHARE_ACCESS_PERM	0x40	/* Permission to change permissions */
#define	SHARE_ACCESS_ALL	0x7F	/* All of the above permissions	*/


/*
 * SMB_COM_NT_TRANSACTION sub-command codes (CIFS/1.0 section 5.3)
 *
 * SubCommand Code		   Value Description
 * =============================== ===== =================================
 * NT_TRANSACT_CREATE		   1	 File open/create
 * NT_TRANSACT_IOCTL		   2	 Device IOCTL
 * NT_TRANSACT_SET_SECURITY_DESC   3	 Set security descriptor
 * NT_TRANSACT_NOTIFY_CHANGE	   4	 Start directory watch
 * NT_TRANSACT_RENAME		   5	 Reserved (handle-based rename)
 * NT_TRANSACT_QUERY_SECURITY_DESC 6	 Retrieve security descriptor
 * NT_TRANSACT_QUERY_QUOTA	   7	 Retrieve quota information
 * NT_TRANSACT_SET_QUOTA	   8	 Set quota information
 */
#define	NT_TRANSACT_MIN_FUNCTION	1

#define	NT_TRANSACT_CREATE		1
#define	NT_TRANSACT_IOCTL		2
#define	NT_TRANSACT_SET_SECURITY_DESC	3
#define	NT_TRANSACT_NOTIFY_CHANGE	4
#define	NT_TRANSACT_RENAME		5
#define	NT_TRANSACT_QUERY_SECURITY_DESC 6
#define	NT_TRANSACT_QUERY_QUOTA		7
#define	NT_TRANSACT_SET_QUOTA		8

#define	NT_TRANSACT_MAX_FUNCTION	8


/*
 * Pipe states
 */
#define	SMB_PIPE_READMODE_BYTE		0x0000
#define	SMB_PIPE_READMODE_MESSAGE	0x0100
#define	SMB_PIPE_TYPE_BYTE		0x0000
#define	SMB_PIPE_TYPE_MESSAGE		0x0400
#define	SMB_PIPE_END_CLIENT		0x0000
#define	SMB_PIPE_END_SERVER		0x4000
#define	SMB_PIPE_WAIT			0x0000
#define	SMB_PIPE_NOWAIT			0x8000
#define	SMB_PIPE_UNLIMITED_INSTANCES	0x00FF

/*
 * smb_com_seek request
 */
#define	SMB_SEEK_SET	0 /* set file offset to specified offset */
#define	SMB_SEEK_CUR	1 /* set file offset to current plus specified offset */
#define	SMB_SEEK_END	2 /* set file offset to EOF plus specified offset */

/*
 * API Numbers for Transact based RAP (Remote Administration Protocol) calls
 */
#define	API_WshareEnum			0
#define	API_WshareGetInfo		1
#define	API_WshareSetInfo		2
#define	API_WshareAdd			3
#define	API_WshareDel			4
#define	API_NetShareCheck		5
#define	API_WsessionEnum		6
#define	API_WsessionGetInfo		7
#define	API_WsessionDel			8
#define	API_WconnectionEnum		9
#define	API_WfileEnum			10
#define	API_WfileGetInfo		11
#define	API_WfileClose			12
#define	API_WserverGetInfo		13
#define	API_WserverSetInfo		14
#define	API_WserverDiskEnum		15
#define	API_WserverAdminCommand		16
#define	API_NetAuditOpen		17
#define	API_WauditClear			18
#define	API_NetErrorLogOpen		19
#define	API_WerrorLogClear		20
#define	API_NetCharDevEnum		21
#define	API_NetCharDevGetInfo		22
#define	API_WCharDevControl		23
#define	API_NetCharDevQEnum		24
#define	API_NetCharDevQGetInfo		25
#define	API_WCharDevQSetInfo		26
#define	API_WCharDevQPurge		27
#define	API_WCharDevQPurgeSelf		28
#define	API_WMessageNameEnum		29
#define	API_WMessageNameGetInfo		30
#define	API_WMessageNameAdd		31
#define	API_WMessageNameDel		32
#define	API_WMessageNameFwd		33
#define	API_WMessageNameUnFwd		34
#define	API_WMessageBufferSend		35
#define	API_WMessageFileSend		36
#define	API_WMessageLogFileSet		37
#define	API_WMessageLogFileGet		38
#define	API_WServiceEnum		39
#define	API_WServiceInstall		40
#define	API_WServiceControl		41
#define	API_WAccessEnum			42
#define	API_WAccessGetInfo		43
#define	API_WAccessSetInfo		44
#define	API_WAccessAdd			45
#define	API_WAccessDel			46
#define	API_WGroupEnum			47
#define	API_WGroupAdd			48
#define	API_WGroupDel			49
#define	API_WGroupAddUser		50
#define	API_WGroupDelUser		51
#define	API_WGroupGetUsers		52
#define	API_WUserEnum			53
#define	API_WUserAdd			54
#define	API_WUserDel			55
#define	API_WUserGetInfo		56
#define	API_WUserSetInfo		57
#define	API_WUserPasswordSet		58
#define	API_WUserGetGroups		59
#define	API_DeadTableEntry		60
#define	API_WWkstaSetUID		62
#define	API_WWkstaGetInfo		63
#define	API_WWkstaSetInfo		64
#define	API_WUseEnum			65
#define	API_WUseAdd			66
#define	API_WUseDel			67
#define	API_WUseGetInfo			68
#define	API_WPrintQEnum			69
#define	API_WPrintQGetInfo		70
#define	API_WPrintQSetInfo		71
#define	API_WPrintQAdd			72
#define	API_WPrintQDel			73
#define	API_WPrintQPause		74
#define	API_WPrintQContinue		75
#define	API_WPrintJobEnum		76
#define	API_WPrintJobGetInfo		77
#define	API_WPrintJobSetInfo_OLD	78
#define	API_WPrintJobDel		81
#define	API_WPrintJobPause		82
#define	API_WPrintJobContinue		83
#define	API_WPrintDestEnum		84
#define	API_WPrintDestGetInfo		85
#define	API_WPrintDestControl		86
#define	API_WProfileSave		87
#define	API_WProfileLoad		88
#define	API_WStatisticsGet		89
#define	API_WStatisticsClear		90
#define	API_NetRemoteTOD		91
#define	API_WNetBiosEnum		92
#define	API_WNetBiosGetInfo		93
#define	API_NetServerEnum		94
#define	API_I_NetServerEnum		95
#define	API_WServiceGetInfo		96
#define	API_WPrintQPurge		103
#define	API_NetServerEnum2		104
#define	API_WAccessGetUserPerms		105
#define	API_WGroupGetInfo		106
#define	API_WGroupSetInfo		107
#define	API_WGroupSetUsers		108
#define	API_WUserSetGroups		109
#define	API_WUserModalsGet		110
#define	API_WUserModalsSet		111
#define	API_WFileEnum2			112
#define	API_WUserAdd2			113
#define	API_WUserSetInfo2		114
#define	API_WUserPasswordSet2		115
#define	API_I_NetServerEnum2		116
#define	API_WConfigGet2			117
#define	API_WConfigGetAll2		118
#define	API_WGetDCName			119
#define	API_NetHandleGetInfo		120
#define	API_NetHandleSetInfo		121
#define	API_WStatisticsGet2		122
#define	API_WBuildGetInfo		123
#define	API_WFileGetInfo2		124
#define	API_WFileClose2			125
#define	API_WNetServerReqChallenge	126
#define	API_WNetServerAuthenticate	127
#define	API_WNetServerPasswordSet	128
#define	API_WNetAccountDeltas		129
#define	API_WNetAccountSync		130
#define	API_WUserEnum2			131
#define	API_WWkstaUserLogon		132
#define	API_WWkstaUserLogoff		133
#define	API_WLogonEnum			134
#define	API_WErrorLogRead		135
#define	API_WI_NetPathType		136
#define	API_WI_NetPathCanonicalize	137
#define	API_WI_NetPathCompare		138
#define	API_WI_NetNameValidate		139
#define	API_WI_NetNameCanonicalize	140
#define	API_WI_NetNameCompare		141
#define	API_WAuditRead			142
#define	API_WPrintDestAdd		143
#define	API_WPrintDestSetInfo		144
#define	API_WPrintDestDel		145
#define	API_WUserValidate2		146
#define	API_WPrintJobSetInfo		147
#define	API_TI_NetServerDiskEnum	148
#define	API_TI_NetServerDiskGetInfo	149
#define	API_TI_FTVerifyMirror		150
#define	API_TI_FTAbortVerify		151
#define	API_TI_FTGetInfo		152
#define	API_TI_FTSetInfo		153
#define	API_TI_FTLockDisk		154
#define	API_TI_FTFixError		155
#define	API_TI_FTAbortFix		156
#define	API_TI_FTDiagnoseError		157
#define	API_TI_FTGetDriveStats		158
#define	API_TI_FTErrorGetInfo		160
#define	API_NetAccessCheck		163
#define	API_NetAlertRaise		164
#define	API_NetAlertStart		165
#define	API_NetAlertStop		166
#define	API_NetAuditWrite		167
#define	API_NetIRemoteAPI		168
#define	API_NetServiceStatus		169
#define	API_I_NetServerRegister		170
#define	API_I_NetServerDeregister	171
#define	API_I_NetSessionEntryMake	172
#define	API_I_NetSessionEntryClear	173
#define	API_I_NetSessionEntryGetInfo	174
#define	API_I_NetSessionEntrySetInfo	175
#define	API_I_NetConnectionEntryMake	176
#define	API_I_NetConnectionEntryClear	177
#define	API_I_NetConnectionEntrySetInfo	178
#define	API_I_NetConnectionEntryGetInfo	179
#define	API_I_NetFileEntryMake		180
#define	API_I_NetFileEntryClear		181
#define	API_I_NetFileEntrySetInfo	182
#define	API_I_NetFileEntryGetInfo	183
#define	API_AltSrvMessageBufferSend	184
#define	API_AltSrvMessageFileSend	185
#define	API_wI_NetRplWkstaEnum		186
#define	API_wI_NetRplWkstaGetInfo	187
#define	API_wI_NetRplWkstaSetInfo	188
#define	API_wI_NetRplWkstaAdd		189
#define	API_wI_NetRplWkstaDel		190
#define	API_wI_NetRplProfileEnum	191
#define	API_wI_NetRplProfileGetInfo	192
#define	API_wI_NetRplProfileSetInfo	193
#define	API_wI_NetRplProfileAdd		194
#define	API_wI_NetRplProfileDel		195
#define	API_wI_NetRplProfileClone	196
#define	API_wI_NetRplBaseProfileEnum	197
#define	API_WIServerSetInfo		201
#define	API_WPrintDriverEnum		205
#define	API_WPrintQProcessorEnum	206
#define	API_WPrintPortEnum		207
#define	API_WNetWriteUpdateLog		208
#define	API_WNetAccountUpdate		209
#define	API_WNetAccountConfirmUpdate	210
#define	API_WConfigSet			211
#define	API_WAccountsReplicate		212
#define	API_SamOEMChgPasswordUser2_P	214
#define	API_NetServerEnum3		215
#define	API_WprintDriverGetInfo		250
#define	API_WprintDriverSetInfo		251
#define	API_WaliasAdd			252
#define	API_WaliasDel			253
#define	API_WaliasGetInfo		254
#define	API_WaliasSetInfo		255
#define	API_WaliasEnum			256
#define	API_WuserGetLogonAsn		257
#define	API_WuserSetLogonAsn		258
#define	API_WuserGetAppSel		259
#define	API_WuserSetAppSel		260
#define	API_WappAdd			261
#define	API_WappDel			262
#define	API_WappGetInfo			263
#define	API_WappSetInfo			264
#define	API_WappEnum			265
#define	API_WUserDCDBInit		266
#define	API_WDASDAdd			267
#define	API_WDASDDel			268
#define	API_WDASDGetInfo		269
#define	API_WDASDSetInfo		270
#define	API_WDASDEnum			271
#define	API_WDASDCheck			272
#define	API_WDASDCtl			273
#define	API_WuserRemoteLogonCheck	274
#define	API_WUserPasswordSet3		275
#define	API_WCreateRIPLMachine		276
#define	API_WDeleteRIPLMachine		277
#define	API_WGetRIPLMachineInfo		278
#define	API_WSetRIPLMachineInfo		279
#define	API_WEnumRIPLMachine		280
#define	API_WI_ShareAdd			281
#define	API_WI_AliasEnum		282
#define	API_WaccessApply		283
#define	API_WPrt16Query			284
#define	API_WPrt16Set			285
#define	API_WUserDel100			286
#define	API_WUserRemoteLogonCheck2	287
#define	API_WRemoteTODSet		294
#define	API_WprintJobMoveAll		295
#define	API_W16AppParmAdd		296
#define	API_W16AppParmDel		297
#define	API_W16AppParmGet		298
#define	API_W16AppParmSet		299
#define	API_W16RIPLMachineCreate	300
#define	API_W16RIPLMachineGetInfo	301
#define	API_W16RIPLMachineSetInfo	302
#define	API_W16RIPLMachineEnum		303
#define	API_W16RIPLMachineListParmEnum	304
#define	API_W16RIPLMachClassGetInfo	305
#define	API_W16RIPLMachClassEnum	306
#define	API_W16RIPLMachClassCreate	307
#define	API_W16RIPLMachClassSetInfo	308
#define	API_W16RIPLMachClassDelete	309
#define	API_W16RIPLMachClassLPEnum	310
#define	API_W16RIPLMachineDelete	311
#define	API_W16WSLevelGetInfo		312
#define	API_WserverNameAdd		313
#define	API_WserverNameDel		314
#define	API_WserverNameEnum		315
#define	API_I_WDASDEnum			316
#define	API_I_WDASDEnumTerminate	317
#define	API_I_WDASDSetInfo2		318
#define	MAX_RAP_API			318

#ifdef __cplusplus
}
#endif

#endif /* _SMBSRV_SMB_H */