Class: RubySMB::Field::FileTime

Inherits:
BinData::Primitive
  • Object
show all
Defined in:
lib/ruby_smb/field/file_time.rb

Overview

Represents a Windows FILETIME structure as defined in 2.3.3 FILETIME.aspx)

Direct Known Subclasses

Dcerpc::Ndr::NdrFileTime

Constant Summary collapse

EPOCH_DIFF_100NS =

Difference between the Windows and Unix epochs, in 100ns intervals

116_444_736_000_000_000
NS_MULTIPLIER =
10_000_000

Instance Method Summary collapse

Instance Method Details

#getBinData::Bit64

Gets the value of the field

Returns:

  • (BinData::Bit64)

    the 64-bit value of the field



17
18
19
# File 'lib/ruby_smb/field/file_time.rb', line 17

def get
  val
end

#set(value) ⇒ Object

Sets the value of the field from a DateTime,Time,Integer, or object that can be converted to an integer. Datetime and Time objects get converted to account for the Windows/Unix Epoch difference. Any other parameter passed in will be assumed to already be correct.

Parameters:

  • value (DateTime, Time, Integer, #to_i)

    the value to set

Returns:



28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/ruby_smb/field/file_time.rb', line 28

def set(value)
  case value
  when DateTime
    set(value.to_time)
  when Time
    time_int = value.to_i
    time_int *= NS_MULTIPLIER
    adjusted_epoch = time_int + EPOCH_DIFF_100NS
    set(adjusted_epoch)
  when Integer
    self.val = value
  else
    self.val = value.to_i
  end
  val
end

#to_datetimeDateTime

Returns the value of the field as a DateTime

Returns:

  • (DateTime)

    the DateTime representation of the current value



48
49
50
51
# File 'lib/ruby_smb/field/file_time.rb', line 48

def to_datetime
  time = to_time
  time.to_datetime
end

#to_timeTime

Returns the value of the field as a Time

Returns:

  • (Time)

    the Time representation of the current value



56
57
58
59
60
61
# File 'lib/ruby_smb/field/file_time.rb', line 56

def to_time
  windows_int = val
  adjusted_epoch = windows_int - EPOCH_DIFF_100NS
  unix_int = adjusted_epoch / NS_MULTIPLIER
  Time.at unix_int
end