1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363 |
- # Copyright (c) 2003-2016 CORE Security Technologies
- #
- # This software is provided under under a slightly modified version
- # of the Apache Software License. See the accompanying LICENSE file
- # for more information.
- #
- # Author: Alberto Solino (@agsolino)
- #
- # Description:
- # SMB 2 and 3 Protocol Structures and constants [MS-SMB2]
- #
- from impacket.structure import Structure
- # Constants
- # SMB Packet
- SMB2_PACKET_SIZE = 64
- # SMB Commands
- SMB2_NEGOTIATE = 0x0000 #
- SMB2_SESSION_SETUP = 0x0001 #
- SMB2_LOGOFF = 0x0002 #
- SMB2_TREE_CONNECT = 0x0003 #
- SMB2_TREE_DISCONNECT = 0x0004 #
- SMB2_CREATE = 0x0005 #
- SMB2_CLOSE = 0x0006 #
- SMB2_FLUSH = 0x0007 #
- SMB2_READ = 0x0008 #
- SMB2_WRITE = 0x0009 #
- SMB2_LOCK = 0x000A #
- SMB2_IOCTL = 0x000B #
- SMB2_CANCEL = 0x000C #
- SMB2_ECHO = 0x000D #
- SMB2_QUERY_DIRECTORY = 0x000E #
- SMB2_CHANGE_NOTIFY = 0x000F
- SMB2_QUERY_INFO = 0x0010 #
- SMB2_SET_INFO = 0x0011
- SMB2_OPLOCK_BREAK = 0x0012
- # SMB Flags
- SMB2_FLAGS_SERVER_TO_REDIR = 0x00000001
- SMB2_FLAGS_ASYNC_COMMAND = 0x00000002
- SMB2_FLAGS_RELATED_OPERATIONS = 0x00000004
- SMB2_FLAGS_SIGNED = 0x00000008
- SMB2_FLAGS_DFS_OPERATIONS = 0x10000000
- SMB2_FLAGS_REPLAY_OPERATION = 0x80000000
- # SMB Error SymLink Flags
- SYMLINK_FLAG_ABSOLUTE = 0x0
- SYMLINK_FLAG_RELATIVE = 0x1
- # SMB2_NEGOTIATE
- # Security Modes
- SMB2_NEGOTIATE_SIGNING_ENABLED = 0x1
- SMB2_NEGOTIATE_SIGNING_REQUIRED = 0x2
- # Capabilities
- SMB2_GLOBAL_CAP_DFS = 0x01
- SMB2_GLOBAL_CAP_LEASING = 0x02
- SMB2_GLOBAL_CAP_LARGE_MTU = 0x04
- SMB2_GLOBAL_CAP_MULTI_CHANNEL = 0x08
- SMB2_GLOBAL_CAP_PERSISTENT_HANDLES = 0x10
- SMB2_GLOBAL_CAP_DIRECTORY_LEASING = 0x20
- SMB2_GLOBAL_CAP_ENCRYPTION = 0x40
- # Dialects
- SMB2_DIALECT_002 = 0x0202
- SMB2_DIALECT_21 = 0x0210
- SMB2_DIALECT_30 = 0x0300
- SMB2_DIALECT_WILDCARD = 0x02FF
- # SMB2_SESSION_SETUP
- # Flags
- SMB2_SESSION_FLAG_BINDING = 0x01
- SMB2_SESSION_FLAG_IS_GUEST = 0x01
- SMB2_SESSION_FLAG_IS_NULL = 0x02
- SMB2_SESSION_FLAG_ENCRYPT_DATA = 0x04
- # SMB2_TREE_CONNECT
- # Types
- SMB2_SHARE_TYPE_DISK = 0x1
- SMB2_SHARE_TYPE_PIPE = 0x2
- SMB2_SHARE_TYPE_PRINT = 0x3
- # Share Flags
- SMB2_SHAREFLAG_MANUAL_CACHING = 0x00000000
- SMB2_SHAREFLAG_AUTO_CACHING = 0x00000010
- SMB2_SHAREFLAG_VDO_CACHING = 0x00000020
- SMB2_SHAREFLAG_NO_CACHING = 0x00000030
- SMB2_SHAREFLAG_DFS = 0x00000001
- SMB2_SHAREFLAG_DFS_ROOT = 0x00000002
- SMB2_SHAREFLAG_RESTRICT_EXCLUSIVE_OPENS = 0x00000100
- SMB2_SHAREFLAG_FORCE_SHARED_DELETE = 0x00000200
- SMB2_SHAREFLAG_ALLOW_NAMESPACE_CACHING = 0x00000400
- SMB2_SHAREFLAG_ACCESS_BASED_DIRECTORY_ENUM = 0x00000800
- SMB2_SHAREFLAG_FORCE_LEVELII_OPLOCK = 0x00001000
- SMB2_SHAREFLAG_ENABLE_HASH_V1 = 0x00002000
- SMB2_SHAREFLAG_ENABLE_HASH_V2 = 0x00004000
- SMB2_SHAREFLAG_ENCRYPT_DATA = 0x00008000
- # Capabilities
- SMB2_SHARE_CAP_DFS = 0x00000008
- SMB2_SHARE_CAP_CONTINUOUS_AVAILABILITY = 0x00000010
- SMB2_SHARE_CAP_SCALEOUT = 0x00000020
- SMB2_SHARE_CAP_CLUSTER = 0x00000040
- # SMB_CREATE
- # Oplocks
- SMB2_OPLOCK_LEVEL_NONE = 0x00
- SMB2_OPLOCK_LEVEL_II = 0x01
- SMB2_OPLOCK_LEVEL_EXCLUSIVE = 0x08
- SMB2_OPLOCK_LEVEL_BATCH = 0x09
- SMB2_OPLOCK_LEVEL_LEASE = 0xFF
- # Impersonation Level
- SMB2_IL_ANONYMOUS = 0x00000000
- SMB2_IL_IDENTIFICATION = 0x00000001
- SMB2_IL_IMPERSONATION = 0x00000002
- SMB2_IL_DELEGATE = 0x00000003
- # File Attributes
- FILE_ATTRIBUTE_ARCHIVE = 0x00000020
- FILE_ATTRIBUTE_COMPRESSED = 0x00000800
- FILE_ATTRIBUTE_DIRECTORY = 0x00000010
- FILE_ATTRIBUTE_ENCRYPTED = 0x00004000
- FILE_ATTRIBUTE_HIDDEN = 0x00000002
- FILE_ATTRIBUTE_NORMAL = 0x00000080
- FILE_ATTRIBUTE_NOT_CONTENT_INDEXED = 0x00002000
- FILE_ATTRIBUTE_OFFLINE = 0x00001000
- FILE_ATTRIBUTE_READONLY = 0x00000001
- FILE_ATTRIBUTE_REPARSE_POINT = 0x00000400
- FILE_ATTRIBUTE_SPARSE_FILE = 0x00000200
- FILE_ATTRIBUTE_SYSTEM = 0x00000004
- FILE_ATTRIBUTE_TEMPORARY = 0x00000100
- FILE_ATTRIBUTE_INTEGRITY_STREAM = 0x00000800
- FILE_ATTRIBUTE_NO_SCRUB_DATA = 0x00020000
- # Share Access
- FILE_SHARE_READ = 0x00000001
- FILE_SHARE_WRITE = 0x00000002
- FILE_SHARE_DELETE = 0x00000004
- # Create Disposition
- FILE_SUPERSEDE = 0x00000000
- FILE_OPEN = 0x00000001
- FILE_CREATE = 0x00000002
- FILE_OPEN_IF = 0x00000003
- FILE_OVERWRITE = 0x00000004
- FILE_OVERWRITE_IF = 0x00000005
- # Create Options
- FILE_DIRECTORY_FILE = 0x00000001
- FILE_WRITE_THROUGH = 0x00000002
- FILE_SEQUENTIAL_ONLY = 0x00000004
- FILE_NO_INTERMEDIATE_BUFFERING = 0x00000008
- FILE_SYNCHRONOUS_IO_ALERT = 0x00000010
- FILE_SYNCHRONOUS_IO_NONALERT = 0x00000020
- FILE_NON_DIRECTORY_FILE = 0x00000040
- FILE_COMPLETE_IF_OPLOCKED = 0x00000100
- FILE_NO_EA_KNOWLEDGE = 0x00000200
- FILE_RANDOM_ACCESS = 0x00000800
- FILE_DELETE_ON_CLOSE = 0x00001000
- FILE_OPEN_BY_FILE_ID = 0x00002000
- FILE_OPEN_FOR_BACKUP_INTENT = 0x00004000
- FILE_NO_COMPRESSION = 0x00008000
- FILE_RESERVE_OPFILTER = 0x00100000
- FILE_OPEN_REPARSE_POINT = 0x00200000
- FILE_OPEN_NO_RECALL = 0x00400000
- FILE_OPEN_FOR_FREE_SPACE_QUERY = 0x00800000
- # File Access Mask / Desired Access
- FILE_READ_DATA = 0x00000001
- FILE_WRITE_DATA = 0x00000002
- FILE_APPEND_DATA = 0x00000004
- FILE_READ_EA = 0x00000008
- FILE_WRITE_EA = 0x00000010
- FILE_EXECUTE = 0x00000020
- FILE_READ_ATTRIBUTES = 0x00000080
- FILE_WRITE_ATTRIBUTES = 0x00000100
- DELETE = 0x00010000
- READ_CONTROL = 0x00020000
- WRITE_DAC = 0x00040000
- WRITE_OWNER = 0x00080000
- SYNCHRONIZE = 0x00100000
- ACCESS_SYSTEM_SECURITY = 0x01000000
- MAXIMUM_ALLOWED = 0x02000000
- GENERIC_ALL = 0x10000000
- GENERIC_EXECUTE = 0x20000000
- GENERIC_WRITE = 0x40000000
- GENERIC_READ = 0x80000000
- # Directory Access Mask
- FILE_LIST_DIRECTORY = 0x00000001
- FILE_ADD_FILE = 0x00000002
- FILE_ADD_SUBDIRECTORY = 0x00000004
- FILE_TRAVERSE = 0x00000020
- FILE_DELETE_CHILD = 0x00000040
- # Create Contexts
- SMB2_CREATE_EA_BUFFER = 0x45787441
- SMB2_CREATE_SD_BUFFER = 0x53656344
- SMB2_CREATE_DURABLE_HANDLE_REQUEST = 0x44486e51
- SMB2_CREATE_DURABLE_HANDLE_RECONNECT = 0x44486e43
- SMB2_CREATE_ALLOCATION_SIZE = 0x416c5369
- SMB2_CREATE_QUERY_MAXIMAL_ACCESS_REQUEST = 0x4d784163
- SMB2_CREATE_TIMEWARP_TOKEN = 0x54577270
- SMB2_CREATE_QUERY_ON_DISK_ID = 0x51466964
- SMB2_CREATE_REQUEST = 0x52714c73
- SMB2_CREATE_REQUEST_LEASE_V2 = 0x52714c73
- SMB2_CREATE_DURABLE_HANDLE_REQUEST_V2 = 0x44483251
- SMB2_CREATE_DURABLE_HANDLE_RECONNECT_V2 = 0x44483243
- SMB2_CREATE_APP_INSTANCE_ID = 0x45BCA66AEFA7F74A9008FA462E144D74
- # Flags
- SMB2_CREATE_FLAG_REPARSEPOINT = 0x1
- FILE_NEED_EA = 0x80
- # CreateAction
- FILE_SUPERSEDED = 0x00000000
- FILE_OPENED = 0x00000001
- FILE_CREATED = 0x00000002
- FILE_OVERWRITTEN = 0x00000003
- # SMB2_CREATE_REQUEST_LEASE states
- SMB2_LEASE_NONE = 0x00
- SMB2_LEASE_READ_CACHING = 0x01
- SMB2_LEASE_HANDLE_CACHING = 0x02
- SMB2_LEASE_WRITE_CACHING = 0x04
- # SMB2_CREATE_REQUEST_LEASE_V2 Flags
- SMB2_LEASE_FLAG_PARENT_LEASE_KEY_SET = 0x4
- # SMB2_CREATE_DURABLE_HANDLE_REQUEST_V2 Flags
- SMB2_DHANDLE_FLAG_PERSISTENT = 0x02
-
- # SMB2_CLOSE
- # Flags
- SMB2_CLOSE_FLAG_POSTQUERY_ATTRIB = 0x0001
- # SMB2_READ
- # Channel
- SMB2_CHANNEL_NONE = 0x00
- SMB2_CHANNEL_RDMA_V1 = 0x01
- # SMB2_WRITE
- # Flags
- SMB2_WRITEFLAG_WRITE_THROUGH = 0x01
- # Lease Break Notification
- SMB2_NOTIFY_BREAK_LEASE_FLAG_ACK_REQUIRED = 0x01
- # SMB_LOCK
- # Flags
- SMB2_LOCKFLAG_SHARED_LOCK = 0x01
- SMB2_LOCKFLAG_EXCLUSIVE_LOCK = 0x02
- SMB2_LOCKFLAG_UNLOCK = 0x04
- SMB2_LOCKFLAG_FAIL_IMMEDIATELY = 0x10
- # SMB IOCTL
- # Control Codes
- FSCTL_DFS_GET_REFERRALS = 0x00060194
- FSCTL_PIPE_PEEK = 0x0011400C
- FSCTL_PIPE_WAIT = 0x00110018
- FSCTL_PIPE_TRANSCEIVE = 0x0011C017
- FSCTL_SRV_COPYCHUNK = 0x001440F2
- FSCTL_SRV_ENUMERATE_SNAPSHOTS = 0x00144064
- FSCTL_SRV_REQUEST_RESUME_KEY = 0x00140078
- FSCTL_SRV_READ_HASH = 0x001441bb
- FSCTL_SRV_COPYCHUNK_WRITE = 0x001480F2
- FSCTL_LMR_REQUEST_RESILIENCY = 0x001401D4
- FSCTL_QUERY_NETWORK_INTERFACE_INFO = 0x001401FC
- FSCTL_SET_REPARSE_POINT = 0x000900A4
- FSCTL_DFS_GET_REFERRALS_EX = 0x000601B0
- FSCTL_FILE_LEVEL_TRIM = 0x00098208
- FSCTL_VALIDATE_NEGOTIATE_INFO = 0x00140204
- # Flags
- SMB2_0_IOCTL_IS_FSCTL = 0x1
- # SRV_READ_HASH
- # Type
- SRV_HASH_TYPE_PEER_DIST = 0x01
- # Version
- SRV_HASH_VER_1 = 0x1
- SRV_HASH_VER_2 = 0x2
- # Retrieval Type
- SRV_HASH_RETRIEVE_HASH_BASED = 0x01
- SRV_HASH_RETRIEVE_FILE_BASED = 0x02
- # NETWORK_INTERFACE_INFO
- # Capabilities
- RSS_CAPABLE = 0x01
- RDMA_CAPABLE = 0x02
- # SMB2_QUERY_DIRECTORIES
- # Information Class
- FILE_DIRECTORY_INFORMATION = 0x01
- FILE_FULL_DIRECTORY_INFORMATION = 0x02
- FILEID_FULL_DIRECTORY_INFORMATION = 0x26
- FILE_BOTH_DIRECTORY_INFORMATION = 0x03
- FILEID_BOTH_DIRECTORY_INFORMATION = 0x25
- FILENAMES_INFORMATION = 0x0C
- # Flags
- SMB2_RESTART_SCANS = 0x01
- SMB2_RETURN_SINGLE_ENTRY = 0x02
- SMB2_INDEX_SPECIFIED = 0x04
- SMB2_REOPEN = 0x10
- # SMB2_CHANGE_NOTIFY
- # Flags
- SMB2_WATCH_TREE = 0x01
- # Filters
- FILE_NOTIFY_CHANGE_FILE_NAME = 0x00000001
- FILE_NOTIFY_CHANGE_DIR_NAME = 0x00000002
- FILE_NOTIFY_CHANGE_ATTRIBUTES = 0x00000004
- FILE_NOTIFY_CHANGE_SIZE = 0x00000008
- FILE_NOTIFY_CHANGE_LAST_WRITE = 0x00000010
- FILE_NOTIFY_CHANGE_LAST_ACCESS = 0x00000020
- FILE_NOTIFY_CHANGE_CREATION = 0x00000040
- FILE_NOTIFY_CHANGE_EA = 0x00000080
- FILE_NOTIFY_CHANGE_SECURITY = 0x00000100
- FILE_NOTIFY_CHANGE_STREAM_NAME = 0x00000200
- FILE_NOTIFY_CHANGE_STREAM_SIZE = 0x00000400
- FILE_NOTIFY_CHANGE_STREAM_WRITE = 0x00000800
- # FILE_NOTIFY_INFORMATION
- # Actions
- FILE_ACTION_ADDED = 0x00000001
- FILE_ACTION_REMOVED = 0x00000002
- FILE_ACTION_MODIFIED = 0x00000003
- FILE_ACTION_RENAMED_OLD_NAME = 0x00000004
- FILE_ACTION_RENAMED_NEW_NAME = 0x00000005
- # SMB2_QUERY_INFO
- # InfoTypes
- SMB2_0_INFO_FILE = 0x01
- SMB2_0_INFO_FILESYSTEM = 0x02
- SMB2_0_INFO_SECURITY = 0x03
- SMB2_0_INFO_QUOTA = 0x04
- # File Information Classes
- SMB2_FILE_ACCESS_INFO = 8
- SMB2_FILE_ALIGNMENT_INFO = 17
- SMB2_FILE_ALL_INFO = 18
- SMB2_FILE_ALLOCATION_INFO = 19
- SMB2_FILE_ALTERNATE_NAME_INFO = 21
- SMB2_ATTRIBUTE_TAG_INFO = 35
- SMB2_FILE_BASIC_INFO = 4
- SMB2_FILE_BOTH_DIRECTORY_INFO = 3
- SMB2_FILE_COMPRESSION_INFO = 28
- SMB2_FILE_DIRECTORY_INFO = 1
- SMB2_FILE_DISPOSITION_INFO = 13
- SMB2_FILE_EA_INFO = 7
- SMB2_FILE_END_OF_FILE_INFO = 20
- SMB2_FULL_DIRECTORY_INFO = 2
- SMB2_FULL_EA_INFO = 15
- SMB2_FILE_HARDLINK_INFO = 46
- SMB2_FILE_ID_BOTH_DIRECTORY_INFO = 37
- SMB2_FILE_ID_FULL_DIRECTORY_INFO = 38
- SMB2_FILE_ID_GLOBAL_TX_DIRECTORY_INFO = 50
- SMB2_FILE_INTERNAL_INFO = 6
- SMB2_FILE_LINK_INFO = 11
- SMB2_FILE_MAILSLOT_QUERY_INFO = 26
- SMB2_FILE_MAILSLOT_SET_INFO = 27
- SMB2_FILE_MODE_INFO = 16
- SMB2_FILE_MOVE_CLUSTER_INFO = 31
- SMB2_FILE_NAME_INFO = 9
- SMB2_FILE_NAMES_INFO = 12
- SMB2_FILE_NETWORK_OPEN_INFO = 34
- SMB2_FILE_NORMALIZED_NAME_INFO = 48
- SMB2_FILE_OBJECT_ID_INFO = 29
- SMB2_FILE_PIPE_INFO = 23
- SMB2_FILE_PIPE_LOCAL_INFO = 24
- SMB2_FILE_PIPE_REMOTE_INFO = 25
- SMB2_FILE_POSITION_INFO = 14
- SMB2_FILE_QUOTA_INFO = 32
- SMB2_FILE_RENAME_INFO = 10
- SMB2_FILE_REPARSE_POINT_INFO = 33
- SMB2_FILE_SFIO_RESERVE_INFO = 44
- SMB2_FILE_SHORT_NAME_INFO = 45
- SMB2_FILE_STANDARD_INFO = 5
- SMB2_FILE_STANDARD_LINK_INFO = 54
- SMB2_FILE_STREAM_INFO = 22
- SMB2_FILE_TRACKING_INFO = 36
- SMB2_FILE_VALID_DATA_LENGTH_INFO = 39
- # File System Information Classes
- SMB2_FILESYSTEM_VOLUME_INFO = 1
- SMB2_FILESYSTEM_LABEL_INFO = 2
- SMB2_FILESYSTEM_SIZE_INFO = 3
- SMB2_FILESYSTEM_DEVICE_INFO = 4
- SMB2_FILESYSTEM_ATTRIBUTE_INFO = 5
- SMB2_FILESYSTEM_CONTROL_INFO = 6
- SMB2_FILESYSTEM_FULL_SIZE_INFO = 7
- SMB2_FILESYSTEM_OBJECT_ID_INFO = 8
- SMB2_FILESYSTEM_DRIVER_PATH_INFO = 9
- SMB2_FILESYSTEM_SECTOR_SIZE_INFO = 11
- # Additional information
- OWNER_SECURITY_INFORMATION = 0x00000001
- GROUP_SECURITY_INFORMATION = 0x00000002
- DACL_SECURITY_INFORMATION = 0x00000004
- SACL_SECURITY_INFORMATION = 0x00000008
- LABEL_SECURITY_INFORMATION = 0x00000010
- # Flags
- SL_RESTART_SCAN = 0x00000001
- SL_RETURN_SINGLE_ENTRY = 0x00000002
- SL_INDEX_SPECIFIED = 0x00000004
- # TRANSFORM_HEADER
- SMB2_ENCRYPTION_AES128_CCM = 0x0001
- # STRUCtures
- # Represents a SMB2/3 Packet
- class SMBPacketBase(Structure):
- def addCommand(self,command):
- # Pad to 8 bytes and put the offset of another SMBPacket
- raise 'Implement This!'
- def isValidAnswer(self, status):
- if self['Status'] != status:
- import smb3
- raise smb3.SessionError(self['Status'], self)
- return True
- def __init__(self, data = None):
- Structure.__init__(self,data)
- if data is None:
- self['TreeID'] = 0
- class SMB2PacketAsync(SMBPacketBase):
- structure = (
- ('ProtocolID','"\xfeSMB'),
- ('StructureSize','<H=64'),
- ('CreditCharge','<H=0'),
- ('Status','<L=0'),
- ('Command','<H=0'),
- ('CreditRequestResponse','<H=0'),
- ('Flags','<L=0'),
- ('NextCommand','<L=0'),
- ('MessageID','<Q=0'),
- ('AsyncID','<Q=0'),
- ('SessionID','<Q=0'),
- ('Signature','16s=""'),
- ('Data',':=""'),
- )
- class SMB3PacketAsync(SMBPacketBase):
- structure = (
- ('ProtocolID','"\xfeSMB'),
- ('StructureSize','<H=64'),
- ('CreditCharge','<H=0'),
- ('ChannelSequence','<H=0'),
- ('Reserved','<H=0'),
- ('Command','<H=0'),
- ('CreditRequestResponse','<H=0'),
- ('Flags','<L=0'),
- ('NextCommand','<L=0'),
- ('MessageID','<Q=0'),
- ('AsyncID','<Q=0'),
- ('SessionID','<Q=0'),
- ('Signature','16s=""'),
- ('Data',':=""'),
- )
- class SMB2Packet(SMBPacketBase):
- structure = (
- ('ProtocolID','"\xfeSMB'),
- ('StructureSize','<H=64'),
- ('CreditCharge','<H=0'),
- ('Status','<L=0'),
- ('Command','<H=0'),
- ('CreditRequestResponse','<H=0'),
- ('Flags','<L=0'),
- ('NextCommand','<L=0'),
- ('MessageID','<Q=0'),
- ('Reserved','<L=0'),
- ('TreeID','<L=0'),
- ('SessionID','<Q=0'),
- ('Signature','16s=""'),
- ('Data',':=""'),
- )
- class SMB3Packet(SMBPacketBase):
- structure = (
- ('ProtocolID','"\xfeSMB'),
- ('StructureSize','<H=64'),
- ('CreditCharge','<H=0'),
- ('ChannelSequence','<H=0'),
- ('Reserved','<H=0'),
- ('Command','<H=0'),
- ('CreditRequestResponse','<H=0'),
- ('Flags','<L=0'),
- ('NextCommand','<L=0'),
- ('MessageID','<Q=0'),
- ('Reserved','<L=0'),
- ('TreeID','<L=0'),
- ('SessionID','<Q=0'),
- ('Signature','16s=""'),
- ('Data',':=""'),
- )
- class SMB2Error(Structure):
- structure = (
- ('StructureSize','<H=9'),
- ('Reserved','<H=0'),
- ('ByteCount','<L=0'),
- ('_ErrorData','_-ErrorData','self["ByteCount"]'),
- ('ErrorData','"\xff'),
- )
- class SMB2ErrorSymbolicLink(Structure):
- structure = (
- ('SymLinkLength','<L=0'),
- ('SymLinkErrorTag','<L=0'),
- ('ReparseTag','<L=0'),
- ('ReparseDataLenght','<H=0'),
- ('UnparsedPathLength','<H=0'),
- ('SubstituteNameOffset','<H=0'),
- ('SubstituteNameLength','<H=0'),
- ('PrintNameOffset','<H=0'),
- ('PrintNameLength','<H=0'),
- ('Flags','<L=0'),
- ('PathBuffer',':'),
- )
- # SMB2_NEGOTIATE
- class SMB2Negotiate(Structure):
- structure = (
- ('StructureSize','<H=36'),
- ('DialectCount','<H=0'),
- ('SecurityMode','<H=0'),
- ('Reserved','<H=0'),
- ('Capabilities','<L=0'),
- ('ClientGuid','16s=""'),
- ('ClientStartTime','<Q=0'),
- ('Dialects','*<H'),
- )
- class SMB2Negotiate_Response(Structure):
- structure = (
- ('StructureSize','<H=65'),
- ('SecurityMode','<H=0'),
- ('DialectRevision','<H=0'),
- ('Reserved','<H=0'),
- ('ServerGuid','16s=""'),
- ('Capabilities','<L=0'),
- ('MaxTransactSize','<L=0'),
- ('MaxReadSize','<L=0'),
- ('MaxWriteSize','<L=0'),
- ('SystemTime','<Q=0'),
- ('ServerStartTime','<Q=0'),
- ('SecurityBufferOffset','<H=0'),
- ('SecurityBufferLength','<H=0'),
- ('Reserved2','<L=0'),
- ('_AlignPad','_-AlignPad','self["SecurityBufferOffset"] - (64 + self["StructureSize"] - 1)'),
- ('AlignPad',':=""'),
- ('_Buffer','_-Buffer','self["SecurityBufferLength"]'),
- ('Buffer',':'),
- )
- # SMB2_SESSION_SETUP
- class SMB2SessionSetup(Structure):
- SIZE = 24
- structure = (
- ('StructureSize','<H=25'),
- ('Flags','<B=0'),
- ('SecurityMode','<B=0'),
- ('Capabilities','<L=0'),
- ('Channel','<L=0'),
- ('SecurityBufferOffset','<H=(self.SIZE + 64 + len(self["AlignPad"]))'),
- ('SecurityBufferLength','<H=0'),
- ('PreviousSessionId','<Q=0'),
- ('_AlignPad','_-AlignPad','self["SecurityBufferOffset"] - (64 + self["StructureSize"] - 1)'),
- ('AlignPad',':=""'),
- ('_Buffer','_-Buffer','self["SecurityBufferLength"]'),
- ('Buffer',':'),
- )
- def __init__(self, data = None):
- Structure.__init__(self,data)
- if data is None:
- self['AlignPad'] = ''
- def getData(self):
- #self['AlignPad'] = '\x00' * ((8 - ((24 + SMB2_PACKET_SIZE) & 7)) & 7)
- #self['SecurityBufferOffset'] = 24 + SMB2_PACKET_SIZE +len(self['AlignPad'])
- #self['SecurityBufferLength'] += len(self['AlignPad'])
- return Structure.getData(self)
-
- class SMB2SessionSetup_Response(Structure):
- structure = (
- ('StructureSize','<H=9'),
- ('SessionFlags','<H=0'),
- ('SecurityBufferOffset','<H=0'),
- ('SecurityBufferLength','<H=0'),
- ('_AlignPad','_-AlignPad','self["SecurityBufferOffset"] - (64 + self["StructureSize"] - 1)'),
- ('AlignPad',':=""'),
- ('_Buffer','_-Buffer','self["SecurityBufferLength"]'),
- ('Buffer',':'),
- )
- # SMB2_LOGOFF
- class SMB2Logoff(Structure):
- structure = (
- ('StructureSize','<H=4'),
- ('Reserved','<H=0'),
- )
- class SMB2Logoff_Response(Structure):
- structure = (
- ('StructureSize','<H=4'),
- ('Reserved','<H=0'),
- )
- # SMB2_TREE_CONNECT
- class SMB2TreeConnect(Structure):
- SIZE = 8
- structure = (
- ('StructureSize','<H=9'),
- ('Reserved','<H=0'),
- ('PathOffset','<H=(self.SIZE + 64 + len(self["AlignPad"]))'),
- ('PathLength','<H=0'),
- ('_AlignPad','_-AlignPad','self["PathOffset"] - (64 + self.SIZE - 1)'),
- ('AlignPad',':=""'),
- ('_Buffer','_-Buffer','self["PathLength"]'),
- ('Buffer',':'),
- )
- def __init__(self, data = None):
- Structure.__init__(self,data)
- if data is None:
- self['AlignPad'] = ''
- class SMB2TreeConnect_Response(Structure):
- structure = (
- ('StructureSize','<H=16'),
- ('ShareType','<B=0'),
- ('Reserved','<B=0'),
- ('ShareFlags','<L=0'),
- ('Capabilities','<L=0'),
- ('MaximalAccess','<L=0'),
- )
- # SMB2_TREE_DISCONNECT
- class SMB2TreeDisconnect(Structure):
- structure = (
- ('StructureSize','<H=4'),
- ('Reserved','<H=0'),
- )
- class SMB2TreeDisconnect_Response(Structure):
- structure = (
- ('StructureSize','<H=4'),
- ('Reserved','<H=0'),
- )
- # SMB2_CREATE
- class SMB2Create(Structure):
- SIZE = 56
- structure = (
- ('StructureSize','<H=57'),
- ('SecurityFlags','<B=0'),
- ('RequestedOplockLevel','<B=0'),
- ('ImpersonationLevel','<L=0'),
- ('SmbCreateFlags','<Q=0'),
- ('Reserved','<Q=0'),
- ('DesiredAccess','<L=0'),
- ('FileAttributes','<L=0'),
- ('ShareAccess','<L=0'),
- ('CreateDisposition','<L=0'),
- ('CreateOptions','<L=0'),
- ('NameOffset','<H=(self.SIZE + 64 + len(self["AlignPad"]))'),
- ('NameLength','<H=0'),
- ('CreateContextsOffset','<L=0'),
- ('CreateContextsLength','<L=0'),
- ('_AlignPad','_-AlignPad','self["NameOffset"] - (64 + self["StructureSize"] - 1)'),
- ('AlignPad',':=""'),
- ('_Buffer','_-Buffer','self["CreateContextsLength"]+self["NameLength"]'),
- ('Buffer',':'),
- )
- def __init__(self, data = None):
- Structure.__init__(self,data)
- if data is None:
- self['AlignPad'] = ''
- class SMB2CreateContext(Structure):
- structure = (
- ('Next','<L=0'),
- ('NameOffset','<H=0'),
- ('NameLength','<H=0'),
- ('Reserved','<H=0'),
- ('DataOffset','<H=0'),
- ('DataLength','<L=0'),
- ('_Buffer','_-Buffer','self["DataLength"]+self["NameLength"]'),
- ('Buffer',':'),
- )
- class SMB2_FILEID(Structure):
- structure = (
- ('Persistent','<Q=0'),
- ('Volatile','<Q=0'),
- )
- class SMB2Create_Response(Structure):
- structure = (
- ('StructureSize','<H=89'),
- ('OplockLevel','<B=0'),
- ('Flags','<B=0'),
- ('CreateAction','<L=0'),
- ('CreationTime','<Q=0'),
- ('LastAccessTime','<Q=0'),
- ('LastWriteTime','<Q=0'),
- ('ChangeTime','<Q=0'),
- ('AllocationSize','<Q=0'),
- ('EndOfFile','<Q=0'),
- ('FileAttributes','<L=0'),
- ('Reserved2','<L=0'),
- ('FileID',':',SMB2_FILEID),
- ('CreateContextsOffset','<L=0'),
- ('CreateContextsLength','<L=0'),
- ('_AlignPad','_-AlignPad','self["CreateContextsOffset"] - (64 + self["StructureSize"] - 1)'),
- ('AlignPad',':=""'),
- ('_Buffer','_-Buffer','self["CreateContextsLength"]'),
- ('Buffer',':'),
- )
- class FILE_FULL_EA_INFORMATION(Structure):
- structure = (
- ('NextEntryOffset','<L=0'),
- ('Flags','<B=0'),
- ('EaNameLength','<B=0'),
- ('EaValueLength','<H=0'),
- ('_EaName','_-EaName','self["EaNameLength"]'),
- ('EaName',':'),
- ('_EaValue','_-EaValue','self["EaValue"]'),
- ('EaValue',':'),
- )
- class SMB2_CREATE_DURABLE_HANDLE_RECONNECT(Structure):
- structure = (
- ('Data',':',SMB2_FILEID),
- )
- class SMB2_CREATE_DURABLE_HANDLE_REQUEST(Structure):
- structure = (
- ('DurableRequest','16s=""'),
- )
- class SMB2_CREATE_DURABLE_HANDLE_RESPONSE(Structure):
- structure = (
- ('Reserved','<Q=0'),
- )
- class SMB2_CREATE_QUERY_MAXIMAL_ACCESS_REQUEST(Structure):
- structure = (
- ('Timestamp','<Q=0'),
- )
- class SMB2_CREATE_QUERY_MAXIMAL_ACCESS_RESPONSE(Structure):
- structure = (
- ('QueryStatus','<L=0'),
- ('MaximalAccess','<L=0'),
- )
- class SMB2_CREATE_ALLOCATION_SIZE(Structure):
- structure = (
- ('AllocationSize','<Q=0'),
- )
- class SMB2_CREATE_TIMEWARP_TOKEN(Structure):
- structure = (
- ('AllocationSize','<Q=0'),
- )
- class SMB2_CREATE_REQUEST_LEASE(Structure):
- structure = (
- ('LeaseKey','16s=""'),
- ('LeaseState','<L=0'),
- ('LeaseFlags','<L=0'),
- ('LeaseDuration','<Q=0'),
- )
- SMB2_CREATE_RESPONSE_LEASE = SMB2_CREATE_REQUEST_LEASE
- class SMB2_CREATE_REQUEST_LEASE_V2(Structure):
- structure = (
- ('LeaseKey','16s=""'),
- ('LeaseState','<L=0'),
- ('Flags','<L=0'),
- ('LeaseDuration','<Q=0'),
- ('ParentLeaseKey','16s=""'),
- ('Epoch','<H=0'),
- ('Reserved','<H=0'),
- )
- SMB2_CREATE_RESPONSE_LEASE_V2 = SMB2_CREATE_REQUEST_LEASE_V2
- class SMB2_CREATE_DURABLE_HANDLE_REQUEST_V2(Structure):
- structure = (
- ('Timeout','<L=0'),
- ('Flags','<L=0'),
- ('Reserved','8s=""'),
- ('CreateGuid','16s=""'),
- )
- class SMB2_CREATE_DURABLE_HANDLE_RESPONSE_V2(Structure):
- structure = (
- ('Timeout','<L=0'),
- ('Flags','<L=0'),
- )
- class SMB2_CREATE_DURABLE_HANDLE_RECONNECT_V2(Structure):
- structure = (
- ('FileID',':', SMB2_FILEID),
- ('CreateGuid','16s=""'),
- ('Flags','<L=0'),
- )
- class SMB2_CREATE_APP_INSTANCE_ID(Structure):
- structure = (
- ('StructureSize','<H=0'),
- ('Reserved','<H=0'),
- ('AppInstanceId','16s=""'),
- )
- class SMB2_CREATE_QUERY_ON_DISK_ID(Structure):
- structure = (
- ('DiskIDBuffer','32s=""'),
- )
- # Todo: Add Classes for
- #SMB2_CREATE_SD_BUFFER
- # SMB2_CLOSE
- class SMB2Close(Structure):
- structure = (
- ('StructureSize','<H=24'),
- ('Flags','<H=0'),
- ('Reserved','<L=0'),
- ('FileID',':', SMB2_FILEID),
- )
- class SMB2Close_Response(Structure):
- structure = (
- ('StructureSize','<H=60'),
- ('Flags','<H=0'),
- ('Reserved','<L=0'),
- ('CreationTime','<Q=0'),
- ('LastAccessTime','<Q=0'),
- ('LastWriteTime','<Q=0'),
- ('ChangeTime','<Q=0'),
- ('AllocationSize','<Q=0'),
- ('EndofFile','<Q=0'),
- ('FileAttributes','<L=0'),
- )
- # SMB2_FLUSH
- class SMB2Flush(Structure):
- structure = (
- ('StructureSize','<H=24'),
- ('Reserved1','<H=0'),
- ('Reserved2','<L=0'),
- ('FileID',':',SMB2_FILEID),
- )
- class SMB2Flush_Response(Structure):
- structure = (
- ('StructureSize','<H=4'),
- ('Reserved','<H=0'),
- )
- # SMB2_READ
- class SMB2Read(Structure):
- SIZE = 48
- structure = (
- ('StructureSize','<H=49'),
- ('Padding','<B=0'),
- ('Reserved','<B=0'),
- ('Length','<L=0'),
- ('Offset','<Q=0'),
- ('FileID',':',SMB2_FILEID),
- ('MinimumCount','<L=0'),
- ('Channel','<L=0'),
- ('RemainingBytes','<L=0'),
- ('ReadChannelInfoOffset','<H=0'),
- ('ReadChannelInfoLength','<H=0'),
- ('_AlignPad','_-AlignPad','self["ReadChannelInfoOffset"] - (64 + self["StructureSize"] - 1)'),
- ('AlignPad',':=""'),
- ('_Buffer','_-Buffer','self["ReadChannelInfoLength"]'),
- ('Buffer',':=0'),
- )
- def __init__(self, data = None):
- Structure.__init__(self,data)
- if data is None:
- self['AlignPad'] = ''
- class SMB2Read_Response(Structure):
- structure = (
- ('StructureSize','<H=17'),
- ('DataOffset','<B=0'),
- ('Reserved','<B=0'),
- ('DataLength','<L=0'),
- ('DataRemaining','<L=0'),
- ('Reserved2','<L=0'),
- ('_AlignPad','_-AlignPad','self["DataOffset"] - (64 + self["StructureSize"] - 1)'),
- ('AlignPad',':=""'),
- ('_Buffer','_-Buffer','self["DataLength"]'),
- ('Buffer',':'),
- )
- # SMB2_WRITE
- class SMB2Write(Structure):
- SIZE = 48
- structure = (
- ('StructureSize','<H=49'),
- ('DataOffset','<H=(self.SIZE + 64 + len(self["AlignPad"]))'),
- ('Length','<L=0'),
- ('Offset','<Q=0'),
- ('FileID',':',SMB2_FILEID),
- ('Channel','<L=0'),
- ('RemainingBytes','<L=0'),
- ('WriteChannelInfoOffset','<H=0'),
- ('WriteChannelInfoLength','<H=0'),
- ('_AlignPad','_-AlignPad','self["DataOffset"] + self["WriteChannelInfoOffset"] - (64 + self["StructureSize"] - 1)'),
- ('AlignPad',':=""'),
- ('Flags','<L=0'),
- ('_Buffer','_-Buffer','self["Length"]+self["WriteChannelInfoLength"]'),
- ('Buffer',':'),
- )
- def __init__(self, data = None):
- Structure.__init__(self,data)
- if data is None:
- self['AlignPad'] = ''
- class SMB2Write_Response(Structure):
- structure = (
- ('StructureSize','<H=17'),
- ('Reserved','<H=0'),
- ('Count','<L=0'),
- ('Remaining','<L=0'),
- ('WriteChannelInfoOffset','<H=0'),
- ('WriteChannelInfoLength','<H=0'),
- )
- class SMB2OplockBreakNotification(Structure):
- structure = (
- ('StructureSize','<H=24'),
- ('OplockLevel','<B=0'),
- ('Reserved','<B=0'),
- ('Reserved2','<L=0'),
- ('FileID',':',SMB2_FILEID),
- )
- SMB2OplockBreakAcknowledgment = SMB2OplockBreakNotification
- SMB2OplockBreakResponse = SMB2OplockBreakNotification
- class SMB2LeaseBreakNotification(Structure):
- structure = (
- ('StructureSize','<H=44'),
- ('NewEpoch','<H=0'),
- ('Flags','<L=0'),
- ('LeaseKey','16s=""'),
- ('CurrentLeaseState','<L=0'),
- ('NewLeaseState','<L=0'),
- ('BreakReason','<L=0'),
- ('AccessMaskHint','<L=0'),
- ('ShareMaskHint','<L=0'),
- )
- class SMB2LeaseBreakAcknowledgement(Structure):
- structure = (
- ('StructureSize','<H=36'),
- ('Reserved','<H=0'),
- ('Flags','<L=0'),
- ('LeaseKey','16s=""'),
- ('LeaseState','<L=0'),
- ('LeaseDuration','<Q=0'),
- )
- SMB2LeaseBreakResponse = SMB2LeaseBreakAcknowledgement
- # SMB2_LOCK
- class SMB2_LOCK_ELEMENT(Structure):
- structure = (
- ('Offset','<Q=0'),
- ('Length','<Q=0'),
- ('Flags','<L=0'),
- ('Reserved','<L=0'),
- )
- class SMB2Lock(Structure):
- structure = (
- ('StructureSize','<H=48'),
- ('LockCount','<H=0'),
- ('LockSequence','<L=0'),
- ('FileID',':',SMB2_FILEID),
- ('_Locks','_-Locks','self["LockCount"]*24'),
- ('Locks',':'),
- )
- class SMB2Lock_Response(Structure):
- structure = (
- ('StructureSize','<H=4'),
- ('Reserved','<H=0'),
- )
- # SMB2_ECHO
- class SMB2Echo(Structure):
- structure = (
- ('StructureSize','<H=4'),
- ('Reserved','<H=0'),
- )
- SMB2Echo_Response = SMB2Echo
- # SMB2_CANCEL`
- class SMB2Cancel(Structure):
- structure = (
- ('StructureSize','<H=4'),
- ('Reserved','<H=0'),
- )
- # SMB2_IOCTL
- class SMB2Ioctl(Structure):
- SIZE = 56
- structure = (
- ('StructureSize','<H=57'),
- ('Reserved','<H=0'),
- ('CtlCode','<L=0'),
- ('FileID',':',SMB2_FILEID),
- ('InputOffset','<L=(self.SIZE + 64 + len(self["AlignPad"]))'),
- ('InputCount','<L=0'),
- ('MaxInputResponse','<L=0'),
- ('OutputOffset','<L=(self.SIZE + 64 + len(self["AlignPad"]) + self["InputCount"])'),
- ('OutputCount','<L=0'),
- ('MaxOutputResponse','<L=0'),
- ('Flags','<L=0'),
- ('Reserved2','<L=0'),
- #('_AlignPad','_-AlignPad','self["InputOffset"] + self["OutputOffset"] - (64 + self["StructureSize"] - 1)'),
- #('AlignPad',':=""'),
- ('_Buffer','_-Buffer','self["InputCount"]+self["OutputCount"]'),
- ('Buffer',':'),
- )
- def __init__(self, data = None):
- Structure.__init__(self,data)
- if data is None:
- self['AlignPad'] = ''
- class FSCTL_PIPE_WAIT_STRUCTURE(Structure):
- structure = (
- ('Timeout','<q=0'),
- ('NameLength','<L=0'),
- ('TimeoutSpecified','<B=0'),
- ('Padding','<B=0'),
- ('_Name','_-Name','self["NameLength"]'),
- ('Name',':'),
- )
- class SRV_COPYCHUNK_COPY(Structure):
- structure = (
- ('SourceKey','24s=""'),
- ('ChunkCount','<L=0'),
- ('Reserved','<L=0'),
- ('_Chunks','_-Chunks', 'self["ChunkCount"]*len(SRV_COPYCHUNK)'),
- ('Chunks',':'),
- )
- class SRV_COPYCHUNK(Structure):
- structure = (
- ('SourceOffset','<Q=0'),
- ('TargetOffset','<Q=0'),
- ('Length','<L=0'),
- ('Reserved','<L=0'),
- )
- class SRV_COPYCHUNK_RESPONSE(Structure):
- structure = (
- ('ChunksWritten','<L=0'),
- ('ChunkBytesWritten','<L=0'),
- ('TotalBytesWritten','<L=0'),
- )
- class SRV_READ_HASH(Structure):
- structure = (
- ('HashType','<L=0'),
- ('HashVersion','<L=0'),
- ('HashRetrievalType','<L=0'),
- ('Length','<L=0'),
- ('Offset','<Q=0'),
- )
- class NETWORK_RESILIENCY_REQUEST(Structure):
- structure = (
- ('Timeout','<L=0'),
- ('Reserved','<L=0'),
- )
- class VALIDATE_NEGOTIATE_INFO(Structure):
- structure = (
- ('Capabilities','<L=0'),
- ('Guid','16s=""'),
- ('SecurityMode','<H=0'),
- #('DialectCount','<H=0'),
- ('Dialects','<H*<H'),
- )
- class SRV_SNAPSHOT_ARRAY(Structure):
- structure = (
- ('NumberOfSnapShots','<L=0'),
- ('NumberOfSnapShotsReturned','<L=0'),
- ('SnapShotArraySize','<L=0'),
- ('_SnapShots','_-SnapShots','self["SnapShotArraySize"]'),
- ('SnapShots',':'),
- )
- class SRV_REQUEST_RESUME_KEY(Structure):
- structure = (
- ('ResumeKey','24s=""'),
- ('ContextLength','<L=0'),
- ('_Context','_-Context','self["ContextLength"]'),
- ('Context',':'),
- )
- class HASH_HEADER(Structure):
- structure = (
- ('HashType','<L=0'),
- ('HashVersion','<L=0'),
- ('SourceFileChangeTime','<Q=0'),
- ('SourceFileSize','<Q=0'),
- ('HashBlobLength','<L=0'),
- ('HashBlobOffset','<L=0'),
- ('Dirty','<H=0'),
- ('SourceFileNameLength','<L=0'),
- ('_SourceFileName','_-SourceFileName','self["SourceFileNameLength"]',),
- ('SourceFileName',':'),
- )
- class SRV_HASH_RETRIEVE_HASH_BASED(Structure):
- structure = (
- ('Offset','<Q=0'),
- ('BufferLength','<L=0'),
- ('Reserved','<L=0'),
- ('_Buffer','_-Buffer','self["BufferLength"]'),
- ('Buffer',':'),
- )
- class SRV_HASH_RETRIEVE_FILE_BASED(Structure):
- structure = (
- ('FileDataOffset','<Q=0'),
- ('FileDataLength','<Q=0'),
- ('BufferLength','<L=0'),
- ('Reserved','<L=0'),
- ('_Buffer','_-Buffer','self["BufferLength"]'),
- ('Buffer',':'),
- )
- class NETWORK_INTERFACE_INFO(Structure):
- structure = (
- ('Next','<L=0'),
- ('IfIndex','<L=0'),
- ('Capability','<L=0'),
- ('Reserved','<L=0'),
- ('LinkSpeed','<Q=0'),
- ('SockAddr_Storage','128s=""'),
- )
- class SMB2Ioctl_Response(Structure):
- structure = (
- ('StructureSize','<H=49'),
- ('Reserved','<H=0'),
- ('CtlCode','<L=0'),
- ('FileID',':',SMB2_FILEID),
- ('InputOffset','<L=0'),
- ('InputCount','<L=0'),
- ('OutputOffset','<L=0'),
- ('OutputCount','<L=0'),
- ('Flags','<L=0'),
- ('Reserved2','<L=0'),
- ('_AlignPad','_-AlignPad','self["OutputOffset"] - (64 + self["StructureSize"] - 1)'),
- ('AlignPad',':=""'),
- ('_Buffer','_-Buffer','self["InputCount"]+self["OutputCount"]'),
- ('Buffer',':'),
- )
- # SMB2_QUERY_DIRECTORY
- class SMB2QueryDirectory(Structure):
- SIZE = 32
- structure = (
- ('StructureSize','<H=33'),
- ('FileInformationClass','<B=0'),
- ('Flags','<B=0'),
- ('FileIndex','<L=0'),
- ('FileID',':',SMB2_FILEID),
- ('FileNameOffset','<H=(self.SIZE + 64 + len(self["AlignPad"]))'),
- ('FileNameLength','<H=0'),
- ('OutputBufferLength','<L=0'),
- ('_AlignPad','_-AlignPad','self["FileNameOffset"] - (64 + self["StructureSize"] - 1)'),
- ('AlignPad',':=""'),
- ('_Buffer','_-Buffer','self["FileNameLength"]'),
- ('Buffer',':'),
- )
- def __init__(self, data = None):
- Structure.__init__(self,data)
- if data is None:
- self['AlignPad'] = ''
- class SMB2QueryDirectory_Response(Structure):
- structure = (
- ('StructureSize','<H=9'),
- ('OutputBufferOffset','<H=0'),
- ('OutputBufferLength','<L=0'),
- ('_AlignPad','_-AlignPad','self["OutputBufferOffset"] - (64 + self["StructureSize"] - 1)'),
- ('AlignPad',':=""'),
- ('_Buffer','_-Buffer','self["OutputBufferLength"]'),
- ('Buffer',':'),
- )
- # SMB2_CHANGE_NOTIFY
- class SMB2ChangeNotify(Structure):
- structure = (
- ('StructureSize','<H=32'),
- ('Flags','<H=0'),
- ('OutputBufferLength','<L=0'),
- ('FileID',':',SMB2_FILEID),
- ('CompletionFilter','<L=0'),
- ('Reserved','<L=0'),
- )
- class SMB2ChangeNotify_Response(Structure):
- structure = (
- ('StructureSize','<H=9'),
- ('OutputBufferOffset','<H=0'),
- ('OutputBufferLength','<L=0'),
- ('_AlignPad','_-AlignPad','self["OutputBufferOffset"] - (64 + self["StructureSize"] - 1)'),
- ('AlignPad',':=""'),
- ('_Buffer','_-Buffer','self["OutputBufferLength"]'),
- ('Buffer',':'),
- )
- class FILE_NOTIFY_INFORMATION(Structure):
- structure = (
- ('NextEntryOffset','<L=0'),
- ('Action','<L=0'),
- ('FileNameLength','<L=0'),
- ('_FileName','_-FileName','self["FileNameLength"]',),
- ('FileName',':'),
- )
- # SMB2_QUERY_INFO
- class SMB2QueryInfo(Structure):
- SIZE = 40
- structure = (
- ('StructureSize','<H=41'),
- ('InfoType','<B=0'),
- ('FileInfoClass','<B=0'),
- ('OutputBufferLength','<L=0'),
- ('InputBufferOffset','<H=(self.SIZE + 64 + len(self["AlignPad"]))'),
- ('Reserved','<H=0'),
- ('InputBufferLength','<L=0'),
- ('AdditionalInformation','<L=0'),
- ('Flags','<L=0'),
- ('FileID',':',SMB2_FILEID),
- ('_AlignPad','_-AlignPad','self["InputBufferOffset"] - (64 + self["StructureSize"] - 1)'),
- ('AlignPad',':=""'),
- ('_Buffer','_-Buffer','self["InputBufferLength"]'),
- ('Buffer',':'),
- )
- def __init__(self, data = None):
- Structure.__init__(self,data)
- if data is None:
- self['AlignPad'] = ''
- class SMB2_QUERY_QUOTA_INFO(Structure):
- structure = (
- ('ReturnSingle','<B=0'),
- ('RestartScan','<B=0'),
- ('Reserved','<H=0'),
- ('SidListLength','<L=0'),
- ('StartSidLength','<L=0'),
- ('StartSidOffset','<L=0'),
- # ToDo: Check 2.2.37.1 here
- ('SidBuffer',':'),
- )
- class SMB2QueryInfo_Response(Structure):
- structure = (
- ('StructureSize','<H=9'),
- ('OutputBufferOffset','<H=0'),
- ('OutputBufferLength','<L=0'),
- ('_AlignPad','_-AlignPad','self["OutputBufferOffset"] - (64 + self["StructureSize"] - 1)'),
- ('AlignPad',':=""'),
- ('_Buffer','_-Buffer','self["OutputBufferLength"]'),
- ('Buffer',':'),
- )
- # SMB2_SET_INFO
- class SMB2SetInfo(Structure):
- SIZE = 32
- structure = (
- ('StructureSize','<H=33'),
- ('InfoType','<B=0'),
- ('FileInfoClass','<B=0'),
- ('BufferLength','<L=0'),
- ('BufferOffset','<H=(self.SIZE + 64 + len(self["AlignPad"]))'),
- ('Reserved','<H=0'),
- ('AdditionalInformation','<L=0'),
- ('FileID',':',SMB2_FILEID),
- ('_AlignPad','_-AlignPad','self["BufferOffset"] - (64 + self["StructureSize"] - 1)'),
- ('AlignPad',':=""'),
- ('_Buffer','_-Buffer','self["BufferLength"]'),
- ('Buffer',':'),
- )
- def __init__(self, data = None):
- Structure.__init__(self,data)
- if data is None:
- self['AlignPad'] = ''
- class SMB2SetInfo_Response(Structure):
- structure = (
- ('StructureSize','<H=2'),
- )
- class FILE_RENAME_INFORMATION_TYPE_2(Structure):
- structure = (
- ('ReplaceIfExists','<B=0'),
- ('Reserved','7s=""'),
- ('RootDirectory','<Q=0'),
- ('FileNameLength','<L=0'),
- ('_FileName','_-FileName','self["FileNameLength"]'),
- ('FileName',':'),
- )
- class SMB2_TRANSFORM_HEADER(Structure):
- structure = (
- ('ProtocolID','"\xfdSMB'),
- ('Signature','16s=""'),
- ('Nonce','16s=""'),
- ('OriginalMessageSize','<L=0'),
- ('Reserved','<H=0'),
- ('EncryptionAlgorithm','<H=0'),
- ('SessionID','<Q=0'),
- )
- # SMB2_FILE_INTERNAL_INFO
- class FileInternalInformation(Structure):
- structure = (
- ('IndexNumber','<q=0'),
- )
|