smb.h 9.3 KB

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