def remove_certificate(self, certificate):
CONTAINS_SUBKEYS = 0
registryHandles = []
returnValue = False
path = certificate["RegPath"].split("/")
hiveName = path.pop(0)
keyName = path.pop(-1)
hive = reg.ConnectRegistry(None, self.regKeys[hiveName][0])
registryHandle = reg.OpenKey(hive, self.regKeys[hiveName][1])
self._log("Connected to registry at location: %s" % hiveName)
for step in path:
registryHandles.append(registryHandle)
registryHandle = reg.OpenKey(registryHandle, step)
try:
deletionCandidate = reg.OpenKey(registryHandle, keyName)
self._log("Querying deletion canditate: %s" % certificate["RegPath"])
if not reg.QueryInfoKey(deletionCandidate)[CONTAINS_SUBKEYS]:
self._log("Attempting to delete key: %s" % certificate["RegPath"])
reg.CloseKey(deletionCandidate)
reg.DeleteKey(registryHandle, keyName)
self._log("Deleted key: %s" % certificate["RegPath"])
returnValue = True
else:
self._error_log("Unable to delete key: %s. Key contains subkeys." % certificate["RegPath"])
registryHandles.append(deletionCandidate)
raise WindowsError
except WindowsError as e:
self._error_log("Unable to delete key: %s. Windows error." % certificate["RegPath"])
self._error_log("%s: %s" % (certificate["RegPath"], str(e)))
pass
self._log("Closing registry handles...")
for handle in registryHandles:
reg.CloseKey(handle)
reg.CloseKey(hive)
self._log("Registry handles closed.")
return returnValue
评论列表
文章目录