Module: Chef::Mixin::WindowsArchitectureHelper

Included in:
Provider::WindowsScript, Resource::WindowsScript
Defined in:
lib/chef/mixin/windows_architecture_helper.rb

Instance Method Summary collapse

Instance Method Details

#assert_valid_windows_architecture!(architecture) ⇒ Object



47
48
49
50
51
52
# File 'lib/chef/mixin/windows_architecture_helper.rb', line 47

def assert_valid_windows_architecture!(architecture)
  if ! valid_windows_architecture?(architecture)
    raise Chef::Exceptions::Win32ArchitectureIncorrect,
    "The specified architecture was not valid. It must be one of :i386 or :x86_64"
  end
end

#disable_wow64_file_redirection(node) ⇒ Object



58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
# File 'lib/chef/mixin/windows_architecture_helper.rb', line 58

def disable_wow64_file_redirection( node )
  original_redirection_state = ['0'].pack('P')

  if ( ( node_windows_architecture(node) == :x86_64) && ::Chef::Platform.windows?)
    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 Win32APIError "Failed to disable Wow64 file redirection"
    end

  end

  original_redirection_state
end

#is_i386_windows_process?Boolean

Returns:

  • (Boolean)


54
55
56
# File 'lib/chef/mixin/windows_architecture_helper.rb', line 54

def is_i386_windows_process?
  Chef::Platform.windows? && 'X86'.casecmp(ENV['PROCESSOR_ARCHITECTURE']) == 0
end

#node_supports_windows_architecture?(node, desired_architecture) ⇒ Boolean

Returns:

  • (Boolean)


37
38
39
40
41
# File 'lib/chef/mixin/windows_architecture_helper.rb', line 37

def node_supports_windows_architecture?(node, desired_architecture)
  assert_valid_windows_architecture!(desired_architecture)
  return (node_windows_architecture(node) == :x86_64 ||
          desired_architecture == :i386) ? true : false
end

#node_windows_architecture(node) ⇒ Object



27
28
29
# File 'lib/chef/mixin/windows_architecture_helper.rb', line 27

def node_windows_architecture(node)
  node[:kernel][:machine].to_sym
end

#restore_wow64_file_redirection(node, original_redirection_state) ⇒ Object



76
77
78
79
80
81
82
83
84
85
86
87
# File 'lib/chef/mixin/windows_architecture_helper.rb', line 76

def restore_wow64_file_redirection( node, original_redirection_state )
  if ( (node_windows_architecture(node) == :x86_64) && ::Chef::Platform.windows?)
    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 Win32APIError "Failed to revert Wow64 file redirection"
    end
  end
end

#valid_windows_architecture?(architecture) ⇒ Boolean

Returns:

  • (Boolean)


43
44
45
# File 'lib/chef/mixin/windows_architecture_helper.rb', line 43

def valid_windows_architecture?(architecture)
  return (architecture == :x86_64) || (architecture == :i386)
end

#wow64_architecture_override_required?(node, desired_architecture) ⇒ Boolean

Returns:

  • (Boolean)


31
32
33
34
35
# File 'lib/chef/mixin/windows_architecture_helper.rb', line 31

def wow64_architecture_override_required?(node, desired_architecture)
  is_i386_windows_process? &&
    node_windows_architecture(node) == :x86_64 &&
    desired_architecture == :x86_64
end