class Rex::Post::Meterpreter::Extensions::Stdapi::Sys::RegistrySubsystem::RegistryKey
Class wrapper around a logical registry key on the remote side
Attributes
The base key name, such as SoftwareFoo.
The open handle to the key on the server.
The permissions that the key was opened with.
The root key name, such as HKEY_LOCAL_MACHINE.
Public Class Methods
Closes the open key. This must be called if the registry key was opened.
# File lib/rex/post/meterpreter/extensions/stdapi/sys/registry_subsystem/registry_key.rb, line 108 def self.close(client, hkey) if hkey != nil return client.sys.registry.close_key(hkey) end return false end
# File lib/rex/post/meterpreter/extensions/stdapi/sys/registry_subsystem/registry_key.rb, line 36 def self.finalize(client,hkey) proc { self.close(client,hkey) } end
Initializes an instance of a registry key using the supplied properties and HKEY handle from the server.
# File lib/rex/post/meterpreter/extensions/stdapi/sys/registry_subsystem/registry_key.rb, line 25 def initialize(client, root_key, base_key, perm, hkey) self.client = client self.root_key = root_key self.base_key = base_key self.perm = perm self.hkey = hkey # Ensure the remote object is closed when all references are removed ObjectSpace.define_finalizer(self, self.class.finalize(client, hkey)) end
Public Instance Methods
Instance method for the same
# File lib/rex/post/meterpreter/extensions/stdapi/sys/registry_subsystem/registry_key.rb, line 117 def close() unless self.hkey.nil? ObjectSpace.undefine_finalizer(self) self.class.close(self.client, self.hkey) self.hkey = nil end end
Creates a registry key that is relative to this registry key.
# File lib/rex/post/meterpreter/extensions/stdapi/sys/registry_subsystem/registry_key.rb, line 93 def create_key(base_key, perm = KEY_READ) return self.client.sys.registry.create_key(self.hkey, base_key, perm) end
Deletes a registry key that is relative to this registry key.
# File lib/rex/post/meterpreter/extensions/stdapi/sys/registry_subsystem/registry_key.rb, line 100 def delete_key(base_key, recursive = true) return self.client.sys.registry.delete_key(self.hkey, base_key, recursive) end
Delete the supplied registry value.
# File lib/rex/post/meterpreter/extensions/stdapi/sys/registry_subsystem/registry_key.rb, line 156 def delete_value(name) return self.client.sys.registry.delete_value(self.hkey, name) end
Enumerates all of the child keys within this registry key.
# File lib/rex/post/meterpreter/extensions/stdapi/sys/registry_subsystem/registry_key.rb, line 49 def each_key(&block) return enum_key.each(&block) end
Enumerates all of the child values within this registry key.
# File lib/rex/post/meterpreter/extensions/stdapi/sys/registry_subsystem/registry_key.rb, line 56 def each_value(&block) return enum_value.each(&block) end
Retrieves all of the registry keys that are direct descendents of the class' registry key.
# File lib/rex/post/meterpreter/extensions/stdapi/sys/registry_subsystem/registry_key.rb, line 64 def enum_key() return self.client.sys.registry.enum_key(self.hkey) end
Retrieves all of the registry values that exist within the opened registry key.
# File lib/rex/post/meterpreter/extensions/stdapi/sys/registry_subsystem/registry_key.rb, line 72 def enum_value() return self.client.sys.registry.enum_value(self.hkey) end
Opens a registry key that is relative to this registry key.
# File lib/rex/post/meterpreter/extensions/stdapi/sys/registry_subsystem/registry_key.rb, line 86 def open_key(base_key, perm = KEY_READ) return self.client.sys.registry.open_key(self.hkey, base_key, perm) end
Queries the class of the specified key
# File lib/rex/post/meterpreter/extensions/stdapi/sys/registry_subsystem/registry_key.rb, line 149 def query_class return self.client.sys.registry.query_class(self.hkey) end
Queries the attributes of the supplied registry value relative to the opened registry key.
# File lib/rex/post/meterpreter/extensions/stdapi/sys/registry_subsystem/registry_key.rb, line 142 def query_value(name) return self.client.sys.registry.query_value(self.hkey, name) end
Sets a value relative to the opened registry key.
# File lib/rex/post/meterpreter/extensions/stdapi/sys/registry_subsystem/registry_key.rb, line 134 def set_value(name, type, data) return self.client.sys.registry.set_value(self.hkey, name, type, data) end
Returns the path to the key.
# File lib/rex/post/meterpreter/extensions/stdapi/sys/registry_subsystem/registry_key.rb, line 169 def to_s if self.base_key.nil? self.root_key.to_s + "\\" else self.root_key.to_s + "\\" + self.base_key end end