6aea1af57f295cb4f7e9e3c8277cddea4884553c
[obnox/wireshark/wip.git] / smb.h
1 /* smb.h
2  * Defines for smb packet dissection
3  * Copyright 1999, Richard Sharpe <rsharpe@ns.aus.com>
4  *
5  * $Id: smb.h,v 1.3 1999/07/13 02:52:58 gram Exp $
6  *
7  * Ethereal - Network traffic analyzer
8  * By Gerald Combs <gerald@unicom.net>
9  * Copyright 1998, 1999 Gerald Combs
10  *
11  * This program is free software; you can redistribute it and/or
12  * modify it under the terms of the GNU General Public License
13  * as published by the Free Software Foundation; either version 2
14  * of the License, or (at your option) any later version.
15  * 
16  * This program is distributed in the hope that it will be useful,
17  * but WITHOUT ANY WARRANTY; without even the implied warranty of
18  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19  * GNU General Public License for more details.
20  * 
21  * You should have received a copy of the GNU General Public License
22  * along with this program; if not, write to the Free Software
23  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
24  */
25
26 /*
27  * Don't include if already included
28  */
29
30 #ifndef _SMB_H
31 #define _SMB_H
32
33 #ifndef min
34 #define min(a,b) (a < b ? a : b)
35 #endif
36
37 #ifndef max
38 #define max(a,b) (a > b ? a : b)
39 #endif
40
41 #define SMB_PORT 139
42 #define NMB_PORT 137
43 #define DGRAM_PORT 138
44 #define MAX_BUF_SIZE 4096
45
46 #define DEFAULT_BACKLOG 5
47
48 #define SMBopen       0x02   /* open a file */
49 #define SMBcreate     0x03   /* create a file */
50 #define SMBclose      0x04   /* close a file */
51 #define SMBflush      0x05   /* flush a file */
52 #define SMBunlink     0x06   /* delete a file */
53 #define SMBmv         0x07   /* rename a file */
54 #define SMBgetatr     0x08   /* get file attributes */
55 #define SMBsetatr     0x09   /* set file attributes */
56 #define SMBread       0x0A   /* read from a file */
57 #define SMBwrite      0x0B   /* write to a file */
58 #define SMBlock       0x0C   /* lock a byte range */
59 #define SMBunlock     0x0D   /* unlock a byte range */
60 #define SMBctemp      0x0E   /* create a temporary file */
61 #define SMBmknew      0x0F   /* make a new file */
62 #define SMBchkpth     0x10   /* check a directory path */
63 #define SMBexit       0x11   /* process exit */
64 #define SMBlseek      0x12   /* seek */
65 #define SMBtcon       0x70   /* tree connect */
66 #define SMBtdis       0x71   /* tree disconnect */
67 #define SMBnegprot    0x72   /* negotiate a protocol */
68 #define SMBdskattr    0x80   /* get disk attributes */
69 #define SMBsearch     0x81   /* search a directory */
70 #define SMBsplopen    0xC0   /* open a print spool file */
71 #define SMBsplwr      0xC1   /* write to a print spool file */
72 #define SMBsplclose   0xC2   /* close a print spool file */
73 #define SMBsplretq    0xC3   /* return print queue */
74 #define SMBsends      0xD0   /* send a single block message */
75 #define SMBsendb      0xD1   /* send a broadcast message */
76 #define SMBfwdname    0xD2   /* forward user name */
77 #define SMBcancelf    0xD3   /* cancel forward */
78 #define SMBgetmac     0xD4   /* get a machine name */
79 #define SMBsendstrt   0xD5   /* send start of multi-block message */
80 #define SMBsendend    0xD6   /* send end of multi-block message */
81 #define SMBsendtxt    0xD7   /* send text of multi-block message */
82
83 /* CorePlus protocol                                        */
84
85 #define SMBlockread   0x13  /* Lock a range and read it */
86 #define SMBwriteunlock 0x14 /* Unlock a range and then write */
87 #define SMBreadbraw   0x1a  /* read a block of data without smb header ohead*/
88 #define SMBwritebraw  0x1d  /* write a block of data without smb header ohead*/
89 #define SMBwritec     0x20  /* secondary write request */
90 #define SMBwriteclose 0x2c  /* write a file and then close it */
91
92 /* DOS Extended Protocol                                    */
93
94 #define SMBreadBraw      0x1A   /* read block raw */
95 #define SMBreadBmpx      0x1B   /* read block multiplexed */
96 #define SMBreadBs        0x1C   /* read block (secondary response) */
97 #define SMBwriteBraw     0x1D   /* write block raw */
98 #define SMBwriteBmpx     0x1E   /* write block multiplexed */
99 #define SMBwriteBs       0x1F   /* write block (secondary request) */
100 #define SMBwriteC        0x20   /* write complete response */
101 #define SMBsetattrE      0x22   /* set file attributes expanded */
102 #define SMBgetattrE      0x23   /* get file attributes expanded */
103 #define SMBlockingX      0x24   /* lock/unlock byte ranges and X */
104 #define SMBtrans         0x25   /* transaction - name, bytes in/out */
105 #define SMBtranss        0x26   /* transaction (secondary request/response) */
106 #define SMBioctl         0x27   /* IOCTL */
107 #define SMBioctls        0x28   /* IOCTL  (secondary request/response) */
108 #define SMBcopy          0x29   /* copy */
109 #define SMBmove          0x2A   /* move */
110 #define SMBecho          0x2B   /* echo */
111 #define SMBopenX         0x2D   /* open and X */
112 #define SMBreadX         0x2E   /* read and X */
113 #define SMBwriteX        0x2F   /* write and X */
114 #define SMBsesssetupX    0x73   /* Session Set Up & X (including User Logon) */
115 #define SMBtconX         0x75   /* tree connect and X */
116 #define SMBffirst        0x82   /* find first */
117 #define SMBfunique       0x83   /* find unique */
118 #define SMBfclose        0x84   /* find close */
119 #define SMBinvalid       0xFE   /* invalid command */
120
121 /* Any more ? */
122
123 #define SMBdatablockID     0x01  /* A data block identifier */
124 #define SMBdialectID       0x02  /* A dialect id            */
125 #define SMBpathnameID      0x03  /* A pathname ID           */
126 #define SMBasciiID         0x04  /* An ascii string ID      */
127 #define SMBvariableblockID 0x05  /* A variable block ID     */
128
129 /* some other defines we need */
130
131 #define SMB_AMODE_WTRU      0x4000
132 #define SMB_AMODE_NOCACHE   0x1000
133 #define SMB_AMODE_COMPAT    0x0000
134 #define SMB_AMODE_DENYRWX   0x0010
135 #define SMB_AMODE_DENYW     0x0020
136 #define SMB_AMODE_DENYRX    0x0030
137 #define SMB_AMODE_DENYNONE  0x0040
138 #define SMB_AMODE_OPENR     0x0000
139 #define SMB_AMODE_OPENW     0x0001
140 #define SMB_AMODE_OPENRW    0x0002
141 #define SMB_AMODE_OPENX     0x0003
142 #define SMB_AMODE_FCBOPEN   0x00FF
143 #define SMB_AMODE_LOCUNKN   0x0000
144 #define SMB_AMODE_LOCMSEQ   0x0100
145 #define SMB_AMODE_LOCMRAN   0x0200
146 #define SMB_AMODE_LOCRAL    0x0300
147
148 /* Flags defines ... */
149
150 #define SMB_FLG2_NON_DOS    0x01 /* We know non dos names             */
151 #define SMB_FLG2_EXT_ATR    0x02 /* We know about Extended Attributes */
152 #define SMB_FLG2_LNG_NAM    0x04 /* Long names ?                      */
153
154 #define SMB_EOF 0
155 #define SMB_SMB 1
156
157 /* SMB Protocols ... Samba should be in there as well ... */
158
159 #define SMB_P_Unknown      -1        /* Hmmm, is this smart? */
160 #define SMB_P_Core         0
161 #define SMB_P_CorePlus     1
162 #define SMB_P_DOSLanMan1   2
163 #define SMB_P_LanMan1      3
164 #define SMB_P_DOSLanMan2   4 
165 #define SMB_P_LanMan2      5
166 #define SMB_P_DOSLanMan2_1 6
167 #define SMB_P_LanMan2_1    7
168 #define SMB_P_NT1          8
169
170 /* Error codes */
171
172 #define SMB_SUCCESS 0x00  /* All OK */
173 #define SMB_ERRDOS  0x01  /* DOS based error */
174 #define SMB_ERRSRV  0x02  /* server error, network file manager */
175 #define SMB_ERRHRD  0x03  /* Hardware style error */
176 #define SMB_ERRCMD  0x04  /* Not an SMB format command */
177
178 /* SMB X/Open error codes for the ERRDOS error class */
179 #define SMBE_badfunc 1             /* Invalid function (or system call) */
180 #define SMBE_badfile 2             /* File not found (pathname error) */
181 #define SMBE_badpath 3             /* Directory not found */
182 #define SMBE_nofids 4              /* Too many open files */
183 #define SMBE_noaccess 5            /* Access denied */
184 #define SMBE_badfid 6              /* Invalid fid */
185 #define SMBE_nomem 8               /* Out of memory */
186 #define SMBE_badmem 9              /* Invalid memory block address */
187 #define SMBE_badenv 10             /* Invalid environment */
188 #define SMBE_badaccess 12          /* Invalid open mode */
189 #define SMBE_baddata 13            /* Invalid data (only from ioctl call) */
190 #define SMBE_res 14 
191 #define SMBE_baddrive 15           /* Invalid drive */
192 #define SMBE_remcd 16              /* Attempt to delete current directory */
193 #define SMBE_diffdevice 17         /* rename/move across different filesystems */
194 #define SMBE_nofiles 18            /* no more files found in file search */
195 #define SMBE_badshare 32           /* Share mode on file conflict with open mode */
196 #define SMBE_lock 33               /* Lock request conflicts with existing lock */
197 #define SMBE_unsup 50              /* Request unsupported, returned by Win 95, RJS 20Jun98 */
198 #define SMBE_filexists 80          /* File in operation already exists */
199 #define SMBE_cannotopen 110        /* Cannot open the file specified */
200 #define SMBE_unknownlevel 124
201 #define SMBE_badpipe 230           /* Named pipe invalid */
202 #define SMBE_pipebusy 231          /* All instances of pipe are busy */
203 #define SMBE_pipeclosing 232       /* named pipe close in progress */
204 #define SMBE_notconnected 233      /* No process on other end of named pipe */
205 #define SMBE_moredata 234          /* More data to be returned */
206 #define SMBE_baddirectory 267      /* Invalid directory name in a path. */
207 #define SMBE_eas_didnt_fit 275     /* Extended attributes didn't fit */
208 #define SMBE_eas_nsup 282          /* Extended attributes not supported */
209 #define SMBE_notify_buf_small 1022 /* Buffer too small to return change notify. */
210 #define SMBE_unknownipc 2142
211 #define SMBE_noipc 66              /* don't support ipc */
212
213 /* Error codes for the ERRSRV class */
214
215 #define SMBE_error 1               /* Non specific error code */
216 #define SMBE_badpw 2               /* Bad password */
217 #define SMBE_badtype 3             /* reserved */
218 #define SMBE_access 4              /* No permissions to do the requested operation */
219 #define SMBE_invnid 5              /* tid invalid */
220 #define SMBE_invnetname 6          /* Invalid servername */
221 #define SMBE_invdevice 7           /* Invalid device */
222 #define SMBE_qfull 49              /* Print queue full */
223 #define SMBE_qtoobig 50            /* Queued item too big */
224 #define SMBE_qeof 51               /* EOF in print queue dump */
225 #define SMBE_invpfid 52            /* Invalid print file in smb_fid */
226 #define SMBE_smbcmd 64             /* Unrecognised command */
227 #define SMBE_srverror 65           /* smb server internal error */
228 #define SMBE_filespecs 67          /* fid and pathname invalid combination */
229 #define SMBE_badlink 68 
230 #define SMBE_badpermits 69         /* Access specified for a file is not valid */
231 #define SMBE_badpid 70 
232 #define SMBE_setattrmode 71        /* attribute mode invalid */
233 #define SMBE_paused 81             /* Message server paused */
234 #define SMBE_msgoff 82             /* Not receiving messages */
235 #define SMBE_noroom 83             /* No room for message */
236 #define SMBE_rmuns 87              /* too many remote usernames */
237 #define SMBE_timeout 88            /* operation timed out */
238 #define SMBE_noresource  89        /* No resources currently available for request. */
239 #define SMBE_toomanyuids 90        /* too many userids */
240 #define SMBE_baduid 91             /* bad userid */
241 #define SMBE_useMPX 250            /* temporarily unable to use raw mode, use MPX mode */
242 #define SMBE_useSTD 251            /* temporarily unable to use raw mode, use standard mode */
243 #define SMBE_contMPX 252           /* resume MPX mode */
244 #define SMBE_badPW 253             /* Check this out ... */ 
245 #define SMBE_nosupport 0xFFFF
246 #define SMBE_unknownsmb 22         /* from NT 3.5 response */
247
248 /* Error codes for the ERRHRD class */
249
250 #define SMBE_nowrite 19   /* read only media */
251 #define SMBE_badunit 20   /* Unknown device */
252 #define SMBE_notready 21  /* Drive not ready */
253 #define SMBE_badcmd 22    /* Unknown command */
254 #define SMBE_data 23      /* Data (CRC) error */
255 #define SMBE_badreq 24    /* Bad request structure length */
256 #define SMBE_seek 25
257 #define SMBE_badmedia 26
258 #define SMBE_badsector 27
259 #define SMBE_nopaper 28
260 #define SMBE_write 29 
261 #define SMBE_read 30 
262 #define SMBE_general 31 
263 #define SMBE_badshare 32 
264 #define SMBE_lock 33 
265 #define SMBE_wrongdisk 34
266 #define SMBE_FCBunavail 35
267 #define SMBE_sharebufexc 36
268 #define SMBE_diskfull 39
269
270 /* Flags ... CIFS 3.1.1 */
271
272 #define SMB_FLG_LCKREAD   0x01   /* Supports LockRead   */
273 #define SMB_FLG_CLT_BUF   0x02   /* Client Buff avail   */
274 #define SMB_FLG_RES       0x04   /* Reserved            */
275 #define SMB_FLG_CSLS_PN   0x08   /* Caseless Pathnames  */
276 #define SMB_FLG_CAN_PN    0x10   /* Canonical Pathnames */
277 #define SMB_FLG_REQ_OPL   0x20   /* Requests OPLOCKS    */
278 #define SMB_FLG_REQ_BOPL  0x40   /* Requests Batch OPLs */
279 #define SMB_FLG_REPLY     0x80   /* A reply             */
280
281 /* SMB Offsets ... */
282
283 #define SMB_FieldP(smb, off) (smb+off)
284
285 #define SMB_DEF_IDF 0x424D53FF        /* "\377SMB" */
286
287 #define SMB_hdr_idf_offset    0          /* 0xFF,'SMB' 0-3 */
288 #define SMB_hdr_com_offset    4          /* BYTE       4   */
289 #define SMB_hdr_rcls_offset   5          /* BYTE       5   */
290 #define SMB_hdr_reh_offset    6          /* BYTE       6   */
291 #define SMB_hdr_err_offset    7          /* WORD       7   */
292 #define SMB_hdr_reb_offset    9          /* BYTE       9   */
293 #define SMB_hdr_flg_offset    9          /* same as reb ...*/
294 #define SMB_hdr_res_offset    10         /* 7 WORDs    10  */
295 #define SMB_hdr_res0_offset   10         /* WORD       10  */
296 #define SMB_hdr_flg2_offset   10         /* WORD           */
297 #define SMB_hdr_res1_offset   12         /* WORD       12  */
298 #define SMB_hdr_res2_offset   14
299 #define SMB_hdr_res3_offset   16
300 #define SMB_hdr_res4_offset   18
301 #define SMB_hdr_res5_offset   20
302 #define SMB_hdr_res6_offset   22
303 #define SMB_hdr_tid_offset    24
304 #define SMB_hdr_pid_offset    26
305 #define SMB_hdr_uid_offset    28
306 #define SMB_hdr_mid_offset    30
307 #define SMB_hdr_wct_offset    32
308
309 #define SMB_hdr_len           33        /* 33 byte header?      */
310
311 #define SMB_hdr_axc_offset    33        /* AndX Command         */
312 #define SMB_hdr_axr_offset    34        /* AndX Reserved        */
313 #define SMB_hdr_axo_offset    35     /* Offset from start to WCT of AndX cmd */
314
315 /* Format of the Negotiate Protocol SMB */
316
317 #define SMB_negp_bcc_offset   33
318 #define SMB_negp_buf_offset   35        /* Where the buffer starts   */
319 #define SMB_negp_len          35        /* plus the data             */
320
321 /* Format of the Negotiate Response SMB, for CoreProtocol, LM1.2 and */
322 /* NT LM 0.12. wct will be 1 for CoreProtocol, 13 for LM 1.2, and 17 */
323 /* for NT LM 0.12                                                    */
324
325 #define SMB_negrCP_idx_offset   33        /* Response to the neg req */
326 #define SMB_negrCP_bcc_offset   35
327 #define SMB_negrLM_idx_offset   33        /* dialect index           */
328 #define SMB_negrLM_sec_offset   35        /* Security mode           */
329 #define SMB_sec_user_mask       0x01      /* 0 = share, 1 = user     */
330 #define SMB_sec_encrypt_mask    0x02      /* pick out encrypt        */
331 #define SMB_negrLM_mbs_offset   37        /* max buffer size         */
332 #define SMB_negrLM_mmc_offset   39        /* max mpx count           */
333 #define SMB_negrLM_mnv_offset   41        /* max number of VCs       */
334 #define SMB_negrLM_rm_offset    43        /* raw mode support bit vec*/
335 #define SMB_read_raw_mask       0x01
336 #define SMB_write_raw_mask      0x02
337 #define SMB_negrLM_sk_offset    45        /* session key, 32 bits    */
338 #define SMB_negrLM_st_offset    49        /* Current server time     */
339 #define SMB_negrLM_sd_offset    51        /* Current server date     */
340 #define SMB_negrLM_stz_offset   53        /* Server Time Zone        */
341 #define SMB_negrLM_ekl_offset   55        /* encryption key length   */
342 #define SMB_negrLM_res_offset   57        /* reserved                */
343 #define SMB_negrLM_bcc_offset   59        /* bcc                     */
344 #define SMB_negrLM_len          61        /* 61 bytes ?              */
345 #define SMB_negrLM_buf_offset   61        /* Where the fun begins    */
346
347 #define SMB_negrNTLM_idx_offset 33        /* Selected protocol       */
348 #define SMB_negrNTLM_sec_offset 35        /* Security more           */
349 #define SMB_negrNTLM_mmc_offset 36        /* Different format above  */
350 #define SMB_negrNTLM_mnv_offset 38        /* Max VCs                 */
351 #define SMB_negrNTLM_mbs_offset 40        /* MBS now a long          */
352 #define SMB_negrNTLM_mrs_offset 44        /* Max raw size            */
353 #define SMB_negrNTLM_sk_offset  48        /* Session Key             */
354 #define SMB_negrNTLM_cap_offset 52        /* Capabilities            */
355 #define SMB_negrNTLM_stl_offset 56        /* Server time low         */
356 #define SMB_negrNTLM_sth_offset 60        /* Server time high        */
357 #define SMB_negrNTLM_stz_offset 64        /* Server time zone        */
358 #define SMB_negrNTLM_ekl_offset 66        /* Encrypt key len         */
359 #define SMB_negrNTLM_bcc_offset 67        /* Bcc                     */
360 #define SMB_negrNTLM_len        69
361 #define SMB_negrNTLM_buf_offset 69
362
363 /* Offsets related to Tree Connect                                      */
364
365 #define SMB_tcon_bcc_offset     33
366 #define SMB_tcon_buf_offset     35        /* where the data is for tcon */
367 #define SMB_tcon_len            35        /* plus the data              */
368
369 #define SMB_tconr_mbs_offset    33        /* max buffer size         */
370 #define SMB_tconr_tid_offset    35        /* returned tree id        */
371 #define SMB_tconr_bcc_offset    37       
372 #define SMB_tconr_len           39 
373
374 #define SMB_tconx_axc_offset    33        /* And X Command                */
375 #define SMB_tconx_axr_offset    34        /* reserved                     */
376 #define SMB_tconx_axo_offset    35        /* Next command offset          */
377 #define SMB_tconx_flg_offset    37        /* Flags, bit0=1 means disc TID */
378 #define SMB_tconx_pwl_offset    39        /* Password length              */
379 #define SMB_tconx_bcc_offset    41        /* bcc                          */
380 #define SMB_tconx_buf_offset    43        /* buffer                       */
381 #define SMB_tconx_len           43        /* up to data ...               */
382
383 #define SMB_tconxr_axc_offset   33        /* Where the AndX Command is    */
384 #define SMB_tconxr_axr_offset   34        /* Reserved                     */
385 #define SMB_tconxr_axo_offset   35        /* AndX offset location         */
386
387 /* Offsets related to tree_disconnect                                  */
388
389 #define SMB_tdis_bcc_offset     33        /* bcc                     */
390 #define SMB_tdis_len            35        /* total len               */
391
392 #define SMB_tdisr_bcc_offset    33        /* bcc                     */
393 #define SMB_tdisr_len           35
394
395 /* Offsets related to Open Request                                     */
396
397 #define SMB_open_mod_offset     33        /* Mode to open with       */
398 #define SMB_open_atr_offset     35        /* Attributes of file      */
399 #define SMB_open_bcc_offset     37        /* bcc                     */
400 #define SMB_open_buf_offset     39        /* File name               */
401 #define SMB_open_len            39        /* Plus the file name      */
402
403 #define SMB_openx_axc_offset    33        /* Next command            */
404 #define SMB_openx_axr_offset    34        /* Reserved                */
405 #define SMB_openx_axo_offset    35        /* offset of next wct      */
406 #define SMB_openx_flg_offset    37        /* Flags, bit0 = need more info */
407                                           /* bit1 = exclusive oplock */
408                                           /* bit2 = batch oplock     */
409 #define SMB_openx_mod_offset    39        /* mode to open with       */
410 #define SMB_openx_atr_offset    41        /* search attributes       */
411 #define SMB_openx_fat_offset    43        /* File attributes         */
412 #define SMB_openx_tim_offset    45        /* time and date of creat  */
413 #define SMB_openx_ofn_offset    49        /* Open function           */
414 #define SMB_openx_als_offset    51        /* Space to allocate on    */
415 #define SMB_openx_res_offset    55        /* reserved                */
416 #define SMB_openx_bcc_offset    63        /* bcc                     */
417 #define SMB_openx_buf_offset    65        /* Where file name goes    */
418 #define SMB_openx_len           65
419
420 #define SMB_openr_fid_offset    33        /* FID returned            */
421 #define SMB_openr_atr_offset    35        /* Attributes opened with  */
422 #define SMB_openr_tim_offset    37        /* Last mod time of file   */
423 #define SMB_openr_fsz_offset    41        /* File size 4 bytes       */
424 #define SMB_openr_acc_offset    45        /* Access allowed          */
425 #define SMB_openr_bcc_offset    47
426 #define SMB_openr_len           49
427
428 #define SMB_openxr_axc_offset   33        /* And X command           */
429 #define SMB_openxr_axr_offset   34        /* reserved                */
430 #define SMB_openxr_axo_offset   35        /* offset to next command  */
431 #define SMB_openxr_fid_offset   37        /* FID returned            */
432 #define SMB_openxr_fat_offset   39        /* File attributes returned*/
433 #define SMB_openxr_tim_offset   41        /* File creation date etc  */
434 #define SMB_openxr_fsz_offset   45        /* Size of file            */
435 #define SMB_openxr_acc_offset   49        /* Access granted          */
436
437 #define SMB_clos_fid_offset     33        /* FID to close            */
438 #define SMB_clos_tim_offset     35        /* Last mod time           */
439 #define SMB_clos_bcc_offset     39        /* bcc                     */        
440 #define SMB_clos_len            41
441
442 /* Offsets related to Write requests                                 */
443
444 #define SMB_write_fid_offset    33        /* FID to write            */
445 #define SMB_write_cnt_offset    35        /* bytes to write          */
446 #define SMB_write_ofs_offset    37        /* location to write to    */
447 #define SMB_write_clf_offset    41        /* advisory count left     */
448 #define SMB_write_bcc_offset    43        /* bcc = data bytes + 3    */
449 #define SMB_write_buf_offset    45        /* Data=0x01, len, data    */
450 #define SMB_write_len           45        /* plus the data ...       */
451
452 #define SMB_writr_cnt_offset    33        /* Count of bytes written  */
453 #define SMB_writr_bcc_offset    35        /* bcc                     */
454 #define SMB_writr_len           37
455
456 /* Offsets related to read requests */
457
458 #define SMB_read_fid_offset     33        /* FID of file to read     */
459 #define SMB_read_cnt_offset     35        /* count of words to read  */
460 #define SMB_read_ofs_offset     37        /* Where to read from      */
461 #define SMB_read_clf_offset     41        /* Advisory count to go    */
462 #define SMB_read_bcc_offset     43
463 #define SMB_read_len            45
464
465 #define SMB_readr_cnt_offset    33        /* Count of bytes returned */
466 #define SMB_readr_res_offset    35        /* 4 shorts reserved, 8 bytes */
467 #define SMB_readr_bcc_offset    43        /* bcc                     */
468 #define SMB_readr_bff_offset    45        /* buffer format char = 0x01 */
469 #define SMB_readr_len_offset    46        /* buffer len              */
470 #define SMB_readr_len           45        /* length of the readr before data */
471
472 /* Offsets for Create file                                           */
473
474 #define SMB_creat_atr_offset    33        /* Attributes of new file ... */
475 #define SMB_creat_tim_offset    35        /* Time of creation           */
476 #define SMB_creat_dat_offset    37        /* 4004BCE :-)                */
477 #define SMB_creat_bcc_offset    39        /* bcc                        */
478 #define SMB_creat_buf_offset    41
479 #define SMB_creat_len           41        /* Before the data            */
480
481 #define SMB_creatr_fid_offset   33        /* FID of created file        */
482
483 /* Offsets for Delete file                                           */
484
485 #define SMB_delet_sat_offset    33        /* search attribites          */
486 #define SMB_delet_bcc_offset    35        /* bcc                        */
487 #define SMB_delet_buf_offset    37
488 #define SMB_delet_len           37
489
490 /* Offsets for SESSION_SETUP_ANDX for both LM and NT LM protocols    */
491
492 #define SMB_ssetpLM_mbs_offset  37        /* Max buffer Size, allow for AndX */
493 #define SMB_ssetpLM_mmc_offset  39        /* max multiplex count             */
494 #define SMB_ssetpLM_vcn_offset  41        /* VC number if new VC             */
495 #define SMB_ssetpLM_snk_offset  43        /* Session Key                     */
496 #define SMB_ssetpLM_pwl_offset  47        /* password length                 */
497 #define SMB_ssetpLM_res_offset  49        /* reserved                        */
498 #define SMB_ssetpLM_bcc_offset  53        /* bcc                             */
499 #define SMB_ssetpLM_len         55        /* before data ...                 */
500 #define SMB_ssetpLM_buf_offset  55
501
502 #define SMB_ssetpNTLM_mbs_offset 37       /* Max Buffer Size for NT LM 0.12  */
503                                           /* and above                       */
504 #define SMB_ssetpNTLM_mmc_offset 39       /* Max Multiplex count             */
505 #define SMB_ssetpNTLM_vcn_offset 41       /* VC Number                       */
506 #define SMB_ssetpNTLM_snk_offset 43       /* Session key                     */
507 #define SMB_ssetpNTLM_cipl_offset 47      /* Case Insensitive PW Len         */
508 #define SMB_ssetpNTLM_cspl_offset 49      /* Unicode pw len                  */
509 #define SMB_ssetpNTLM_res_offset 51       /* reserved                        */
510 #define SMB_ssetpNTLM_cap_offset 55       /* server capabilities             */
511 #define SMB_ssetpNTLM_bcc_offset 59       /* bcc                             */
512 #define SMB_ssetpNTLM_len        61       /* before data                     */
513 #define SMB_ssetpNTLM_buf_offset 61
514
515 #define SMB_ssetpr_axo_offset  35         /* Offset of next response ...    */
516 #define SMB_ssetpr_act_offset  37         /* action, bit 0 = 1 => guest     */
517 #define SMB_ssetpr_bcc_offset  39         /* bcc                            */
518 #define SMB_ssetpr_buf_offset  41         /* Native OS etc                  */
519
520 /* Offsets for SMB create directory                                         */
521
522 #define SMB_creatdir_bcc_offset 33        /* only a bcc here                */
523 #define SMB_creatdir_buf_offset 35        /* Where things start             */
524 #define SMB_creatdir_len        35
525
526 /* Offsets for SMB delete directory                                         */
527
528 #define SMB_deletdir_bcc_offset 33        /* only a bcc here                */
529 #define SMB_deletdir_buf_offset 35        /* where things start             */
530 #define SMB_deletdir_len        35
531
532 /* Offsets for SMB check directory                                          */
533
534 #define SMB_checkdir_bcc_offset 33        /* Only a bcc here                */
535 #define SMB_checkdir_buf_offset 35        /* where things start             */
536 #define SMB_checkdir_len        35
537
538 /* Offsets for SMB search                                                   */
539
540 #define SMB_search_mdc_offset   33        /* Max Dir ents to return         */
541 #define SMB_search_atr_offset   35        /* Search attributes              */
542 #define SMB_search_bcc_offset   37        /* bcc                            */
543 #define SMB_search_buf_offset   39        /* where the action is            */
544 #define SMB_search_len          39
545
546 #define SMB_searchr_dec_offset  33        /* Dir ents returned              */
547 #define SMB_searchr_bcc_offset  35        /* bcc                            */
548 #define SMB_searchr_buf_offset  37        /* Where the action starts        */
549 #define SMB_searchr_len         37        /* before the dir ents            */
550
551 #define SMB_searchr_dirent_len  43        /* 53 bytes                       */
552
553 /* Defines for SMB getatr call                                              */
554
555 #define SMB_getatr_bcc_offset 33        /* Only a bcc here           */
556 #define SMB_getatr_buf_offset 35        /* Where the buffer starts   */
557 #define SMB_getatr_len        35
558
559 #define SMB_getatrr_atr_offset 33       /* Attr offset               */
560 #define SMB_getatrr_tim_offset 35       /* Time1 field offset        */
561 #define SMB_getatrr_siz_offset 39       /* Size offset               */
562 #define SMB_getatrr_mbz_offset 43       /* MBZ Field                 */
563 #define SMB_getatrr_bcc_offset 53       /* bcc = 0                   */
564 #define SMB_getatrr_len        55
565
566 /* Defines the setatr call                                           */
567
568 #define SMB_setatr_atr_offset  33      /* Attribute offset           */
569 #define SMB_setatr_tim_offset  35      /* Time1 offset               */
570 #define SMB_setatr_siz_offset  39      /* size offset                */
571 #define SMB_setatr_mbz_offset  43      
572 #define SMB_setatr_bcc_offset  53      /* Where bcc is               */
573 #define SMB_setatr_buf_offset  55      /* Where the data goes        */
574 #define SMB_setatr_len         55      /* Plus the params            */
575
576 #define SMB_setatrr_bcc        33      /* Nothing much here          */
577 #define SMB_setatrr_len        35
578
579 /* Defines for SMB transact and transact2 calls                             */
580
581 #define SMB_trans_tpc_offset    33        /* Total param count              */
582 #define SMB_trans_tdc_offset    35        /* total Data count               */
583 #define SMB_trans_mpc_offset    37        /* Max params bytes to return     */
584 #define SMB_trans_mdc_offset    39        /* Max data bytes to return       */
585 #define SMB_trans_msc_offset    41        /* Max setup words to return      */
586 #define SMB_trans_rs1_offset    42        /* Reserved byte                  */
587 #define SMB_trans_flg_offset    43        /* flags                          */
588 #define SMB_trans_tmo_offset    45        /* Timeout, long                  */
589 #define SMB_trans_rs2_offset    49        /* Next reserved                  */
590 #define SMB_trans_pbc_offset    51        /* Param Byte count in buf        */
591 #define SMB_trans_pbo_offset    53        /* Offset to param bytes          */
592 #define SMB_trans_dbc_offset    55        /* Data byte count in buf         */
593 #define SMB_trans_dbo_offset    57        /* Data byte offset               */
594 #define SMB_trans_suc_offset    59        /* Setup count - byte             */
595 #define SMB_trans_rs3_offset    60        /* Reserved to pad ...            */
596 #define SMB_trans_len           61        /* Up to setup, still need bcc    */
597
598 #define SMB_transr_tpc_offset   33        /* Total param bytes returned     */
599 #define SMB_transr_tdc_offset   35
600 #define SMB_transr_rs1_offset   37
601 #define SMB_transr_pbc_offset   39
602 #define SMB_transr_pbo_offset   41
603 #define SMB_transr_pdi_offset   43        /* parameter displacement         */
604 #define SMB_transr_dbc_offset   45
605 #define SMB_transr_dbo_offset   47
606 #define SMB_transr_ddi_offset   49
607 #define SMB_transr_suc_offset   51
608 #define SMB_transr_rs2_offset   52
609 #define SMB_transr_len          53
610
611 /* Bit masks for SMB Capabilities ...                       */
612
613 #define SMB_cap_raw_mode         0x0001
614 #define SMB_cap_mpx_mode         0x0002
615 #define SMB_cap_unicode          0x0004
616 #define SMB_cap_large_files      0x0008
617 #define SMB_cap_nt_smbs          0x0010
618 #define SMB_rpc_remote_apis      0x0020
619 #define SMB_cap_nt_status        0x0040
620 #define SMB_cap_level_II_oplocks 0x0080
621 #define SMB_cap_lock_and_read    0x0100
622 #define SMB_cap_nt_find          0x0200
623
624 /* SMB LANMAN api call defines */
625
626 #define SMB_LMapi_SetUserInfo     0x0072
627 #define SMB_LMapi_UserPasswordSet 0x0073
628
629
630 #endif
631
632
633
634