123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387 |
- typedef struct SmbRawHeader {
- uchar protocol[4];
- uchar command;
- // union {
- // struct {
- // uchar errorclass;
- // uchar reserved;
- // uchar error[2];
- // } doserror;
- uchar status[4];
- // };
- uchar flags;
- uchar flags2[2];
- // union {
- uchar extra[12];
- // struct {
- // uchar pidhigh[2];
- // uchar securitysignature[8];
- // };
- // };
- uchar tid[2];
- uchar pid[2];
- uchar uid[2];
- uchar mid[2];
- uchar wordcount;
- uchar parameterwords[1];
- } SmbRawHeader;
- enum {
- SmbHeaderFlagReserved = (3 << 1),
- SmbHeaderFlagCaseless = (1 << 3),
- SmbHeaderFlagServerIgnore = (1 << 4),
- SMB_FLAGS_SERVER_TO_REDIR = (1 << 7),
- };
- enum {
- SMB_FLAGS2_KNOWS_LONG_NAMES = (1 << 0),
- SMB_FLAGS2_KNOWS_EAS = (1 << 1),
- SMB_FLAGS2_SECURITY_SIGNATURE = (1 << 2),
- SMB_FLAGS2_RESERVED1 = (1 << 3),
- SMB_FLAGS2_IS_LONG_NAME = (1 << 6),
- SMB_FLAGS2_EXT_SEC = (1 << 1),
- SMB_FLAGS2_DFS = (1 << 12),
- SMB_FLAGS2_PAGING_IO = (1 << 13),
- SMB_FLAGS2_ERR_STATUS = (1 << 14),
- SMB_FLAGS2_UNICODE = (1 << 15),
- };
- enum {
- SMB_COM_CREATE_DIRECTORY = 0x00,
- SMB_COM_DELETE_DIRECTORY = 0x01,
- SMB_COM_OPEN = 0x02,
- SMB_COM_CREATE = 0x03,
- SMB_COM_CLOSE = 0x04,
- SMB_COM_FLUSH = 0x05,
- SMB_COM_DELETE = 0x06,
- SMB_COM_RENAME = 0x07,
- SMB_COM_QUERY_INFORMATION = 0x08,
- SMB_COM_SET_INFORMATION = 0x09,
- SMB_COM_READ = 0x0A,
- SMB_COM_WRITE = 0x0B,
- SMB_COM_LOCK_BYTE_RANGE = 0x0C,
- SMB_COM_UNLOCK_BYTE_RANGE = 0x0D,
- SMB_COM_CREATE_TEMPORARY = 0x0E,
- SMB_COM_CREATE_NEW = 0x0F,
- SMB_COM_CHECK_DIRECTORY = 0x10,
- SMB_COM_PROCESS_EXIT = 0x11,
- SMB_COM_SEEK = 0x12,
- SMB_COM_LOCK_AND_READ = 0x13,
- SMB_COM_WRITE_AND_UNLOCK = 0x14,
- SMB_COM_READ_RAW = 0x1A,
- SMB_COM_READ_MPX = 0x1B,
- SMB_COM_READ_MPX_SECONDARY = 0x1C,
- SMB_COM_WRITE_RAW = 0x1D,
- SMB_COM_WRITE_MPX = 0x1E,
- SMB_COM_WRITE_MPX_SECONDARY = 0x1F,
- SMB_COM_WRITE_COMPLETE = 0x20,
- SMB_COM_QUERY_SERVER = 0x21,
- SMB_COM_SET_INFORMATION2 = 0x22,
- SMB_COM_QUERY_INFORMATION2 = 0x23,
- SMB_COM_LOCKING_ANDX = 0x24,
- SMB_COM_TRANSACTION = 0x25,
- SMB_COM_TRANSACTION_SECONDARY = 0x26,
- SMB_COM_IOCTL = 0x27,
- SMB_COM_IOCTL_SECONDARY = 0x28,
- SMB_COM_COPY = 0x29,
- SMB_COM_MOVE = 0x2A,
- SMB_COM_ECHO = 0x2B,
- SMB_COM_WRITE_AND_CLOSE = 0x2C,
- SMB_COM_OPEN_ANDX = 0x2D,
- SMB_COM_READ_ANDX = 0x2E,
- SMB_COM_WRITE_ANDX = 0x2F,
- SMB_COM_NEW_FILE_SIZE = 0x30,
- SMB_COM_CLOSE_AND_TREE_DISC = 0x31,
- SMB_COM_TRANSACTION2 = 0x32,
- SMB_COM_TRANSACTION2_SECONDARY = 0x33,
- SMB_COM_FIND_CLOSE2 = 0x34,
- SMB_COM_FIND_NOTIFY_CLOSE = 0x35,
- /* Used by Xenix/Unix 0x60 - 0x6E */,
- SMB_COM_TREE_CONNECT = 0x70,
- SMB_COM_TREE_DISCONNECT = 0x71,
- SMB_COM_NEGOTIATE = 0x72,
- SMB_COM_SESSION_SETUP_ANDX = 0x73,
- SMB_COM_LOGOFF_ANDX = 0x74,
- SMB_COM_TREE_CONNECT_ANDX = 0x75,
- SMB_COM_QUERY_INFORMATION_DISK = 0x80,
- SMB_COM_SEARCH = 0x81,
- SMB_COM_FIND = 0x82,
- SMB_COM_FIND_UNIQUE = 0x83,
- SMB_COM_FIND_CLOSE = 0x84,
- SMB_COM_NT_TRANSACT = 0xA0,
- SMB_COM_NT_TRANSACT_SECONDARY = 0xA1,
- SMB_COM_NT_CREATE_ANDX = 0xA2,
- SMB_COM_NT_CANCEL = 0xA4,
- SMB_COM_NT_RENAME = 0xA5,
- SMB_COM_OPEN_PRINT_FILE = 0xC0,
- SMB_COM_WRITE_PRINT_FILE = 0xC1,
- SMB_COM_CLOSE_PRINT_FILE = 0xC2,
- SMB_COM_GET_PRINT_QUEUE = 0xC3,
- SMB_COM_READ_BULK = 0xD8,
- SMB_COM_WRITE_BULK = 0xD9,
- SMB_COM_NO_ANDX_COMMAND = 0xff,
- };
- enum {
- SUCCESS = 0,
- ERRDOS = 0x01,
- ERRSRV = 0x02,
- ERRHRD = 0x03,
- ERRCMD = 0xff,
- };
- enum {
- ERRbadfunc = 1,
- ERRbadfile = 2,
- ERRbadpath = 3,
- ERRnofids = 4,
- ERRnoaccess = 5,
- ERRbadfid = 6,
- ERRbadmcb = 7,
- ERRnomem = 8,
- ERRbadmem = 9,
- ERRbadenv = 10,
- ERRbadformat = 11,
- ERRbadaccess = 12,
- ERRbaddata =13,
- ERRbaddrive = 15,
- ERRremcd = 16,
- ERRdiffdevice = 17,
- ERRnofiles = 18,
- ERRbadshare = 32,
- ERRlock = 33,
- ERRunsup = 50,
- ERRfilexists = 80,
- ERRunknownlevel = 124,
- ERRquota = 512,
- ERRnotalink = 513,
- };
- enum {
- ERRerror = 1,
- ERRbadpw = 2,
- ERRaccess = 4,
- ERRinvtid = 5,
- ERRsmbcmd = 64,
- ERRtoomanyuids = 90,
- ERRbaduid = 91,
- ERRnosupport = 65535,
- };
- enum {
- CAP_RAW_MODE = 0x0001,
- CAP_MPX_MODE = 0x0002,
- CAP_UNICODE = 0x0004,
- CAP_LARGE_FILES = 0x0008,
- CAP_NT_SMBS = 0x0010,
- CAP_RPC_REMOTE_APIS = 0x0020,
- CAP_STATUS32 = 0x0040,
- CAP_LEVEL_II_OPLOCKS = 0x0080,
- CAP_LOCK_AND_READ = 0x0100,
- CAP_NT_FIND = 0x0200,
- CAP_DFS = 0x1000,
- CAP_INFOLEVEL_PASSTHRU = 0x2000,
- CAP_W2K_SMBS = 0x2000,
- CAP_LARGE_READX = 0x4000,
- CAP_LARGE_WRITEX = 0x8000,
- CAP_UNIX = 0x00800000,
- CAP_BULK_TRANSFER = 0x20000000,
- CAP_COMPRESSED_DATA = 0x40000000,
- CAP_EXTENDED_SECURITY = 0x80000000
- };
- enum {
- RapNetShareEnum = 0,
- RapNetShareGetInfo = 1,
- RapNetServerGetInfo = 13,
- RapNetWkstaGetInfo = 63,
- RapNetServerEnum2 = 104,
- };
- enum {
- SMB_RAP_NERR_SUCCESS = 0,
- SMB_RAP_ERROR_MORE_DATA = 234,
- };
- enum {
- STYPE_DISKTREE,
- STYPE_PRINTQ,
- STYPE_DEVICE,
- STYPE_IPC
- };
- enum {
- SV_TYPE_WORKSTATION = 0x00000001,
- SV_TYPE_SERVER = 0x00000002,
- SV_TYPE_SQLSERVER = 0x00000004,
- SV_TYPE_DOMAIN_CTRL = 0x00000008,
- SV_TYPE_DOMAIN_BAKCTRL = 0x00000010,
- SV_TYPE_TIME_SOURCE = 0x00000020,
- SV_TYPE_AFP = 0x00000040,
- SV_TYPE_NOVELL = 0x00000080,
- SV_TYPE_DOMAIN_MEMBER = 0x00000100,
- SV_TYPE_PRINTQ_SERVER = 0x00000200,
- SV_TYPE_DIALIN_SERVER = 0x00000400,
- SV_TYPE_SERVER_UNIX = 0x00000800,
- SV_TYPE_NT = 0x00001000,
- SV_TYPE_WFW = 0x00002000,
- SV_TYPE_SERVER_MFPN = 0x00004000,
- SV_TYPE_SERVER_NT = 0x00008000,
- SV_TYPE_POTENTIAL_BROWSER = 0x00010000,
- SV_TYPE_BACKUP_BROWSER = 0x00020000,
- SV_TYPE_MASTER_BROWSER = 0x00040000,
- SV_TYPE_DOMAIN_MASTER = 0x00080000,
- SV_TYPE_SERVER_OSF = 0x00100000,
- SV_TYPE_SERVER_VMS = 0x00200000,
- SV_TYPE_WIN95_PLUS = 0x00400000,
- SV_TYPE_DFS_SERVER = 0x00800000,
- SV_TYPE_ALTERNATE_XPORT = 0x20000000,
- SV_TYPE_LOCAL_LIST_ONLY = 0x40000000,
- SV_TYPE_DOMAIN_ENUM = 0x80000000,
- SV_TYPE_ALL = 0xFFFFFFFF,
- };
- enum {
- SMB_TRANS2_OPEN = 0,
- SMB_TRANS2_FIND_FIRST2 = 1,
- SMB_TRANS2_FIND_NEXT2 = 2,
- SMB_TRANS2_QUERY_FS_INFORMATION = 3,
- SMB_TRANS2_SET_FS_INFORMATION = 4,
- SMB_TRANS2_QUERY_PATH_INFORMATION = 5,
- SMB_TRANS2_SET_PATH_INFORMATION = 6,
- SMB_TRANS2_QUERY_FILE_INFORMATION = 7,
- SMB_TRANS2_SET_FILE_INFORMATION = 8,
- SMB_TRANS2_FSCTL = 9,
- SMB_TRANS2_IOCTL2 = 0xA,
- SMB_TRANS2_FIND_NOTIFY_FIRST = 0xB,
- SMB_TRANS2_FIND_NOTIFY_NEXT = 0xC,
- SMB_TRANS2_CREATE_DIRECTORY = 0xD,
- SMB_TRANS2_SESSION_SETUP = 0xE,
- SMB_TRANS2_GET_DFS_REFERRAL = 0x10,
- SMB_TRANS2_REPORT_DFS_INCONSISTENCY = 0x11,
- };
- enum {
- SMB_FIND_CLOSE = 1,
- SMB_FIND_CLOSE_EOS = 2,
- SMB_FIND_RETURN_RESUME_KEYS = 4,
- SMB_FIND_CONTINUE = 8,
- SMB_FIND_BACKUP = 16
- };
- enum {
- SMB_INFO_STANDARD = 1,
- SMB_FIND_FILE_BOTH_DIRECTORY_INFO = 0x104,
- SMB_QUERY_FILE_BASIC_INFO = 0x101,
- SMB_QUERY_FILE_STANDARD_INFO = 0x102,
- SMB_QUERY_FILE_EA_INFO = 0x103,
- SMB_QUERY_FILE_ALL_INFO = 0x107,
- SMB_QUERY_FILE_STREAM_INFO = 0x109,
- };
- enum {
- SMB_SET_FILE_BASIC_INFO = 0x101,
- SMB_SET_FILE_DISPOSITION_INFO = 0x102,
- SMB_SET_FILE_ALLOCATION_INFO = 0x103,
- SMB_SET_FILE_END_OF_FILE_INFO = 0x104,
- };
- enum {
- SMB_ATTR_READ_ONLY = (1 << 0),
- SMB_ATTR_HIDDEN = (1 << 1),
- SMB_ATTR_SYSTEM = (1 << 2),
- SMB_ATTR_DIRECTORY = (1 << 4),
- SMB_ATTR_ARCHIVE = (1 << 5),
- SMB_ATTR_NORMAL = (1 << 7),
- SMB_ATTR_COMPRESSED = 0x800,
- SMB_ATTR_TEMPORARY = 0x100,
- SMB_ATTR_WRITETHROUGH = 0x80000000,
- SMB_ATTR_NO_BUFFERING = 0x20000000,
- SMB_ATTR_RANDOM_ACCESS = 0x10000000,
- };
- enum {
- SMB_OFUN_EXIST_SHIFT = 0,
- SMB_OFUN_EXIST_MASK = 3,
- SMB_OFUN_EXIST_FAIL = 0,
- SMB_OFUN_EXIST_OPEN = 1,
- SMB_OFUN_EXIST_TRUNCATE = 2,
- SMB_OFUN_NOEXIST_CREATE = (1 << 4),
- };
- enum {
- SMB_OPEN_FLAGS_ADDITIONAL = 1,
- SMB_OPEN_FLAGS_OPLOCK = 2,
- SMB_OPEN_FLAGS_OPBATCH = 4,
- SMB_OPEN_MODE_ACCESS_SHIFT = 0,
- SMB_OPEN_MODE_ACCESS_MASK = 7,
- SMB_OPEN_MODE_SHARE_SHIFT = 4,
- SMB_OPEN_MODE_SHARE_MASK = 7,
- SMB_OPEN_MODE_SHARE_COMPATIBILITY = 0,
- SMB_OPEN_MODE_SHARE_EXCLUSIVE = 1,
- SMB_OPEN_MODE_SHARE_DENY_WRITE = 2,
- SMB_OPEN_MODE_SHARE_DENY_READOREXEC = 3,
- SMB_OPEN_MODE_SHARE_DENY_NONE = 4,
- SMB_OPEN_MODE_WRITE_THROUGH = (1 << 14),
- };
- enum {
- SMB_INFO_ALLOCATION = 1,
- SMB_INFO_VOLUME = 2,
- SMB_QUERY_FS_VOLUME_INFO = 0x102,
- SMB_QUERY_FS_SIZE_INFO = 0x103,
- SMB_QUERY_FS_ATTRIBUTE_INFO = 0x105,
- };
- enum {
- SMB_CD_SUPERCEDE = 0,
- SMB_CD_OPEN = 1,
- SMB_CD_CREATE = 2,
- SMB_CD_OPEN_IF = 3,
- SMB_CD_OVERWRITE = 4,
- SMB_CD_OVERWRITE_IF = 5,
- SMB_CD_MAX = 5,
- };
- enum {
- SMB_DA_SPECIFIC_MASK = 0x0000ffff,
- SMB_DA_SPECIFIC_READ_DATA = 0x00000001,
- SMB_DA_SPECIFIC_WRITE_DATA = 0x00000002,
- SMB_DA_SPECIFIC_APPEND_DATA = 0x00000004,
- SMB_DA_SPECIFIC_READ_EA = 0x00000008,
- SMB_DA_SPECIFIC_WRITE_EA = 0x00000010,
- SMB_DA_SPECIFIC_EXECUTE = 0x00000020,
- SMB_DA_SPECIFIC_DELETE_CHILD = 0x00000040,
- SMB_DA_SPECIFIC_READ_ATTRIBUTES = 0x00000080,
- SMB_DA_SPECIFIC_WRITE_ATTRIBUTES = 0x00000100,
- SMB_DA_STANDARD_MASK = 0x00ff0000,
- SMB_DA_STANDARD_DELETE_ACCESS = 0x00010000,
- SMB_DA_STANDARD_READ_CONTROL_ACCESS = 0x00020000,
- SMB_DA_STANDARD_WRITE_DAC_ACCESS = 0x00040000,
- SMB_DA_STANDARD_WRITE_OWNER_ACCESS = 0x00080000,
- SMB_DA_STANDARD_SYNCHRONIZE_ACCESS = 0x00100000,
- SMB_DA_GENERIC_MASK = 0xf0000000,
- SMB_DA_GENERIC_ALL_ACCESS = 0x10000000,
- SMB_DA_GENERIC_EXECUTE_ACCESS = 0x20000000,
- SMB_DA_GENERIC_WRITE_ACCESS = 0x40000000,
- SMB_DA_GENERIC_READ_ACCESS = 0x80000000
- };
- enum {
- SMB_SA_NO_SHARE = 0x00000000,
- SMB_SA_SHARE_READ = 0x00000001,
- SMB_SA_SHARE_WRITE = 0x00000002,
- SMB_SA_SHARE_DELETE = 0x00000004,
- };
- enum {
- SMB_CO_DIRECTORY = 0x00000001,
- SMB_CO_WRITETHROUGH = 0x00000002,
- SMB_CO_SEQUENTIAL_ONLY = 0x00000004,
- SMB_CO_FILE = 0x00000040,
- SMB_CO_NO_EA_KNOWLEDGE = 0x00000200,
- SMB_CO_EIGHT_DOT_THREE_ONLY = 0x00000400,
- SMB_CO_RANDOM_ACCESS = 0x00000800,
- SMB_CO_DELETE_ON_CLOSE = 0x00001000,
- };
|