Class: RubySMB::SMB1::Packet::Trans2::FindNext2Response

Inherits:
GenericPacket
  • Object
show all
Defined in:
lib/ruby_smb/smb1/packet/trans2/find_next2_response.rb

Overview

This class represents an SMB1 Trans2 FIND_NEXT2 Response Packet as defined in 2.2.6.3.2 Response

Defined Under Namespace

Classes: ParameterBlock

Constant Summary collapse

COMMAND =
RubySMB::SMB1::Commands::SMB_COM_TRANSACTION2

Instance Method Summary collapse

Methods inherited from GenericPacket

describe, #display, fields_hashed, format_field, from_hex, #packet_smb_version, read, #status_code, #valid?, walk_fields

Instance Method Details

#initialize_instanceObject



52
53
54
55
56
# File 'lib/ruby_smb/smb1/packet/trans2/find_next2_response.rb', line 52

def initialize_instance
  super
  parameter_block.setup << RubySMB::SMB1::Packet::Trans2::Subcommands::FIND_NEXT2
  smb_header.flags.reply = 1
end

#results(klass, unicode:) ⇒ array<BinData::Record>

Returns the File Information in an array of appropriate structs for the given FileInformationClass. Pulled out of the string buffer.

Parameters:

  • klass (Class)

    the FileInformationClass class to read the data as

Returns:

  • (array<BinData::Record>)

    An array of structs holding the requested information

Raises:



65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
# File 'lib/ruby_smb/smb1/packet/trans2/find_next2_response.rb', line 65

def results(klass, unicode:)
  information_classes = []
  blob = data_block.trans2_data.buffer.to_binary_s.dup
  until blob.empty?
    length = blob[0, 4].unpack('V').first

    data = if length.zero?
             blob.slice!(0, blob.length)
           else
             blob.slice!(0, length)
           end

    file_info = klass.new
    file_info.unicode = unicode
    begin
      information_classes << file_info.read(data)
    rescue IOError
      raise RubySMB::Error::InvalidPacket, "Invalid #{klass} File Information packet in the string buffer"
    end
  end
  information_classes
end