# module Win32::Registry::API

`Win32` APIs

### Public Instance Methods

CloseKey(hkey) click to toggle source

    # File ext/win32/lib/win32/registry.rb, line 347
    def CloseKey(hkey)
      check RegCloseKey.call(hkey)
    end

CreateKey(hkey, name, opt, desired) click to toggle source

    # 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) click to toggle source

    # File ext/win32/lib/win32/registry.rb, line 339
    def DeleteKey(hkey, name)
      check RegDeleteKeyW.call(hkey, make_wstr(name))
    end

DeleteValue(hkey, name) click to toggle source

    # File ext/win32/lib/win32/registry.rb, line 335
    def DeleteValue(hkey, name)
      check RegDeleteValueW.call(hkey, make_wstr(name))
    end

EnumKey(hkey, index) click to toggle source

    # 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) click to toggle source

    # 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) click to toggle source

    # File ext/win32/lib/win32/registry.rb, line 343
    def FlushKey(hkey)
      check RegFlushKey.call(hkey)
    end

OpenKey(hkey, name, opt, desired) click to toggle source

    # 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

QueryInfoKey(hkey) click to toggle source

    # 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) click to toggle source

    # 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) click to toggle source

    # 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

check(result) click to toggle source

    # File ext/win32/lib/win32/registry.rb, line 249
    def check(result)
      raise Error, result, caller(1) if result != 0
    end

make_wstr(str) click to toggle source

    # File ext/win32/lib/win32/registry.rb, line 283
    def make_wstr(str)
      str.encode(WCHAR)
    end

packdw(dw) click to toggle source

    # File ext/win32/lib/win32/registry.rb, line 265
    def packdw(dw)
      [dw].pack('V')
    end

packhandle(h) click to toggle source

    # File ext/win32/lib/win32/registry.rb, line 257
    def packhandle(h)
      win64? ? packqw(h) : packdw(h)
    end

packqw(qw) click to toggle source

    # File ext/win32/lib/win32/registry.rb, line 274
    def packqw(qw)
      [ qw & 0xFFFFFFFF, qw >> 32 ].pack('VV')
    end

unpackdw(dw) click to toggle source

    # File ext/win32/lib/win32/registry.rb, line 269
    def unpackdw(dw)
      dw += [0].pack('V')
      dw.unpack('V')[0]
    end

unpackhandle(h) click to toggle source

    # File ext/win32/lib/win32/registry.rb, line 261
    def unpackhandle(h)
      win64? ? unpackqw(h) : unpackdw(h)
    end

unpackqw(qw) click to toggle source

    # File ext/win32/lib/win32/registry.rb, line 278
    def unpackqw(qw)
      qw = qw.unpack('VV')
      (qw[1] << 32) | qw[0]
    end

win64?() click to toggle source

    # File ext/win32/lib/win32/registry.rb, line 253
    def win64?
      /^(?:x64|x86_64)/ =~ RUBY_PLATFORM
    end