smb.h 9.7 KB

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