class Mixlibrary::Core::Utilities::WindowsArchitectureHelper

Public Class Methods

architecture() click to toggle source

returns the architecture based on if the machine is 64 bit

# File lib/mixlibrary/core/utilities/windows_architecture_helper.rb, line 27
def self.architecture
  if(is_machine_64bit?)
    return :x86_64
  else
    return :i386
  end
end
disable_wow64_file_redirection() click to toggle source

Disables syswow redirection

# File lib/mixlibrary/core/utilities/windows_architecture_helper.rb, line 48
def self.disable_wow64_file_redirection()
  original_redirection_state = ['0'].pack('P')

  win32_wow_64_disable_wow_64_fs_redirection =
    ::Win32::API.new('Wow64DisableWow64FsRedirection', 'P', 'L', 'kernel32')

  succeeded = win32_wow_64_disable_wow_64_fs_redirection.call(original_redirection_state)

  if succeeded == 0
    raise  "Failed to disable Wow64 file redirection"
  end

  return original_redirection_state
end
is_machine_64bit?() click to toggle source

Attempts to determine if this machine is 64 bit or not in a variety of ways - using generic ruby and/or Windows specific environment variabes

# File lib/mixlibrary/core/utilities/windows_architecture_helper.rb, line 10
def self.is_machine_64bit?
  if(RubyInfo.architecture==:x86_64)
    return true
  end

  if(ENV.has_key?('ProgramFiles(x86)'))
    return true;
  end

  if(ENV.has_key?('PROCESSOR_ARCHITEW6432'))
    return true;
  end        
  
  return false;
end
restore_wow64_file_redirection(original_redirection_state ) click to toggle source

Restore syswow redirection

# File lib/mixlibrary/core/utilities/windows_architecture_helper.rb, line 64
def self.restore_wow64_file_redirection(original_redirection_state )

  win32_wow_64_revert_wow_64_fs_redirection =
    ::Win32::API.new('Wow64RevertWow64FsRedirection', 'P', 'L', 'kernel32')

  succeeded = win32_wow_64_revert_wow_64_fs_redirection.call(original_redirection_state)

  if succeeded == 0
    raise  "Failed to revert Wow64 file redirection"
  end
end
wow64_architecture_override_required?(desired_architecture) click to toggle source

Determines if the syswow redirection needs to be disabled based on the desired architecture.

# File lib/mixlibrary/core/utilities/windows_architecture_helper.rb, line 36
def self.wow64_architecture_override_required?(desired_architecture)
  #only use case we need to disable redirection is if
  #running as 32 bit
  #want 64 bit
  #On 64bit machine
  RubyInfo.architecture==:i386 &&
    desired_architecture == :x86_64  &&
    is_machine_64bit?
  
end