Module: Puppet::Util::Windows::Registry

Extended by:
FFI::Library
Included in:
Provider::Package::Windows::Package, Provider::Package::Windows::Package
Defined in:
lib/puppet/util/windows.rb,
lib/puppet/util/windows/registry.rb

Constant Summary collapse

KEY64 =
0x100
KEY32 =
0x200
KEY_READ =
0x20019
KEY_WRITE =
0x20006
KEY_ALL_ACCESS =
0x2003f
ERROR_NO_MORE_ITEMS =
259

Instance Method Summary collapse

Methods included from FFI::Library

attach_function_private

Instance Method Details

#delete_key(key, subkey_name, mode = KEY64) ⇒ Object


59
60
61
# File 'lib/puppet/util/windows/registry.rb', line 59

def delete_key(key, subkey_name, mode = KEY64)
  reg_delete_key_ex(key, subkey_name, mode)
end

#delete_value(key, subkey_name) ⇒ Object


107
108
109
# File 'lib/puppet/util/windows/registry.rb', line 107

def delete_value(key, subkey_name)
  reg_delete_value(key, subkey_name)
end

#each_key(key, &block) ⇒ Object

subkey is String which contains name of subkey. wtime is last write time as FILETIME (64-bit integer). (see Registry.wtime2time)


43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# File 'lib/puppet/util/windows/registry.rb', line 43

def each_key(key, &block)
  index = 0
  subkey = nil

  subkey_max_len, _ = reg_query_info_key_max_lengths(key)

  loop do
    subkey, filetime = reg_enum_key(key, index, subkey_max_len)
    yield subkey, filetime if !subkey.nil?
    index += 1
    break if subkey.nil?
  end

  index
end

#each_value(key, &block) ⇒ Object


91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
# File 'lib/puppet/util/windows/registry.rb', line 91

def each_value(key, &block)
  index = 0
  subkey = nil

  _, value_max_len = reg_query_info_key_max_lengths(key)

  loop do
    subkey, type, data = reg_enum_value(key, index, value_max_len)
    yield subkey, type, data if !subkey.nil?
    index += 1
    break if subkey.nil?
  end

  index
end

#keys(key) ⇒ Object


35
36
37
38
39
# File 'lib/puppet/util/windows/registry.rb', line 35

def keys(key)
  keys = {}
  each_key(key) { |subkey, filetime| keys[subkey] = filetime }
  keys
end

#open(name, path, mode = KEY_READ | KEY64, &block) ⇒ Object


24
25
26
27
28
29
30
31
32
33
# File 'lib/puppet/util/windows/registry.rb', line 24

def open(name, path, mode = KEY_READ | KEY64, &block)
  hkey = root(name)
  begin
    hkey.open(path, mode) do |subkey|
      return yield subkey
    end
  rescue Win32::Registry::Error => error
    raise Puppet::Util::Windows::Error.new(_("Failed to open registry key '%{key}\\%{path}'") % { key: hkey.keyname, path: path }, error.code, error)
  end
end

#root(name) ⇒ Object


18
19
20
21
22
# File 'lib/puppet/util/windows/registry.rb', line 18

def root(name)
  Win32::Registry.const_get(name)
rescue NameError
  raise Puppet::Error, _("Invalid registry key '%{name}'") % { name: name }, $!.backtrace
end

#values(key) ⇒ Object


63
64
65
66
67
# File 'lib/puppet/util/windows/registry.rb', line 63

def values(key)
  vals = {}
  each_value(key) { |subkey, type, data| vals[subkey] = data }
  vals
end

#values_by_name(key, names) ⇒ Hashtable<String, Object>

Retrieve a set of values from a registry key given their names Value names listed but not found in the registry will not be added to the resultant Hashtable


76
77
78
79
80
81
82
83
84
85
86
87
88
89
# File 'lib/puppet/util/windows/registry.rb', line 76

def values_by_name(key, names)
  vals = {}
  names.each do |name|
    FFI::Pointer.from_string_to_wide_string(name) do |subkeyname_ptr|
      begin
        _, vals[name] = read(key, subkeyname_ptr)
      rescue Puppet::Util::Windows::Error => e
        # ignore missing names, but raise other errors
        raise e unless e.code == Puppet::Util::Windows::Error::ERROR_FILE_NOT_FOUND
      end
    end
  end
  vals
end