Files correlati : utilma verione di curl git-svn-id: svn://10.65.10.50/branches/R_10_00@24159 c028cbd2-c16b-5b4b-a496-9718f37d4682
		
			
				
	
	
		
			1364 lines
		
	
	
		
			40 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			1364 lines
		
	
	
		
			40 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
# 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'),
 | 
						|
    )
 |