1 typedef struct SmbRawHeader { 2 uchar protocol[4]; 3 uchar command; 4 // union { 5 // struct { 6 // uchar errorclass; 7 // uchar reserved; 8 // uchar error[2]; 9 // } doserror; 10 uchar status[4]; 11 // }; 12 uchar flags; 13 uchar flags2[2]; 14 // union { 15 uchar extra[12]; 16 // struct { 17 // uchar pidhigh[2]; 18 // uchar securitysignature[8]; 19 // }; 20 // }; 21 uchar tid[2]; 22 uchar pid[2]; 23 uchar uid[2]; 24 uchar mid[2]; 25 uchar wordcount; 26 uchar parameterwords[1]; 27 } SmbRawHeader; 28 29 enum { 30 SmbHeaderFlagReserved = (3 << 1), 31 SmbHeaderFlagCaseless = (1 << 3), 32 SmbHeaderFlagServerIgnore = (1 << 4), 33 SMB_FLAGS_SERVER_TO_REDIR = (1 << 7), 34 }; 35 36 enum { 37 SMB_FLAGS2_KNOWS_LONG_NAMES = (1 << 0), 38 SMB_FLAGS2_KNOWS_EAS = (1 << 1), 39 SMB_FLAGS2_SECURITY_SIGNATURE = (1 << 2), 40 SMB_FLAGS2_RESERVED1 = (1 << 3), 41 SMB_FLAGS2_IS_LONG_NAME = (1 << 6), 42 SMB_FLAGS2_EXT_SEC = (1 << 1), 43 SMB_FLAGS2_DFS = (1 << 12), 44 SMB_FLAGS2_PAGING_IO = (1 << 13), 45 SMB_FLAGS2_ERR_STATUS = (1 << 14), 46 SMB_FLAGS2_UNICODE = (1 << 15), 47 }; 48 49 enum { 50 SMB_COM_CREATE_DIRECTORY = 0x00, 51 SMB_COM_DELETE_DIRECTORY = 0x01, 52 SMB_COM_OPEN = 0x02, 53 SMB_COM_CREATE = 0x03, 54 SMB_COM_CLOSE = 0x04, 55 SMB_COM_FLUSH = 0x05, 56 SMB_COM_DELETE = 0x06, 57 SMB_COM_RENAME = 0x07, 58 SMB_COM_QUERY_INFORMATION = 0x08, 59 SMB_COM_SET_INFORMATION = 0x09, 60 SMB_COM_READ = 0x0A, 61 SMB_COM_WRITE = 0x0B, 62 SMB_COM_LOCK_BYTE_RANGE = 0x0C, 63 SMB_COM_UNLOCK_BYTE_RANGE = 0x0D, 64 SMB_COM_CREATE_TEMPORARY = 0x0E, 65 SMB_COM_CREATE_NEW = 0x0F, 66 SMB_COM_CHECK_DIRECTORY = 0x10, 67 SMB_COM_PROCESS_EXIT = 0x11, 68 SMB_COM_SEEK = 0x12, 69 SMB_COM_LOCK_AND_READ = 0x13, 70 SMB_COM_WRITE_AND_UNLOCK = 0x14, 71 SMB_COM_READ_RAW = 0x1A, 72 SMB_COM_READ_MPX = 0x1B, 73 SMB_COM_READ_MPX_SECONDARY = 0x1C, 74 SMB_COM_WRITE_RAW = 0x1D, 75 SMB_COM_WRITE_MPX = 0x1E, 76 SMB_COM_WRITE_MPX_SECONDARY = 0x1F, 77 SMB_COM_WRITE_COMPLETE = 0x20, 78 SMB_COM_QUERY_SERVER = 0x21, 79 SMB_COM_SET_INFORMATION2 = 0x22, 80 SMB_COM_QUERY_INFORMATION2 = 0x23, 81 SMB_COM_LOCKING_ANDX = 0x24, 82 SMB_COM_TRANSACTION = 0x25, 83 SMB_COM_TRANSACTION_SECONDARY = 0x26, 84 SMB_COM_IOCTL = 0x27, 85 SMB_COM_IOCTL_SECONDARY = 0x28, 86 SMB_COM_COPY = 0x29, 87 SMB_COM_MOVE = 0x2A, 88 SMB_COM_ECHO = 0x2B, 89 SMB_COM_WRITE_AND_CLOSE = 0x2C, 90 SMB_COM_OPEN_ANDX = 0x2D, 91 SMB_COM_READ_ANDX = 0x2E, 92 SMB_COM_WRITE_ANDX = 0x2F, 93 SMB_COM_NEW_FILE_SIZE = 0x30, 94 SMB_COM_CLOSE_AND_TREE_DISC = 0x31, 95 SMB_COM_TRANSACTION2 = 0x32, 96 SMB_COM_TRANSACTION2_SECONDARY = 0x33, 97 SMB_COM_FIND_CLOSE2 = 0x34, 98 SMB_COM_FIND_NOTIFY_CLOSE = 0x35, 99 /* Used by Xenix/Unix 0x60 - 0x6E */, 100 SMB_COM_TREE_CONNECT = 0x70, 101 SMB_COM_TREE_DISCONNECT = 0x71, 102 SMB_COM_NEGOTIATE = 0x72, 103 SMB_COM_SESSION_SETUP_ANDX = 0x73, 104 SMB_COM_LOGOFF_ANDX = 0x74, 105 SMB_COM_TREE_CONNECT_ANDX = 0x75, 106 SMB_COM_QUERY_INFORMATION_DISK = 0x80, 107 SMB_COM_SEARCH = 0x81, 108 SMB_COM_FIND = 0x82, 109 SMB_COM_FIND_UNIQUE = 0x83, 110 SMB_COM_FIND_CLOSE = 0x84, 111 SMB_COM_NT_TRANSACT = 0xA0, 112 SMB_COM_NT_TRANSACT_SECONDARY = 0xA1, 113 SMB_COM_NT_CREATE_ANDX = 0xA2, 114 SMB_COM_NT_CANCEL = 0xA4, 115 SMB_COM_NT_RENAME = 0xA5, 116 SMB_COM_OPEN_PRINT_FILE = 0xC0, 117 SMB_COM_WRITE_PRINT_FILE = 0xC1, 118 SMB_COM_CLOSE_PRINT_FILE = 0xC2, 119 SMB_COM_GET_PRINT_QUEUE = 0xC3, 120 SMB_COM_READ_BULK = 0xD8, 121 SMB_COM_WRITE_BULK = 0xD9, 122 SMB_COM_NO_ANDX_COMMAND = 0xff, 123 }; 124 125 enum { 126 SUCCESS = 0, 127 ERRDOS = 0x01, 128 ERRSRV = 0x02, 129 ERRHRD = 0x03, 130 ERRCMD = 0xff, 131 }; 132 133 enum { 134 ERRbadfunc = 1, 135 ERRbadfile = 2, 136 ERRbadpath = 3, 137 ERRnofids = 4, 138 ERRnoaccess = 5, 139 ERRbadfid = 6, 140 ERRbadmcb = 7, 141 ERRnomem = 8, 142 ERRbadmem = 9, 143 ERRbadenv = 10, 144 ERRbadformat = 11, 145 ERRbadaccess = 12, 146 ERRbaddata =13, 147 ERRbaddrive = 15, 148 ERRremcd = 16, 149 ERRdiffdevice = 17, 150 ERRnofiles = 18, 151 ERRbadshare = 32, 152 ERRlock = 33, 153 ERRunsup = 50, 154 ERRfilexists = 80, 155 ERRunknownlevel = 124, 156 ERRquota = 512, 157 ERRnotalink = 513, 158 }; 159 160 enum { 161 ERRerror = 1, 162 ERRbadpw = 2, 163 ERRaccess = 4, 164 ERRinvtid = 5, 165 ERRsmbcmd = 64, 166 ERRtoomanyuids = 90, 167 ERRbaduid = 91, 168 ERRnosupport = 65535, 169 }; 170 171 enum { 172 CAP_RAW_MODE = 0x0001, 173 CAP_MPX_MODE = 0x0002, 174 CAP_UNICODE = 0x0004, 175 CAP_LARGE_FILES = 0x0008, 176 CAP_NT_SMBS = 0x0010, 177 CAP_RPC_REMOTE_APIS = 0x0020, 178 CAP_STATUS32 = 0x0040, 179 CAP_LEVEL_II_OPLOCKS = 0x0080, 180 CAP_LOCK_AND_READ = 0x0100, 181 CAP_NT_FIND = 0x0200, 182 CAP_DFS = 0x1000, 183 CAP_INFOLEVEL_PASSTHRU = 0x2000, 184 CAP_W2K_SMBS = 0x2000, 185 CAP_LARGE_READX = 0x4000, 186 CAP_LARGE_WRITEX = 0x8000, 187 CAP_UNIX = 0x00800000, 188 CAP_BULK_TRANSFER = 0x20000000, 189 CAP_COMPRESSED_DATA = 0x40000000, 190 CAP_EXTENDED_SECURITY = 0x80000000 191 }; 192 193 enum { 194 RapNetShareEnum = 0, 195 RapNetShareGetInfo = 1, 196 RapNetServerGetInfo = 13, 197 RapNetWkstaGetInfo = 63, 198 RapNetServerEnum2 = 104, 199 }; 200 201 enum { 202 SMB_RAP_NERR_SUCCESS = 0, 203 SMB_RAP_ERROR_MORE_DATA = 234, 204 }; 205 206 enum { 207 STYPE_DISKTREE, 208 STYPE_PRINTQ, 209 STYPE_DEVICE, 210 STYPE_IPC 211 }; 212 213 enum { 214 SV_TYPE_WORKSTATION = 0x00000001, 215 SV_TYPE_SERVER = 0x00000002, 216 SV_TYPE_SQLSERVER = 0x00000004, 217 SV_TYPE_DOMAIN_CTRL = 0x00000008, 218 SV_TYPE_DOMAIN_BAKCTRL = 0x00000010, 219 SV_TYPE_TIME_SOURCE = 0x00000020, 220 SV_TYPE_AFP = 0x00000040, 221 SV_TYPE_NOVELL = 0x00000080, 222 SV_TYPE_DOMAIN_MEMBER = 0x00000100, 223 SV_TYPE_PRINTQ_SERVER = 0x00000200, 224 SV_TYPE_DIALIN_SERVER = 0x00000400, 225 SV_TYPE_SERVER_UNIX = 0x00000800, 226 SV_TYPE_NT = 0x00001000, 227 SV_TYPE_WFW = 0x00002000, 228 SV_TYPE_SERVER_MFPN = 0x00004000, 229 SV_TYPE_SERVER_NT = 0x00008000, 230 SV_TYPE_POTENTIAL_BROWSER = 0x00010000, 231 SV_TYPE_BACKUP_BROWSER = 0x00020000, 232 SV_TYPE_MASTER_BROWSER = 0x00040000, 233 SV_TYPE_DOMAIN_MASTER = 0x00080000, 234 SV_TYPE_SERVER_OSF = 0x00100000, 235 SV_TYPE_SERVER_VMS = 0x00200000, 236 SV_TYPE_WIN95_PLUS = 0x00400000, 237 SV_TYPE_DFS_SERVER = 0x00800000, 238 SV_TYPE_ALTERNATE_XPORT = 0x20000000, 239 SV_TYPE_LOCAL_LIST_ONLY = 0x40000000, 240 SV_TYPE_DOMAIN_ENUM = 0x80000000, 241 SV_TYPE_ALL = 0xFFFFFFFF, 242 }; 243 244 enum { 245 SMB_TRANS2_OPEN = 0, 246 SMB_TRANS2_FIND_FIRST2 = 1, 247 SMB_TRANS2_FIND_NEXT2 = 2, 248 SMB_TRANS2_QUERY_FS_INFORMATION = 3, 249 SMB_TRANS2_SET_FS_INFORMATION = 4, 250 SMB_TRANS2_QUERY_PATH_INFORMATION = 5, 251 SMB_TRANS2_SET_PATH_INFORMATION = 6, 252 SMB_TRANS2_QUERY_FILE_INFORMATION = 7, 253 SMB_TRANS2_SET_FILE_INFORMATION = 8, 254 SMB_TRANS2_FSCTL = 9, 255 SMB_TRANS2_IOCTL2 = 0xA, 256 SMB_TRANS2_FIND_NOTIFY_FIRST = 0xB, 257 SMB_TRANS2_FIND_NOTIFY_NEXT = 0xC, 258 SMB_TRANS2_CREATE_DIRECTORY = 0xD, 259 SMB_TRANS2_SESSION_SETUP = 0xE, 260 SMB_TRANS2_GET_DFS_REFERRAL = 0x10, 261 SMB_TRANS2_REPORT_DFS_INCONSISTENCY = 0x11, 262 }; 263 264 enum { 265 SMB_FIND_CLOSE = 1, 266 SMB_FIND_CLOSE_EOS = 2, 267 SMB_FIND_RETURN_RESUME_KEYS = 4, 268 SMB_FIND_CONTINUE = 8, 269 SMB_FIND_BACKUP = 16 270 }; 271 272 enum { 273 SMB_INFO_STANDARD = 1, 274 SMB_FIND_FILE_BOTH_DIRECTORY_INFO = 0x104, 275 SMB_QUERY_FILE_BASIC_INFO = 0x101, 276 SMB_QUERY_FILE_STANDARD_INFO = 0x102, 277 SMB_QUERY_FILE_EA_INFO = 0x103, 278 SMB_QUERY_FILE_ALL_INFO = 0x107, 279 SMB_QUERY_FILE_STREAM_INFO = 0x109, 280 }; 281 282 enum { 283 SMB_SET_FILE_BASIC_INFO = 0x101, 284 SMB_SET_FILE_DISPOSITION_INFO = 0x102, 285 SMB_SET_FILE_ALLOCATION_INFO = 0x103, 286 SMB_SET_FILE_END_OF_FILE_INFO = 0x104, 287 }; 288 289 enum { 290 SMB_ATTR_READ_ONLY = (1 << 0), 291 SMB_ATTR_HIDDEN = (1 << 1), 292 SMB_ATTR_SYSTEM = (1 << 2), 293 SMB_ATTR_DIRECTORY = (1 << 4), 294 SMB_ATTR_ARCHIVE = (1 << 5), 295 SMB_ATTR_NORMAL = (1 << 7), 296 SMB_ATTR_COMPRESSED = 0x800, 297 SMB_ATTR_TEMPORARY = 0x100, 298 SMB_ATTR_WRITETHROUGH = 0x80000000, 299 SMB_ATTR_NO_BUFFERING = 0x20000000, 300 SMB_ATTR_RANDOM_ACCESS = 0x10000000, 301 }; 302 303 enum { 304 SMB_OFUN_EXIST_SHIFT = 0, 305 SMB_OFUN_EXIST_MASK = 3, 306 SMB_OFUN_EXIST_FAIL = 0, 307 SMB_OFUN_EXIST_OPEN = 1, 308 SMB_OFUN_EXIST_TRUNCATE = 2, 309 SMB_OFUN_NOEXIST_CREATE = (1 << 4), 310 }; 311 312 enum { 313 SMB_OPEN_FLAGS_ADDITIONAL = 1, 314 SMB_OPEN_FLAGS_OPLOCK = 2, 315 SMB_OPEN_FLAGS_OPBATCH = 4, 316 SMB_OPEN_MODE_ACCESS_SHIFT = 0, 317 SMB_OPEN_MODE_ACCESS_MASK = 7, 318 SMB_OPEN_MODE_SHARE_SHIFT = 4, 319 SMB_OPEN_MODE_SHARE_MASK = 7, 320 SMB_OPEN_MODE_SHARE_COMPATIBILITY = 0, 321 SMB_OPEN_MODE_SHARE_EXCLUSIVE = 1, 322 SMB_OPEN_MODE_SHARE_DENY_WRITE = 2, 323 SMB_OPEN_MODE_SHARE_DENY_READOREXEC = 3, 324 SMB_OPEN_MODE_SHARE_DENY_NONE = 4, 325 SMB_OPEN_MODE_WRITE_THROUGH = (1 << 14), 326 }; 327 328 enum { 329 SMB_INFO_ALLOCATION = 1, 330 SMB_INFO_VOLUME = 2, 331 SMB_QUERY_FS_VOLUME_INFO = 0x102, 332 SMB_QUERY_FS_SIZE_INFO = 0x103, 333 SMB_QUERY_FS_ATTRIBUTE_INFO = 0x105, 334 }; 335 336 enum { 337 SMB_CD_SUPERCEDE = 0, 338 SMB_CD_OPEN = 1, 339 SMB_CD_CREATE = 2, 340 SMB_CD_OPEN_IF = 3, 341 SMB_CD_OVERWRITE = 4, 342 SMB_CD_OVERWRITE_IF = 5, 343 SMB_CD_MAX = 5, 344 }; 345 346 enum { 347 SMB_DA_SPECIFIC_MASK = 0x0000ffff, 348 SMB_DA_SPECIFIC_READ_DATA = 0x00000001, 349 SMB_DA_SPECIFIC_WRITE_DATA = 0x00000002, 350 SMB_DA_SPECIFIC_APPEND_DATA = 0x00000004, 351 SMB_DA_SPECIFIC_READ_EA = 0x00000008, 352 SMB_DA_SPECIFIC_WRITE_EA = 0x00000010, 353 SMB_DA_SPECIFIC_EXECUTE = 0x00000020, 354 SMB_DA_SPECIFIC_DELETE_CHILD = 0x00000040, 355 SMB_DA_SPECIFIC_READ_ATTRIBUTES = 0x00000080, 356 SMB_DA_SPECIFIC_WRITE_ATTRIBUTES = 0x00000100, 357 SMB_DA_STANDARD_MASK = 0x00ff0000, 358 SMB_DA_STANDARD_DELETE_ACCESS = 0x00010000, 359 SMB_DA_STANDARD_READ_CONTROL_ACCESS = 0x00020000, 360 SMB_DA_STANDARD_WRITE_DAC_ACCESS = 0x00040000, 361 SMB_DA_STANDARD_WRITE_OWNER_ACCESS = 0x00080000, 362 SMB_DA_STANDARD_SYNCHRONIZE_ACCESS = 0x00100000, 363 SMB_DA_GENERIC_MASK = 0xf0000000, 364 SMB_DA_GENERIC_ALL_ACCESS = 0x10000000, 365 SMB_DA_GENERIC_EXECUTE_ACCESS = 0x20000000, 366 SMB_DA_GENERIC_WRITE_ACCESS = 0x40000000, 367 SMB_DA_GENERIC_READ_ACCESS = 0x80000000 368 }; 369 370 enum { 371 SMB_SA_NO_SHARE = 0x00000000, 372 SMB_SA_SHARE_READ = 0x00000001, 373 SMB_SA_SHARE_WRITE = 0x00000002, 374 SMB_SA_SHARE_DELETE = 0x00000004, 375 }; 376 377 enum { 378 SMB_CO_DIRECTORY = 0x00000001, 379 SMB_CO_WRITETHROUGH = 0x00000002, 380 SMB_CO_SEQUENTIAL_ONLY = 0x00000004, 381 SMB_CO_FILE = 0x00000040, 382 SMB_CO_NO_EA_KNOWLEDGE = 0x00000200, 383 SMB_CO_EIGHT_DOT_THREE_ONLY = 0x00000400, 384 SMB_CO_RANDOM_ACCESS = 0x00000800, 385 SMB_CO_DELETE_ON_CLOSE = 0x00001000, 386 }; 387 388