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
|
/* UNIX SMBlib NetBIOS implementation
Version 1.0
SMBlib Common Defines
Copyright (C) Richard Sharpe 1996
*/
/*
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
/* To get the error class we want the first 8 bits */
/* Because we just grab 4bytes from the SMB header, we have to re-order */
/* here, but it makes the NtStatus part easier in future */
#define SMBlib_Error_Class(p) (p & 0x000000FF)
/* To get the error code, we want the bottom 16 bits */
#define SMBlib_Error_Code(p) (((unsigned int)p & 0xFFFF0000) >>16)
/* Error CLASS codes and etc ... */
#define SMBC_SUCCESS 0
#define SMBC_ERRDOS 0x01
#define SMBC_ERRSRV 0x02
#define SMBC_ERRHRD 0x03
#define SMBC_ERRCMD 0xFF
/* Success error codes */
#define SMBS_BUFFERED 0x54
#define SMBS_LOGGED 0x55
#define SMBS_DISPLAYED 0x56
/* ERRDOS Error codes */
#define SMBD_badfunc 0x01
#define SMBD_badfile 0x02
#define SMBD_badpath 0x03
#define SMBD_nofids 0x04
#define SMBD_noaccess 0x05
#define SMBD_badfid 0x06
#define SMBD_badmcb 0x07
#define SMBD_nomem 0x08
#define SMBD_badmem 0x09
#define SMBD_badenv 0x0A
#define SMBD_badformat 0x0B
#define SMBD_badaccess 0x0C
#define SMBD_baddata 0x0D
#define SMBD_reserved 0x0E
#define SMBD_baddrive 0x0F
#define SMBD_remcd 0x10
#define SMBD_diffdevice 0x11
#define SMBD_nofiles 0x12
#define SMBD_badshare 0x20
#define SMBD_errlock 0x21
#define SMBD_filexists 0x50
/* Server errors ... */
#define SMBV_error 0x01 /* Generic error */
#define SMBV_badpw 0x02
#define SMBV_badtype 0x03
#define SMBV_access 0x04
#define SMBV_invnid 0x05
#define SMBV_invnetname 0x06
#define SMBV_invdevice 0x07
#define SMBV_qfull 0x31
#define SMBV_qtoobig 0x32
#define SMBV_qeof 0x33
#define SMBV_invpfid 0x34
#define SMBV_paused 0x51
#define SMBV_msgoff 0x52
#define SMBV_noroom 0x53
#define SMBV_rmuns 0x57
#define SMBV_nosupport 0xFFFF
/* Hardware error codes ... */
#define SMBH_nowrite 0x13
#define SMBH_badunit 0x14
#define SMBH_notready 0x15
#define SMBH_badcmd 0x16
#define SMBH_data 0x17
#define SMBH_badreq 0x18
#define SMBH_seek 0x19
#define SMBH_badmedia 0x1A
#define SMBH_badsector 0x1B
#define SMBH_nopaper 0x1C
#define SMBH_write 0x1D
#define SMBH_read 0x1E
#define SMBH_general 0x1F
#define SMBH_badshare 0x20
/* Access mode defines ... */
#define SMB_AMODE_WTRU 0x4000
#define SMB_AMODE_NOCACHE 0x1000
#define SMB_AMODE_COMPAT 0x0000
#define SMB_AMODE_DENYRWX 0x0010
#define SMB_AMODE_DENYW 0x0020
#define SMB_AMODE_DENYRX 0x0030
#define SMB_AMODE_DENYNONE 0x0040
#define SMB_AMODE_OPENR 0x0000
#define SMB_AMODE_OPENW 0x0001
#define SMB_AMODE_OPENRW 0x0002
#define SMB_AMODE_OPENX 0x0003
#define SMB_AMODE_FCBOPEN 0x00FF
#define SMB_AMODE_LOCUNKN 0x0000
#define SMB_AMODE_LOCMSEQ 0x0100
#define SMB_AMODE_LOCMRAN 0x0200
#define SMB_AMODE_LOCRAL 0x0300
/* File attribute encoding ... */
#define SMB_FA_ORD 0x00
#define SMB_FA_ROF 0x01
#define SMB_FA_HID 0x02
#define SMB_FA_SYS 0x04
#define SMB_FA_VOL 0x08
#define SMB_FA_DIR 0x10
#define SMB_FA_ARC 0x20
/* Define the protocol types ... */
#define SMB_P_Unknown -1 /* Hmmm, is this smart? */
#define SMB_P_Core 0
#define SMB_P_CorePlus 1
#define SMB_P_DOSLanMan1 2
#define SMB_P_LanMan1 3
#define SMB_P_DOSLanMan2 4
#define SMB_P_LanMan2 5
#define SMB_P_DOSLanMan2_1 6
#define SMB_P_LanMan2_1 7
#define SMB_P_NT1 8
/* SMBlib return codes */
/* We want something that indicates whether or not the return code was a */
/* remote error, a local error in SMBlib or returned from lower layer ... */
/* Wonder if this will work ... */
/* SMBlibE_Remote = 1 indicates remote error */
/* SMBlibE_ values < 0 indicate local error with more info available */
/* SMBlibE_ values >1 indicate local from SMBlib code errors? */
#define SMBlibE_Success 0
#define SMBlibE_Remote 1 /* Remote error, get more info from con */
#define SMBlibE_BAD -1
#define SMBlibE_LowerLayer 2 /* Lower layer error */
#define SMBlibE_NotImpl 3 /* Function not yet implemented */
#define SMBlibE_ProtLow 4 /* Protocol negotiated does not support req */
#define SMBlibE_NoSpace 5 /* No space to allocate a structure */
#define SMBlibE_BadParam 6 /* Bad parameters */
#define SMBlibE_NegNoProt 7 /* None of our protocols was liked */
#define SMBlibE_SendFailed 8 /* Sending an SMB failed */
#define SMBlibE_RecvFailed 9 /* Receiving an SMB failed */
#define SMBlibE_GuestOnly 10 /* Logged in as guest */
#define SMBlibE_CallFailed 11 /* Call remote end failed */
#define SMBlibE_ProtUnknown 12 /* Protocol unknown */
#define SMBlibE_NoSuchMsg 13 /* Keep this up to date */
typedef struct { /* A structure for a Dirent */
unsigned char resume_key[21]; /* Don't touch this */
unsigned char file_attributes; /* Attributes of file */
unsigned int date_time; /* date and time of last mod */
unsigned int size;
char filename[13]; /* The name of the file */
} SMB_CP_dirent;
|