MCPcopy Create free account
hub / github.com/PierreGode/Ragnar / ComTransactionRequest

Class ComTransactionRequest

pager_lib/smb/smb_structs.py:682–765  ·  view source on GitHub ↗

References: =========== - [MS-CIFS]: 2.2.4.33.1

Source from the content-addressed store, hash-verified

680
681
682class ComTransactionRequest(Payload):
683 """
684 References:
685 ===========
686 - [MS-CIFS]: 2.2.4.33.1
687 """
688
689 PAYLOAD_STRUCT_FORMAT = '<HHHHBBHIHHHHHH'
690 PAYLOAD_STRUCT_SIZE = struct.calcsize(PAYLOAD_STRUCT_FORMAT)
691
692 def __init__(self, max_params_count, max_data_count, max_setup_count,
693 total_params_count = 0, total_data_count = 0,
694 params_bytes = b'', data_bytes = b'', setup_bytes = b'',
695 flags = 0, timeout = 0, name = "\\PIPE\\"):
696 self.total_params_count = total_params_count or len(params_bytes)
697 self.total_data_count = total_data_count or len(data_bytes)
698 self.max_params_count = max_params_count
699 self.max_data_count = max_data_count
700 self.max_setup_count = max_setup_count
701 self.flags = flags
702 self.timeout = timeout
703 self.params_bytes = params_bytes
704 self.data_bytes = data_bytes
705 self.setup_bytes = setup_bytes
706 self.name = name
707
708 def initMessage(self, message):
709 Payload.initMessage(self, message)
710 message.command = SMB_COM_TRANSACTION
711
712 def prepare(self, message):
713 name = (self.name + '\0').encode('UTF-16LE')
714 name_len = len(name)
715 setup_bytes_len = len(self.setup_bytes)
716 params_bytes_len = len(self.params_bytes)
717 data_bytes_len = len(self.data_bytes)
718
719 padding0 = b''
720 offset = message.HEADER_STRUCT_SIZE + self.PAYLOAD_STRUCT_SIZE + setup_bytes_len + 2 # constant 2 is for the ByteCount field in the SMB header (i.e. field which indicates number of data bytes after the SMB parameters)
721 if offset % 2 != 0:
722 padding0 = b'\0'
723 offset += 1
724
725 offset += name_len # For the name field
726 padding1 = b''
727 if offset % 4 != 0:
728 padding1 = b'\0'*(4-offset%4)
729 offset += (4-offset%4)
730
731 if params_bytes_len > 0:
732 params_bytes_offset = offset
733 offset += params_bytes_len
734 else:
735 params_bytes_offset = 0
736
737 padding2 = b''
738 if offset % 4 != 0:
739 padding2 = b'\0'*(4-offset%4)

Callers 2

connectSrvSvcCBMethod · 0.85
rpcBindCBMethod · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected