123456789_123456789_123456789_123456789_123456789_

Module: Win32::Registry::API

Relationships & Source Files
Super Chains via Extension / Inclusion / Inheritance
Class Chain:
self, Fiddle::Importer
Instance Chain:
self, Constants
Defined in: ext/win32/lib/win32/registry.rb

Overview

::Win32 APIs

Constant Summary

Constants - Included

HKEY_CLASSES_ROOT, HKEY_CURRENT_CONFIG, HKEY_CURRENT_USER, HKEY_DYN_DATA, HKEY_LOCAL_MACHINE, HKEY_PERFORMANCE_DATA, HKEY_PERFORMANCE_NLSTEXT, HKEY_PERFORMANCE_TEXT, HKEY_USERS, KEY_ALL_ACCESS, KEY_CREATE_LINK, KEY_CREATE_SUB_KEY, KEY_ENUMERATE_SUB_KEYS, KEY_EXECUTE, KEY_NOTIFY, KEY_QUERY_VALUE, KEY_READ, KEY_SET_VALUE, KEY_WRITE, MAX_KEY_LENGTH, MAX_VALUE_LENGTH, REG_BINARY, REG_CREATED_NEW_KEY, REG_DWORD, REG_DWORD_BIG_ENDIAN, REG_DWORD_LITTLE_ENDIAN, REG_EXPAND_SZ, REG_FORCE_RESTORE, REG_FULL_RESOURCE_DESCRIPTOR, REG_LEGAL_OPTION, REG_LINK, REG_MULTI_SZ, REG_NONE, REG_NO_LAZY_FLUSH, REG_OPENED_EXISTING_KEY, REG_OPTION_BACKUP_RESTORE, REG_OPTION_CREATE_LINK, REG_OPTION_NON_VOLATILE, REG_OPTION_OPEN_LINK, REG_OPTION_RESERVED, REG_OPTION_VOLATILE, REG_QWORD, REG_QWORD_LITTLE_ENDIAN, REG_REFRESH_HIVE, REG_RESOURCE_LIST, REG_RESOURCE_REQUIREMENTS_LIST, REG_SZ, REG_WHOLE_HIVE_VOLATILE, STANDARD_RIGHTS_READ, STANDARD_RIGHTS_WRITE

Class Attribute Summary

Class Method Summary

Class Attribute Details

.win64?Boolean (readonly, mod_func)

[ GitHub ]

  
# File 'ext/win32/lib/win32/registry.rb', line 253

def win64?
  /^(?:x64|x86_64)/ =~ RUBY_PLATFORM
end

Class Method Details

.check(result) (mod_func)

Raises:

[ GitHub ]

  
# File 'ext/win32/lib/win32/registry.rb', line 249

def check(result)
  raise Error, result, caller(1) if result != 0
end

CloseKey(hkey) (mod_func)

[ GitHub ]

  
# File 'ext/win32/lib/win32/registry.rb', line 347

def CloseKey(hkey)
  check RegCloseKey.call(hkey)
end

CreateKey(hkey, name, opt, desired) (mod_func)

[ GitHub ]

  
# File 'ext/win32/lib/win32/registry.rb', line 293

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)
  [ unpackhandle(result), unpackdw(disp) ]
end

DeleteKey(hkey, name) (mod_func)

[ GitHub ]

  
# File 'ext/win32/lib/win32/registry.rb', line 339

def DeleteKey(hkey, name)
  check RegDeleteKeyW.call(hkey, make_wstr(name))
end

DeleteValue(hkey, name) (mod_func)

[ GitHub ]

  
# File 'ext/win32/lib/win32/registry.rb', line 335

def DeleteValue(hkey, name)
  check RegDeleteValueW.call(hkey, make_wstr(name))
end

EnumKey(hkey, index) (mod_func)

[ GitHub ]

  
# File 'ext/win32/lib/win32/registry.rb', line 308

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)
  [ name.byteslice(0, unpackdw(size) * WCHAR_SIZE), unpackqw(wtime) ]
end

EnumValue(hkey, index) (mod_func)

[ GitHub ]

  
# File 'ext/win32/lib/win32/registry.rb', line 301

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)
  name.byteslice(0, unpackdw(size) * WCHAR_SIZE)
end

FlushKey(hkey) (mod_func)

[ GitHub ]

  
# File 'ext/win32/lib/win32/registry.rb', line 343

def FlushKey(hkey)
  check RegFlushKey.call(hkey)
end

.make_wstr(str) (mod_func)

[ GitHub ]

  
# File 'ext/win32/lib/win32/registry.rb', line 283

def make_wstr(str)
  str.encode(WCHAR)
end

OpenKey(hkey, name, opt, desired) (mod_func)

[ GitHub ]

  
# File 'ext/win32/lib/win32/registry.rb', line 287

def OpenKey(hkey, name, opt, desired)
  result = packhandle(0)
  check RegOpenKeyExW.call(hkey, make_wstr(name), opt, desired, result)
  unpackhandle(result)
end

.packdw(dw) (mod_func)

[ GitHub ]

  
# File 'ext/win32/lib/win32/registry.rb', line 265

def packdw(dw)
  [dw].pack('V')
end

.packhandle(h) (mod_func)

[ GitHub ]

  
# File 'ext/win32/lib/win32/registry.rb', line 257

def packhandle(h)
  win64? ? packqw(h) : packdw(h)
end

.packqw(qw) (mod_func)

[ GitHub ]

  
# File 'ext/win32/lib/win32/registry.rb', line 274

def packqw(qw)
  [ qw & 0xFFFFFFFF, qw >> 32 ].pack('VV')
end

QueryInfoKey(hkey) (mod_func)

[ GitHub ]

  
# File 'ext/win32/lib/win32/registry.rb', line 351

def QueryInfoKey(hkey)
  subkeys = packdw(0)
  maxsubkeylen = packdw(0)
  values = packdw(0)
  maxvaluenamelen = packdw(0)
  maxvaluelen = packdw(0)
  secdescs = packdw(0)
  wtime = ' ' * 8
  check RegQueryInfoKey.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

QueryValue(hkey, name) (mod_func)

[ GitHub ]

  
# File 'ext/win32/lib/win32/registry.rb', line 316

def QueryValue(hkey, name)
  type = packdw(0)
  size = packdw(0)
  name = make_wstr(name)
  check RegQueryValueExW.call(hkey, name, 0, type, 0, size)
  data = "\0".force_encoding('ASCII-8BIT') * unpackdw(size)
  check RegQueryValueExW.call(hkey, name, 0, type, data, size)
  [ unpackdw(type), data[0, unpackdw(size)] ]
end

SetValue(hkey, name, type, data, size) (mod_func)

[ GitHub ]

  
# File 'ext/win32/lib/win32/registry.rb', line 326

def SetValue(hkey, name, type, data, size)
  case type
  when REG_SZ, REG_EXPAND_SZ, REG_MULTI_SZ
    data = data.encode(WCHAR)
    size ||= data.bytesize + WCHAR_SIZE
  end
  check RegSetValueExW.call(hkey, make_wstr(name), 0, type, data, size)
end

.unpackdw(dw) (mod_func)

[ GitHub ]

  
# File 'ext/win32/lib/win32/registry.rb', line 269

def unpackdw(dw)
  dw += [0].pack('V')
  dw.unpack('V')[0]
end

.unpackhandle(h) (mod_func)

[ GitHub ]

  
# File 'ext/win32/lib/win32/registry.rb', line 261

def unpackhandle(h)
  win64? ? unpackqw(h) : unpackdw(h)
end

.unpackqw(qw) (mod_func)

[ GitHub ]

  
# File 'ext/win32/lib/win32/registry.rb', line 278

def unpackqw(qw)
  qw = qw.unpack('VV')
  (qw[1] << 32) | qw[0]
end