lib/win32/registry.rb in win32-registry-0.0.1 vs lib/win32/registry.rb in win32-registry-0.1.0
- old
+ new
@@ -176,11 +176,11 @@
def initialize(code)
@code = code
buff = WCHAR_NUL * 1024
lang = 0
begin
- len = FormatMessageW.call(0x1200, 0, code, lang, buff, 1024, 0)
+ len = FormatMessageW.call(0x1200, nil, code, lang, buff, 1024, nil)
msg = buff.byteslice(0, len * WCHAR_SIZE)
msg.delete!(WCHAR_CR)
msg.chomp!
msg.encode!(LOCALE)
rescue EncodingError
@@ -196,11 +196,11 @@
#
# Predefined Keys
#
class PredefinedKey < Registry
def initialize(hkey, keyname)
- @hkey = hkey
+ @hkey = Fiddle::Pointer.new(hkey)
@parent = nil
@keyname = keyname
@disposition = REG_OPENED_EXISTING_KEY
end
@@ -236,11 +236,11 @@
"long RegSetValueExW(void *, void *, long, long, void *, long)",
"long RegDeleteValueW(void *, void *)",
"long RegDeleteKeyW(void *, void *)",
"long RegFlushKey(void *)",
"long RegCloseKey(void *)",
- "long RegQueryInfoKey(void *, void *, void *, void *, void *, void *, void *, void *, void *, void *, void *, void *)",
+ "long RegQueryInfoKeyW(void *, void *, void *, void *, void *, void *, void *, void *, void *, void *, void *, void *)",
].each do |fn|
cfunc = extern fn, :stdcall
const_set cfunc.name.intern, cfunc
end
@@ -283,11 +283,11 @@
def unpackqw(qw)
(qw + [0].pack(TEMPLATE_QWORD)).unpack1(TEMPLATE_QWORD)
end
def make_wstr(str)
- str.encode(WCHAR)
+ (str+"\0").encode(WCHAR)
end
def OpenKey(hkey, name, opt, desired)
result = packhandle(0)
check RegOpenKeyExW.call(hkey, make_wstr(name), opt, desired, result)
@@ -296,36 +296,36 @@
def CreateKey(hkey, name, opt, desired)
result = packhandle(0)
disp = packdw(0)
check RegCreateKeyExW.call(hkey, make_wstr(name), 0, 0, opt, desired,
- 0, result, disp)
+ nil, result, disp)
[ unpackhandle(result), unpackdw(disp) ]
end
def EnumValue(hkey, index)
name = WCHAR_NUL * Constants::MAX_KEY_LENGTH
size = packdw(Constants::MAX_KEY_LENGTH)
- check RegEnumValueW.call(hkey, index, name, size, 0, 0, 0, 0)
+ check RegEnumValueW.call(hkey, index, name, size, nil, nil, nil, nil)
name.byteslice(0, unpackdw(size) * WCHAR_SIZE)
end
def EnumKey(hkey, index)
name = WCHAR_NUL * Constants::MAX_KEY_LENGTH
size = packdw(Constants::MAX_KEY_LENGTH)
wtime = ' ' * 8
- check RegEnumKeyExW.call(hkey, index, name, size, 0, 0, 0, wtime)
+ check RegEnumKeyExW.call(hkey, index, name, size, nil, nil, nil, wtime)
[ name.byteslice(0, unpackdw(size) * WCHAR_SIZE), unpackqw(wtime) ]
end
def QueryValue(hkey, name)
type = packdw(0)
size = packdw(0)
name = make_wstr(name)
- check RegQueryValueExW.call(hkey, name, 0, type, 0, size)
+ check RegQueryValueExW.call(hkey, name, nil, type, nil, size)
data = "\0".b * unpackdw(size)
- check RegQueryValueExW.call(hkey, name, 0, type, data, size)
+ check RegQueryValueExW.call(hkey, name, nil, type, data, size)
[ unpackdw(type), data[0, unpackdw(size)] ]
end
def SetValue(hkey, name, type, data, size)
case type
@@ -358,11 +358,11 @@
values = packdw(0)
maxvaluenamelen = packdw(0)
maxvaluelen = packdw(0)
secdescs = packdw(0)
wtime = ' ' * 8
- check RegQueryInfoKey.call(hkey, 0, 0, 0, subkeys, maxsubkeylen, 0,
+ check RegQueryInfoKeyW.call(hkey, 0, 0, 0, subkeys, maxsubkeylen, 0,
values, maxvaluenamelen, maxvaluelen, secdescs, wtime)
[ unpackdw(subkeys), unpackdw(maxsubkeylen), unpackdw(values),
unpackdw(maxvaluenamelen), unpackdw(maxvaluelen),
unpackdw(secdescs), unpackqw(wtime) ]
end
@@ -428,11 +428,11 @@
# desired and opt is access mask and key option.
# For detail, see the MSDN[http://msdn.microsoft.com/library/en-us/sysinfo/base/regopenkeyex.asp].
# If block is given, the key is closed automatically.
def self.open(hkey, subkey, desired = KEY_READ, opt = REG_OPTION_RESERVED)
subkey = subkey.chomp('\\')
- newkey = API.OpenKey(hkey.hkey, subkey, opt, desired)
+ newkey = API.OpenKey(hkey.instance_variable_get(:@hkey), subkey, opt, desired)
obj = new(newkey, hkey, subkey, REG_OPENED_EXISTING_KEY)
if block_given?
begin
yield obj
ensure
@@ -455,11 +455,11 @@
# method will return false.
#
# If block is given, the key is closed automatically.
#
def self.create(hkey, subkey, desired = KEY_ALL_ACCESS, opt = REG_OPTION_RESERVED)
- newkey, disp = API.CreateKey(hkey.hkey, subkey, opt, desired)
+ newkey, disp = API.CreateKey(hkey.instance_variable_get(:@hkey), subkey, opt, desired)
obj = new(newkey, hkey, subkey, disp)
if block_given?
begin
yield obj
ensure
@@ -477,26 +477,29 @@
#
# initialize
#
def initialize(hkey, parent, keyname, disposition)
- @hkey = hkey
+ @hkey = Fiddle::Pointer.new(hkey)
@parent = parent
@keyname = keyname
@disposition = disposition
@hkeyfinal = [ hkey ]
ObjectSpace.define_finalizer self, @@final.call(@hkeyfinal)
end
- # Returns key handle value.
- attr_reader :hkey
# Win32::Registry object of parent key, or nil if predefeined key.
attr_reader :parent
# Same as subkey value of Registry.open or
# Registry.create method.
attr_reader :keyname
# Disposition value (REG_CREATED_NEW_KEY or REG_OPENED_EXISTING_KEY).
attr_reader :disposition
+
+ # Returns key handle value.
+ def hkey
+ @hkey.to_i
+ end
#
# Returns if key is created ((*newly*)).
# (see Registry.create) -- basically you call create
# then when you call created? on the instance returned