class FFI::VixDiskLib::DiskInfo

Attributes

info[R]

Public Class Methods

new(disk_handle) click to toggle source

Initialize a hash with the disk info for the specified handle using the VixDiskLib_GetInfo method. This is a helper class for the VixDiskLib::Api::get_info method.

# File lib/ffi-vix_disk_lib/disk_info.rb, line 17
def initialize(disk_handle)
  ruby_info = {}
  info = FFI::MemoryPointer.new :pointer
  vix_error = API.get_info(disk_handle, info)
  ApiWrapper.check_error(vix_error, __method__)
  real_info = info.get_pointer(0)

  ruby_info[:biosGeo]             = {}
  ruby_info[:physGeo]             = {}
  bios_offset                     = API::Info.offset_of(:biosGeo)
  phys_offset                     = API::Info.offset_of(:biosGeo)
  ruby_info[:biosGeo][:cylinders] = geometry_attribute(real_info, bios_offset, :cylinders)
  ruby_info[:biosGeo][:heads]     = geometry_attribute(real_info, bios_offset, :heads)
  ruby_info[:biosGeo][:sectors]   = geometry_attribute(real_info, bios_offset, :sectors)
  ruby_info[:physGeo][:cylinders] = geometry_attribute(real_info, phys_offset, :cylinders)
  ruby_info[:physGeo][:heads]     = geometry_attribute(real_info, phys_offset, :heads)
  ruby_info[:physGeo][:sectors]   = geometry_attribute(real_info, phys_offset, :sectors)
  ruby_info[:capacity]            = real_info.get_uint64(API::Info.offset_of(:capacity))
  ruby_info[:adapterType]         = real_info.get_int(API::Info.offset_of(:adapterType))
  ruby_info[:numLinks]            = real_info.get_int(API::Info.offset_of(:numLinks))

  parent_info = real_info + API::Info.offset_of(:parentFileNameHint)
  parent_info_str = parent_info.read_pointer
  ruby_info[:parentFileNameHint]  = parent_info_str.read_string unless parent_info_str.null?
  uuid_info_str = (real_info + API::Info.offset_of(:uuid)).read_pointer
  ruby_info[:uuid]                = uuid_info_str.read_string unless uuid_info_str.null?
  @info = ruby_info
end

Public Instance Methods

geometry_attribute(info, offset_value, attribute) click to toggle source
# File lib/ffi-vix_disk_lib/disk_info.rb, line 8
def geometry_attribute(info, offset_value, attribute)
  info.get_uint32(offset_value + API::Geometry.offset_of(attribute))
end