def test_non_latin_extension(self):
import _winreg
class MockWinreg(object):
def __getattr__(self, name):
if name == 'EnumKey':
return lambda key, i: _winreg.EnumKey(key, i) + "\xa3"
elif name == 'OpenKey':
return lambda key, name: _winreg.OpenKey(key, name.rstrip("\xa3"))
elif name == 'QueryValueEx':
return lambda subkey, label: (u'?????/???????' , _winreg.REG_SZ)
return getattr(_winreg, name)
mimetypes._winreg = MockWinreg()
try:
# this used to throw an exception if registry contained non-Latin
# characters in extensions (issue #9291)
mimetypes.init()
finally:
mimetypes._winreg = _winreg
python类EnumKey()的实例源码
def test_non_latin_extension(self):
import _winreg
class MockWinreg(object):
def __getattr__(self, name):
if name == 'EnumKey':
return lambda key, i: _winreg.EnumKey(key, i) + "\xa3"
elif name == 'OpenKey':
return lambda key, name: _winreg.OpenKey(key, name.rstrip("\xa3"))
elif name == 'QueryValueEx':
return lambda subkey, label: (u'?????/???????' , _winreg.REG_SZ)
return getattr(_winreg, name)
mimetypes._winreg = MockWinreg()
try:
# this used to throw an exception if registry contained non-Latin
# characters in extensions (issue #9291)
mimetypes.init()
finally:
mimetypes._winreg = _winreg
def test_non_latin_extension(self):
import _winreg
class MockWinreg(object):
def __getattr__(self, name):
if name == 'EnumKey':
return lambda key, i: _winreg.EnumKey(key, i) + "\xa3"
elif name == 'OpenKey':
return lambda key, name: _winreg.OpenKey(key, name.rstrip("\xa3"))
elif name == 'QueryValueEx':
return lambda subkey, label: (u'?????/???????' , _winreg.REG_SZ)
return getattr(_winreg, name)
mimetypes._winreg = MockWinreg()
try:
# this used to throw an exception if registry contained non-Latin
# characters in extensions (issue #9291)
mimetypes.init()
finally:
mimetypes._winreg = _winreg
def printNets(username, password):
keypath = r"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\NetworkList\\Signatures\\Unmanaged"
key = _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE, keypath)
print ('[*] Networks you have joined.')
for i in range(1):
try:
guid = _winreg.EnumKey(key, i)
netKey = _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE, keypath+r"\\"+str(guid))
(n, addr, t) = _winreg.EnumValue(netKey, 0)
(n, name, t) = _winreg.EnumValue(netKey, 1)
macAddr = val2addr(addr)
print (' [+] ' + name + ' ' + macAddr)
#wiglePrint(username, password, macAddr)
_winreg.CloseKey(netKey)
except Exception, e:
print e
break
def enum_keys(reg):
if reg:
keys = []
try:
i = 0
while 1:
name = _winreg.EnumKey(reg, i)
keys.append(name)
i += 1
except WindowsError as e:
return keys
else:
return False
def __del_keys(self):
'Private class method.'
try:
while True:
_winreg.DeleteKey(self.__self, _winreg.EnumKey(self.__self, 0))
except EnvironmentError:
pass
def __iter__(self):
'Iterate over the key names.'
keys, index = [], 0
try:
while True:
keys.append(_winreg.EnumKey(self.__self, index))
index += 1
except EnvironmentError:
for key in keys:
yield key
def __contains__(self, item):
'Check for a key\'s existence.'
item, index = item.lower(), 0
try:
while True:
if _winreg.EnumKey(self.__self, index).lower() == item:
return True
index += 1
except EnvironmentError:
return False
def keys(self):
# returns a dict of subkeys
if not self._keys:
self._keys={}
for i in xrange(reg.QueryInfoKey(self.wrk)[0]):
name=reg.EnumKey(self.wrk, i).lower()
try:
self._keys[name]=Key(self, name)
except WindowsError: pass
return self._keys
def __del_keys(self):
'Private class method.'
try:
while True:
_winreg.DeleteKey(self.__key, _winreg.EnumKey(self.__key, 0))
except EnvironmentError:
pass
def __contains__(self, item):
'Check for a key\'s existence.'
item = item.lower()
for index in xrange(_winreg.QueryInfoKey(self.__key)[0]):
if _winreg.EnumKey(self.__key, index).lower() == item:
return True
return False
################################################################################
def __del_keys(self):
'Private class method.'
try:
while True:
_winreg.DeleteKey(self.__key, _winreg.EnumKey(self.__key, 0))
except EnvironmentError:
pass
def __iter__(self):
'Iterate over the key names.'
return iter(tuple(_winreg.EnumKey(self.__key, index) for index in xrange(_winreg.QueryInfoKey(self.__key)[0])))
def __contains__(self, item):
'Check for a key\'s existence.'
item = item.lower()
for index in xrange(_winreg.QueryInfoKey(self.__key)[0]):
if _winreg.EnumKey(self.__key, index).lower() == item:
return True
return False
################################################################################
def enumkey(self, index):
""" Enumerate the subkeys of the currently open key """
if not self._hkey: raise RegistryError,"Error: null key"
try:
return wreg.EnumKey(self._hkey, index)
except EnvironmentError, e:
raise RegistryError, e
def subkeys(self):
"""The subkeys of the registry key
:type: [:class:`PyHKey`] - A list of keys"""
res = []
with ExpectWindowsError(259):
for i in itertools.count():
res.append(_winreg.EnumKey(self.phkey, i))
return [PyHKey(self, n) for n in res]
def _enumerate_reg_keys(key):
return _RegKeyDict._enumerate_reg(key, _winreg.EnumKey)
def read_subkeys(self, regKey):
self._log("Reading subkeys for registry key: %s" % regKey)
registryHandles = []
subkeys = []
path = regKey.split("/")
hiveName = path.pop(0)
hive = reg.ConnectRegistry(None, self.regKeys[hiveName][0])
registryHandle = reg.OpenKey(hive, self.regKeys[hiveName][1])
registryHandles.append(hive)
self._log("Connected to registry at location: %s" % hiveName)
for step in path:
registryHandles.append(registryHandle)
registryHandle = reg.OpenKey(registryHandle, step)
i = 0
while True:
try:
subkey = reg.EnumKey(registryHandle, i)
self._log("Found subkey: %s" % subkey)
subkeys.append(subkey)
i += 1
except EnvironmentError:
break
self._log("Found %d subkeys." % len(subkeys))
self._log("Closing %d registry handles..." % len(registryHandles))
for handle in registryHandles:
reg.CloseKey(handle)
self._log("Done. Subkey enumeration completed.")
return subkeys
def __init__(self):
if self.info is not None:
return
info = []
try:
#XXX: Bad style to use so long `try:...except:...`. Fix it!
import _winreg
prgx = re.compile(r"family\s+(?P<FML>\d+)\s+model\s+(?P<MDL>\d+)"\
"\s+stepping\s+(?P<STP>\d+)",re.IGNORECASE)
chnd=_winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE, self.pkey)
pnum=0
while 1:
try:
proc=_winreg.EnumKey(chnd,pnum)
except _winreg.error:
break
else:
pnum+=1
info.append({"Processor":proc})
phnd=_winreg.OpenKey(chnd,proc)
pidx=0
while True:
try:
name,value,vtpe=_winreg.EnumValue(phnd,pidx)
except _winreg.error:
break
else:
pidx=pidx+1
info[-1][name]=value
if name=="Identifier":
srch=prgx.search(value)
if srch:
info[-1]["Family"]=int(srch.group("FML"))
info[-1]["Model"]=int(srch.group("MDL"))
info[-1]["Stepping"]=int(srch.group("STP"))
except:
print sys.exc_value,'(ignoring)'
self.__class__.info = info
def list():
"""Return a list of all time zones known to the system."""
handle = _winreg.ConnectRegistry(None, _winreg.HKEY_LOCAL_MACHINE)
tzkey = _winreg.OpenKey(handle, TZKEYNAME)
result = [_winreg.EnumKey(tzkey, i)
for i in range(_winreg.QueryInfoKey(tzkey)[0])]
tzkey.Close()
handle.Close()
return result
def _reg_query_sub_keys(handle, key, keylist = []):
reghandle = reg.OpenKey(handle, key, 0, reg.KEY_READ)
try:
i = 0
while True:
subkey = reg.EnumKey(reghandle, i)
i += 1
_reg_query_sub_keys(handle, key + subkey + "\\", keylist)
except WindowsError as ex:
if ex.winerror == 259:
keylist.append(key)
finally:
reg.CloseKey(reghandle)
def get_installed_pythons():
try:
python_core = winreg.CreateKey(winreg.HKEY_LOCAL_MACHINE,
"Software\\Python\\PythonCore")
except WindowsError:
# No registered Python installations
return {}
i = 0
versions = []
while True:
try:
versions.append(winreg.EnumKey(python_core, i))
i = i + 1
except WindowsError:
break
exes = dict()
for ver in versions:
try:
path = winreg.QueryValue(python_core, "%s\\InstallPath" % ver)
except WindowsError:
continue
exes[ver] = join(path, "python.exe")
winreg.CloseKey(python_core)
# Add the major versions
# Sort the keys, then repeatedly update the major version entry
# Last executable (i.e., highest version) wins with this approach
for ver in sorted(exes):
exes[ver[0]] = exes[ver]
return exes
def get_installed_pythons():
try:
python_core = winreg.CreateKey(winreg.HKEY_LOCAL_MACHINE,
"Software\\Python\\PythonCore")
except WindowsError:
# No registered Python installations
return {}
i = 0
versions = []
while True:
try:
versions.append(winreg.EnumKey(python_core, i))
i = i + 1
except WindowsError:
break
exes = dict()
for ver in versions:
try:
path = winreg.QueryValue(python_core, "%s\\InstallPath" % ver)
except WindowsError:
continue
exes[ver] = join(path, "python.exe")
winreg.CloseKey(python_core)
# Add the major versions
# Sort the keys, then repeatedly update the major version entry
# Last executable (i.e., highest version) wins with this approach
for ver in sorted(exes):
exes[ver[0]] = exes[ver]
return exes
def get_installed_pythons():
try:
python_core = winreg.CreateKey(winreg.HKEY_LOCAL_MACHINE,
"Software\\Python\\PythonCore")
except WindowsError:
# No registered Python installations
return {}
i = 0
versions = []
while True:
try:
versions.append(winreg.EnumKey(python_core, i))
i = i + 1
except WindowsError:
break
exes = dict()
for ver in versions:
try:
path = winreg.QueryValue(python_core, "%s\\InstallPath" % ver)
except WindowsError:
continue
exes[ver] = join(path, "python.exe")
winreg.CloseKey(python_core)
# Add the major versions
# Sort the keys, then repeatedly update the major version entry
# Last executable (i.e., highest version) wins with this approach
for ver in sorted(exes):
exes[ver[0]] = exes[ver]
return exes
def _enumerate_reg_keys(key):
return _RegKeyDict._enumerate_reg(key, _winreg.EnumKey)
def __get_key_values(root_key, key):
"""This method gets the values and subkeys from the given key under the
root key.
Args:
root_key (str): The root key as abbreviated string.
Valid values: [hklm, hkcr, hkcu, hku, hkpd, hkcc].
key (str): The subkey starting from the root key.
e.g.: SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\interfaces
Returns:
list. It returns the retrieved values and subkeys
or an empty list if data could not be retrieved.
"""
values = []
i = 0
try:
hkey = _winreg.OpenKey(root_key, key, 0, _winreg.KEY_READ)
except WindowsError as e:
logging.error('Key ({0}) could not be opened: {1}'.format(key, e))
return values
while True:
try:
value = _winreg.EnumKey(hkey, i)
values.append(value)
i += 1
except WindowsError:
logging.info('No more values. Total values: {0}'.format(i))
if hkey:
_winreg.CloseKey(hkey)
break # no more values
return values
def __init__(self):
if self.info is not None:
return
info = []
try:
#XXX: Bad style to use so long `try:...except:...`. Fix it!
import _winreg
prgx = re.compile(r"family\s+(?P<FML>\d+)\s+model\s+(?P<MDL>\d+)" \
"\s+stepping\s+(?P<STP>\d+)", re.IGNORECASE)
chnd = _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE, self.pkey)
pnum = 0
while 1:
try:
proc = _winreg.EnumKey(chnd, pnum)
except _winreg.error:
break
else:
pnum += 1
info.append({"Processor": proc})
phnd = _winreg.OpenKey(chnd, proc)
pidx = 0
while True:
try:
name, value, vtpe = _winreg.EnumValue(phnd, pidx)
except _winreg.error:
break
else:
pidx = pidx + 1
info[-1][name] = value
if name == "Identifier":
srch = prgx.search(value)
if srch:
info[-1]["Family"] = int(srch.group("FML"))
info[-1]["Model"] = int(srch.group("MDL"))
info[-1]["Stepping"] = int(srch.group("STP"))
except:
print( str(sys.exc_info()) + '(ignoring)' )
self.__class__.info = info
def list_timezones():
"""Return a list of all time zones known to the system."""
l=[]
for i in xrange(parentsize):
l.append(_winreg.EnumKey(tzparent, i))
return l
def readKeys(keyPath):
# return list of Keys
explorer = OpenKey(HKEY_LOCAL_MACHINE, keyPath, 0, KEY_READ | KEY_WOW64_64KEY)
KeysList = []
for i in xrange(QueryInfoKey(explorer)[0]):
name = EnumKey(explorer, i)
KeysList.append(name)
return KeysList
def get_acroversion():
" Return version of Adobe Acrobat executable or None"
import _winreg
adobesoft = _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE, r'Software\Adobe')
for index in range(_winreg.QueryInfoKey(adobesoft)[0]):
key = _winreg.EnumKey(adobesoft, index)
if "acrobat" in key.lower():
acrokey = _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE, 'Software\\Adobe\\%s' % key)
for index in range(_winreg.QueryInfoKey(acrokey)[0]):
numver = _winreg.EnumKey(acrokey, index)
try:
res = _winreg.QueryValue(_winreg.HKEY_LOCAL_MACHINE, 'Software\\Adobe\\%s\\%s\\InstallPath' % (key, numver))
return res
except Exception:
pass
return None