diff options
Diffstat (limited to 'tests/python_dependencies/impacket/smb3structs.py')
-rw-r--r-- | tests/python_dependencies/impacket/smb3structs.py | 1363 |
1 files changed, 1363 insertions, 0 deletions
diff --git a/tests/python_dependencies/impacket/smb3structs.py b/tests/python_dependencies/impacket/smb3structs.py new file mode 100644 index 000000000..ddc8a9084 --- /dev/null +++ b/tests/python_dependencies/impacket/smb3structs.py @@ -0,0 +1,1363 @@ +# 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'), + ) |