diff options
author | Claire McQuin <claire@chef.io> | 2015-08-28 15:40:22 -0700 |
---|---|---|
committer | Claire McQuin <claire@getchef.com> | 2015-09-01 13:44:56 -0700 |
commit | 9121bd4bc2a3ac892f908a40b8453e2302552e38 (patch) | |
tree | 1e90b2d326ca3ded5b735c65ff3387c020bc261e | |
parent | 3770ec1025fd09d3a3bb393ad955ee2985252a67 (diff) | |
download | chef-9121bd4bc2a3ac892f908a40b8453e2302552e38.tar.gz |
Use FFI to delete registry values.
Conflicts:
lib/chef/win32/api/registry.rb
lib/chef/win32/registry.rb
-rw-r--r-- | lib/chef/win32/api/registry.rb | 8 | ||||
-rw-r--r-- | lib/chef/win32/registry.rb | 13 |
2 files changed, 18 insertions, 3 deletions
diff --git a/lib/chef/win32/api/registry.rb b/lib/chef/win32/api/registry.rb index 45b91d7d32..ded4a3630a 100644 --- a/lib/chef/win32/api/registry.rb +++ b/lib/chef/win32/api/registry.rb @@ -39,7 +39,13 @@ class Chef safe_attach_function :RegDeleteKeyExW, [ :HKEY, :LPCTSTR, :LONG, :DWORD ], :LONG safe_attach_function :RegDeleteKeyExA, [ :HKEY, :LPCTSTR, :LONG, :DWORD ], :LONG + # LONG WINAPI RegDeleteValue( + # _In_ HKEY hKey, + # _In_opt_ LPCTSTR lpValueName + # ); + safe_attach_function :RegDeleteValueW, [ :HKEY, :LPCTSTR ], :LONG + end end end -end
\ No newline at end of file +end diff --git a/lib/chef/win32/registry.rb b/lib/chef/win32/registry.rb index 2bb7b78965..830fd300a0 100644 --- a/lib/chef/win32/registry.rb +++ b/lib/chef/win32/registry.rb @@ -16,9 +16,9 @@ # See the License for the specific language governing permissions and # limitations under the License. # +require 'chef/mixin/wstring' require 'chef/reserved_names' require 'chef/win32/api' -require 'chef/mixin/wstring' if RUBY_PLATFORM =~ /mswin|mingw32|windows/ require 'chef/win32/api/registry' @@ -91,7 +91,7 @@ class Chef return true end hive.open(key, ::Win32::Registry::KEY_SET_VALUE | registry_system_architecture) do |reg| - reg.delete_value(value[:name]) + reg_delete_value(reg, value[:name]) Chef::Log.debug("Deleted value #{value[:name]} from registry key #{key_path}") end else @@ -394,6 +394,15 @@ class Chef key = reg_path.join("\\") end + # ::Win32::Registry#delete_value is broken in Ruby 2.1 + # (up to Ruby 2.1.6p336). This should be resolved a + # later release (see note #9 in link below). + # https://bugs.ruby-lang.org/issues/10820 + def reg_delete_value(reg, value) + unless RegDeleteValueW(reg.hkey, wstring(value)) + Chef::ReservedNames::Win32::Error.raise! + end + end end end end |