Esempio n. 1
0
    def read_registry(self):
        """Extract resolver configuration from the Windows registry."""

        lm = _winreg.ConnectRegistry(None, _winreg.HKEY_LOCAL_MACHINE)
        want_scan = False
        try:
            try:
                # XP, 2000
                tcp_params = _winreg.OpenKey(lm,
                                             r'SYSTEM\CurrentControlSet'
                                             r'\Services\Tcpip\Parameters')
                want_scan = True
            except EnvironmentError:
                # ME
                tcp_params = _winreg.OpenKey(lm,
                                             r'SYSTEM\CurrentControlSet'
                                             r'\Services\VxD\MSTCP')
            try:
                self._config_win32_fromkey(tcp_params, True)
            finally:
                tcp_params.Close()
            if want_scan:
                interfaces = _winreg.OpenKey(lm,
                                             r'SYSTEM\CurrentControlSet'
                                             r'\Services\Tcpip\Parameters'
                                             r'\Interfaces')
                try:
                    i = 0
                    while True:
                        try:
                            guid = _winreg.EnumKey(interfaces, i)
                            i += 1
                            key = _winreg.OpenKey(interfaces, guid)
                            if not self._win32_is_nic_enabled(lm, guid, key):
                                continue
                            try:
                                self._config_win32_fromkey(key, False)
                            finally:
                                key.Close()
                        except EnvironmentError:
                            break
                finally:
                    interfaces.Close()
        finally:
            lm.Close()
Esempio n. 2
0
def get_nameserver_candidates():
    """
	Returns a list of IP addresses which potentially an active DNS server used by the current machine.
	Please be aware that it's not at all precise!
	"""
    keynames = ['NameServer', 'DhcpNameServer']

    def get_ips(iface, keyname):
        try:
            result = {}
            res, _ = winreg.QueryValueEx(iface, keyname)
            if len(res) > 0:
                if res.find(',') != -1:
                    for x in res.split(','):
                        result[x] = 0
                else:
                    result[res] = 0
        except Exception as e:
            pass  #print(e)
        finally:
            return list(result.keys())

    ips = {}
    hklm = winreg.ConnectRegistry(None, winreg.HKEY_LOCAL_MACHINE)
    key = 'System\CurrentControlSet\Services\Tcpip\Parameters\Interfaces'
    aKey = winreg.OpenKey(hklm, key)
    for i in range(1024):
        try:
            asubkey_name = winreg.EnumKey(aKey, i)
            iface = winreg.OpenKey(aKey, asubkey_name)
            for keyname in keynames:
                for res in get_ips(iface, keyname):
                    ips[res] = 0

        except OSError as e:
            if e.args[0] == 22:
                break
            elif e.args[0] == 259:
                continue
            else:
                raise
        except Exception as e:
            print(e)

    return list(ips.keys())
Esempio n. 3
0
def findkey(sub_key, reg_list, compilestr):
    key = winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE,
                         sub_key,
                         reserved=0,
                         access=winreg.KEY_READ)
    if findReg(key, compilestr):
        reg_list.append(
            re.compile(r'^(.*?\\.*?\\.*?\\)([^\\]*)').search(sub_key).group(2))
    else:
        try:
            index = 0
            parentPath = sub_key
            while True:
                sub_key = parentPath + '\\' + winreg.EnumKey(key, index)
                findkey(sub_key, reg_list, compilestr)
                index += 1
        except WindowsError:
            pass
Esempio n. 4
0
def getKeyRegBrowsers(base_key, sub_key):
	"""sub_key is one of the main keys in the registry, or defined constants in _winreg module
	sub_key is the sub key in  the registry under which executable labels is found
	this function will return a list of tuples, consisting of the browser label if present and its path.""" 
	foundBrowsers=[]
	try:
		key= _winreg.OpenKey(base_key, sub_key)
		i=0
		while True:
			foundKey= _winreg.EnumKey(key, i)
			if foundKey.lower() in exeLabels:
				key2= _winreg.OpenKey(base_key, os.path.join(sub_key, foundKey))
				#_winreg.EnumValue(key2, 0) returns a tuple of three elements, path is the second.
				foundBrowsers.append((exeLabels[foundKey.lower()], _winreg.EnumValue(key2, 0)[1]))
			i+=1
	except WindowsError:
		pass
	return foundBrowsers
Esempio n. 5
0
    def getKey(self, path):
        nbNodes, _, _ = winreg.QueryInfoKey(self._node)
        for indice in range(nbNodes):
            try:
                node_path = winreg.EnumKey(self._node, indice)
                if node_path == path:

                    if self._path:
                        new_path = self._path + '\\' + node_path
                    else:
                        new_path = self._path + node_path

                    return Registre(
                        hkey=self._hkey,
                        path=new_path,
                    )
            except Exception as e:
                print('{}\\{} : {!r}'.format(self.path, node_path, e))
Esempio n. 6
0
    def CurrentUserApps(hive, flag):
        aReg = winreg.ConnectRegistry(None, hive)
        aKey = winreg.OpenKey(
            aReg, r"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall", 0,
            winreg.KEY_READ | flag)

        winapp = []
        count_subkey = winreg.QueryInfoKey(aKey)[0]
        for i in range(count_subkey):
            try:
                asubkey_name = winreg.EnumKey(aKey, i)
                asubkey = winreg.OpenKey(aKey, asubkey_name)
                val = winreg.QueryValueEx(asubkey, "DisplayName")[0]
                winapp.append(val)

            except EnvironmentError:
                continue
        return winapp
Esempio n. 7
0
 def load(self, recursive=False):
     try:
         rootkey = winreg.OpenKey(self._keytype, self._keypath, 0,
                                  winreg.KEY_READ)
     except OSError:  # key doesn't exist
         return
     values = winreg.QueryInfoKey(rootkey)[1]
     for num in range(0, values):
         name, data, datatype = winreg.EnumValue(rootkey, num)
         try:
             SettingsBase.__setattr__(self, name, ast.literal_eval(data))
         except (ValueError, SyntaxError):
             raise SettingsError("Error")
     if recursive:
         keys, vals, mod = winreg.QueryInfoKey(rootkey)
         for i in range(0, keys):
             name = winreg.EnumKey(rootkey, i)
             s = Settings(parent=self, name=name, recursive=True)
Esempio n. 8
0
def get_matching_sessions(except_session, session_pattern):
    """
    Returns sessions matching pattern
    """
    reg_key = get_sessions_reg_key()
    num_keys, _, _ = winreg.QueryInfoKey(reg_key)

    patterns = csv_to_pattern_list(session_pattern)

    sessions = [winreg.EnumKey(reg_key, i) for i in range(num_keys)]
    is_matched_session = lambda s: s != except_session and string_matches(s, patterns)
    sessions = list(filter(is_matched_session, sessions))

    if len(sessions)==0:
        raise SessionNotFoundError('No sessions matching given pattern: "%s"' %
                                   (session_pattern))

    return sessions
Esempio n. 9
0
    def _get_extra_sids(self):
        sids = set()

        k1 = winreg.HKEY_USERS

        i = 0
        while 1:
            try:
                sid = winreg.EnumKey(k1, i)

                if '_Classes' not in sid and sid != '.DEFAULT':
                    sids.add(sid)

                i += 1
            except WindowsError:
                break

        return sids
Esempio n. 10
0
def printNets():
    subKey = 'SOFTWARE\Microsoft\Windows NT\CurrentVersion\\NetworkList\Signatures\\Unmanaged'
    key = winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, subKey)
    print('\n[*] Networks you have joined')
    count, _, _ = winreg.QueryInfoKey(key)

    for n in range(count):
        guid = winreg.EnumKey(key, n)
        netKey = winreg.OpenKey(key, str(guid))

        deviceName, _ = winreg.QueryValueEx(netKey, 'Description')
        mac, _ = winreg.QueryValueEx(netKey, 'DefaultGatewayMac')
        if mac:
            mac = ':'.join(['%02x' % ch for ch in mac])
        else:
            mac = ':'.join(['--' for _ in range(6)])

        print('{:<20}\t{}'.format(mac, deviceName))
Esempio n. 11
0
    def load(self):
        # load scope definitions
        try:
            key = winreg.OpenKey(winreg.HKEY_CURRENT_USER,
                                 'SOFTWARE\OscCap\Scopes')
        except WindowsError:
            key = winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE,
                                 'SOFTWARE\OscCap\Scopes')

        index = 0
        try:
            while True:
                name = winreg.EnumKey(key, index)
                try:
                    entry = winreg.OpenKey(key, name)
                    scope_host = winreg.QueryValueEx(entry, 'host')[0]
                    self.scopes.append(OscProperties(name, scope_host))
                except WindowsError:
                    logging.error('Error loading config oscilloscope %s', name)
                index += 1
        except WindowsError:
            pass

        winreg.CloseKey(key)
        self.scopes.sort(key=lambda e: e.host)

        # load common program properties
        try:
            key = winreg.OpenKey(winreg.HKEY_CURRENT_USER, 'SOFTWARE\OscCap')
        except WindowsError:
            winreg.CreateKeyEx(winreg.HKEY_CURRENT_USER, 'SOFTWARE\OscCap')
            key = winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, 'SOFTWARE\OscCap')

        hk_modifiers = self._try_query_value(key, 'HotKeyModifiers', None)
        hk_keycode = self._try_query_value(key, 'HotKeyKeycode', None)
        if (hk_modifiers, hk_keycode) != (None, None):
            self.hotkey = HotKey(hk_modifiers, hk_keycode)
        winreg.CloseKey(key)

        # load local user properties
        with winreg.OpenKey(winreg.HKEY_CURRENT_USER,
                            'SOFTWARE\OscCap') as key:
            self.active_scope_name = self._try_query_value(
                key, 'LastActiveName', self.scopes[0].name)
    def getInstallPath(self, version=None):
        try:
            key = _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE,
                                  "SOFTWARE\\Autodesk\\Maya", 0,
                                  _winreg.KEY_READ | _winreg.KEY_WOW64_64KEY)

            mayaVersions = []
            try:
                i = 0
                while True:
                    mayaVers = _winreg.EnumKey(key, i)
                    if unicode(mayaVers).isnumeric():
                        mayaVersions.append(mayaVers)
                    i += 1
            except WindowsError:
                pass

            if version is None:
                validVersion = mayaVersions[-1]
            elif version in mayaVersions:
                validVersion = version
            else:
                for i in mayaVersions:
                    if float(i) > float(version):
                        validVersion = i
                        break
                else:
                    self.writeLog("No valid Maya found in registry", 0)
                    return None

            key = _winreg.OpenKey(
                _winreg.HKEY_LOCAL_MACHINE,
                "SOFTWARE\\Autodesk\\Maya\\%s\\Setup\\InstallPath" %
                validVersion, 0, _winreg.KEY_READ | _winreg.KEY_WOW64_64KEY)

            installDir = (_winreg.QueryValueEx(key,
                                               "MAYA_INSTALL_LOCATION"))[0]

            if installDir is None:
                return ""
            else:
                return installDir
        except:
            return ""
Esempio n. 13
0
    def _get_installed_programs_on_windows_ex2(key, subkey, mode):
        """
        Internal implementation of searching programs in registry
        :param key:
        :param subkey:
        :param mode:
        :return:
        """
        programs = []
        try:
            conn = winreg.ConnectRegistry(None, key)
            reg_key = winreg.OpenKey(conn, subkey, 0, mode)
            i = -1

            bitness = "x86"
            if mode & winreg.KEY_WOW64_64KEY:
                bitness = "x64"
            while True:
                try:
                    i += 1
                    subkey_name = winreg.EnumKey(reg_key, i)
                    subkey = winreg.OpenKey(reg_key, subkey_name)
                    val, _ = winreg.QueryValueEx(subkey, "DisplayName")
                    display_version, _ = winreg.QueryValueEx(subkey, "DisplayVersion")
                    uninstall_string, _ = winreg.QueryValueEx(subkey, "UninstallString")
                    install_location, _ = winreg.QueryValueEx(subkey, "InstallLocation")

                    pr = InstalledProductInfo()
                    pr.name = val
                    pr.version= display_version
                    pr.guid = subkey_name
                    pr.uninstall_string = uninstall_string
                    pr.bitness = bitness
                    pr.install_dir = install_location
                    programs.append(pr)

                except WindowsError as e:
                    if e.winerror == 259:
                        break
                    continue
        except Exception as ex:
            pass

        return programs
Esempio n. 14
0
    def _get_pg_config_from_registry(self):
        try:
            import winreg
        except ImportError:
            import _winreg as winreg

        reg = winreg.ConnectRegistry(None, winreg.HKEY_LOCAL_MACHINE)
        try:
            pg_inst_list_key = winreg.OpenKey(
                reg, 'SOFTWARE\\PostgreSQL\\Installations')
        except EnvironmentError:
            # No PostgreSQL installation, as best as we can tell.
            return None

        try:
            # Determine the name of the first subkey, if any:
            try:
                first_sub_key_name = winreg.EnumKey(pg_inst_list_key, 0)
            except EnvironmentError:
                return None

            pg_first_inst_key = winreg.OpenKey(
                reg,
                'SOFTWARE\\PostgreSQL\\Installations\\' + first_sub_key_name)
            try:
                pg_inst_base_dir = winreg.QueryValueEx(pg_first_inst_key,
                                                       'Base Directory')[0]
            finally:
                winreg.CloseKey(pg_first_inst_key)

        finally:
            winreg.CloseKey(pg_inst_list_key)

        pg_config_path = os.path.join(pg_inst_base_dir, 'bin', 'pg_config.exe')
        if not os.path.exists(pg_config_path):
            return None

        # Support unicode paths, if this version of Python provides the
        # necessary infrastructure:
        if sys.version_info[0] < 3 \
                and hasattr(sys, 'getfilesystemencoding'):
            pg_config_path = pg_config_path.encode(sys.getfilesystemencoding())

        return pg_config_path
Esempio n. 15
0
    def software_inventory(self):
        # -----------------------DRIVERS-----------------------
        search_class = "Win32_PnPSignedDriver"
        props = ["DeviceName", "Manufacturer", "DriverVersion"]
        drivers = self.get_values(search_class, props)

        # -----------------------PROGRAMS-----------------------
        import winreg as wr

        key_path = r"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"
        target = "\\\\{}".format(self.hostname)
        rem_reg = wr.ConnectRegistry(None, wr.HKEY_LOCAL_MACHINE)
        rem_key = wr.OpenKey(rem_reg, key_path, 0,
                             wr.KEY_READ | wr.KEY_WOW64_64KEY)
        subkeys = []
        index = 0
        programs = []

        # creating subkeys
        while True:
            try:
                subkey = wr.EnumKey(rem_key, index)
                subkeys.append(subkey)
                index += 1
            except EnvironmentError:
                break

        for sk in subkeys:
            programs.append({})
            path = key_path + "\\" + sk
            key = wr.OpenKey(rem_reg, path, 0,
                             wr.KEY_READ | wr.KEY_WOW64_64KEY)
            try:
                programs[-1]['DisplayName'] = str(
                    wr.QueryValueEx(key, 'DisplayName')[0])
                programs[-1]['UninstallString'] = str(
                    wr.QueryValueEx(key, 'UninstallString')[0])
            except:
                programs.pop()

        return {
            "drivers": drivers,
            "programs": programs,
        }
Esempio n. 16
0
    def __init__(self):
        if self.info is not None:
            return
        info = []
        try:
            # XXX: Bad style to use so long `try:...except:...`. Fix it!
            if sys.version_info[0] >= 3:
                import winreg
            else:
                import _winreg as winreg

            prgx = re.compile(
                r"family\s+(?P<FML>\d+)\s+model\s+(?P<MDL>\d+)"
                r"\s+stepping\s+(?P<STP>\d+)", re.IGNORECASE)
            chnd = winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, self.pkey)
            pnum = 0
            while True:
                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_info()[1], '(ignoring)')
        self.__class__.info = info
Esempio n. 17
0
def tryLookupKey(path, hkey):
    global read_value, unread_key, read_key, current_registry
    read_key = read_key + 1
    try:
        hkeyInfo = winreg.QueryInfoKey(hkey)
        current_registry[path] = (hash1Str(''), hkeyInfo[2], 0)
        # read value in key
        for i in range(hkeyInfo[1]):
            n, v, t = winreg.EnumValue(hkey, i)
            name = path + '->' + n

            # hash n+t+v as string
            strv = n + str(t) + str(v)
            ret = hash1Str(strv)
            if ret != ERROR_CODE:
                current_registry[name] = (ret, hkeyInfo[2])
            read_value = read_value + 1

        # lookup sub key
        for i in range(hkeyInfo[0]):
            subKeyName = winreg.EnumKey(hkey, i)
            try:
                subKey = winreg.OpenKey(hkey,
                                        subKeyName,
                                        access=winreg.KEY_READ
                                        | winreg.KEY_WOW64_32KEY)
            except Exception as e:
                print(e, "123a")
                try:
                    subKey = winreg.OpenKey(hkey,
                                            subKeyName,
                                            access=winreg.KEY_READ
                                            | winreg.KEY_WOW64_64KEY)
                except Exception as e:
                    print(e, "123b")
                    unread_key = unread_key + 1
                continue

            tryLookupKey(path + '\\' + subKeyName, subKey)
        return SUCCESS_CODE
    except EnvironmentError as e:
        print(e, "123c")
        return ERROR_CODE
def installed_rvt_detection():
    """
    Finds install path of rvt versions in win registry
    :return:dict: found install paths
    """
    install_location = "InstallLocation"
    rvt_reg_keys = {}
    rvt_install_paths = {}
    index = 0
    reg = winreg.ConnectRegistry(None, winreg.HKEY_LOCAL_MACHINE)
    soft_uninstall = "Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall"
    python32bit = "32 bit" in sys.version
    python64bit = "64 bit" in sys.version

    if python64bit:
        install_keys = winreg.OpenKey(reg, soft_uninstall)
    elif python32bit:
        install_keys = winreg.OpenKey(reg, soft_uninstall, 0, winreg.KEY_READ | winreg.KEY_WOW64_64KEY)

    while True:
        try:
            adsk_pattern = r"Autodesk Revit ?(\S* )?\d{4}$"
            current_key = winreg.EnumKey(install_keys, index)
            if re.match(adsk_pattern, current_key):
                rvt_reg_keys[current_key] = index
                # print([current_key, index])
        except OSError:
            break
        index += 1

    for rk in rvt_reg_keys.keys():
        version_pattern = r"\d{4}"
        rvt_install_version = re.search(version_pattern, rk)[0]
        reg = winreg.ConnectRegistry(None, winreg.HKEY_LOCAL_MACHINE)
        if python64bit:
            rvt_reg = winreg.OpenKey(reg, soft_uninstall + "\\" + rk)
        elif python32bit:
            rvt_reg = winreg.OpenKey(reg, soft_uninstall + "\\" + rk, 0, winreg.KEY_READ | winreg.KEY_WOW64_64KEY)
        # print([rk, rvt_reg, install_location])
        exe_location = winreg.QueryValueEx(rvt_reg, install_location)[0] + "Revit.exe"
        rvt_install_paths[rvt_install_version] = exe_location

    return rvt_install_paths
Esempio n. 19
0
    def del_games(self):
        i = 0
        _gamelist = []
        while True:
            try:
                d = winreg.EnumKey(self.pathGameKey, i)
                _gamelist.append(d)
                i += 1
            except:
                logging.error('del_games First step Done!')
                break

        for game in _gamelist:
            logging.info(game)
            _delkey = winreg.OpenKey(winreg.HKEY_CURRENT_USER,
                                     self.pathGameReg)
            winreg.DeleteKey(_delkey, game)
            i += 1
        logging.info("游戏注册表删除完成!")
Esempio n. 20
0
def get_windows_software():
    """
    从注册表获取Windows系统安装的软件列表
    :return:
    """
    import winreg

    # 需要遍历的两个注册表
    sub_keys = [
        r'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall',
        r'SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall',
    ]

    software_list = {}

    # 连接注册表根键
    regRoot = winreg.ConnectRegistry(None, winreg.HKEY_LOCAL_MACHINE)
    for sub_key in sub_keys:
        keyHandle = winreg.OpenKey(regRoot, sub_key, 0, winreg.KEY_ALL_ACCESS)
        # 获取该目录下所有键的个数(0-下属键个数;1-当前键值个数)
        for i in range(winreg.QueryInfoKey(keyHandle)[0]):
            try:
                # 穷举每个键,获取键名
                key_name = winreg.EnumKey(keyHandle, i)
                key_path = f"{sub_key}\\{key_name}"
                # 根据获取的键名拼接之前的路径作为参数,获取当前键下所属键的控制
                each_key = winreg.OpenKey(regRoot, key_path, 0, winreg.KEY_ALL_ACCESS)
                if winreg.QueryInfoKey(each_key)[1] > 1:
                    # 穷举每个键,获取键名、键值以及数据类型
                    # name, value, type = winreg.EnumValue(each_key, j)
                    # print(name,value,type)
                    DisplayName, REG_SZ = winreg.QueryValueEx(each_key, 'DisplayName')
                    DisplayVersion, REG_SZ = winreg.QueryValueEx(each_key, 'DisplayVersion')
                    software_list[DisplayName] = DisplayVersion
            except WindowsError as e:
                pass
            finally:
                winreg.CloseKey(each_key)

    winreg.CloseKey(keyHandle)
    winreg.CloseKey(regRoot)

    return software_list
Esempio n. 21
0
def get_local_mac():
    net = r'SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkList\Signatures\Unmanaged'

    key = winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, net)
    mac_addr = {}
    for i in range(50):
        try:
            guid = winreg.EnumKey(key, i)
            netKey = winreg.OpenKey(key, str(guid))
            (n, addr, t) = winreg.EnumValue(netKey, 5)
            (n, name, t) = winreg.EnumValue(netKey, 4)
            macAddr = val2addr(str(addr))
            netName = str(name)
            print('[+] ' + netName + ' ' + macAddr)
            mac_addr[netName] = macAddr
            winreg.CloseKey(netKey)
        except:
            continue
    return mac_addr
Esempio n. 22
0
def find_registry_name2(key, sub_key, name, items):
    ret = None
    try:
        handle = winreg.OpenKey(key, sub_key)
    except:
        return

    currentdir_reg = list()
    try:  # find all attr name
        jj = 0
        while (True):
            attr_name = winreg.EnumValue(handle, jj)
            jj += 1
            currentdir_reg.append(attr_name[0])
    except:
        pass

    if name in currentdir_reg:
        print("find :", sub_key)
        items.append(sub_key)
        handle.Close()
        pass  # find duplicated item


#        return sub_key
    else:
        jj = 0
        subdir_list = list()
        try:  # search sub directory
            while (True):
                subdir_name = winreg.EnumKey(handle, jj)
                jj += 1
                subdir_list.append(subdir_name)
        except:
            pass

        for subdir in subdir_list:  # ennter sub directory recursively
            ret = find_registry_name2(key, os.path.join(sub_key, subdir), name,
                                      items)
            if ret is not None:
                break
    handle.Close()
    return ret
Esempio n. 23
0
    def DFS_HIVE_SEARCH(self, REG, HIVE, PATH):
        # In case of No permission, pass
        try:
            hKey = REG.openHReg(HIVE, PATH)
        except Exception as e:
            # print("[-] no Permission!")
            return

        # List of keys that belongs to HIVE/PATH
        keyList = []
        i = 0
        while True:
            try:
                keyList.append(winreg.EnumKey(hKey, i))
            except:
                break
            i += 1

        i = 0
        while True:
            try:
                attribute = winreg.EnumValue(hKey, i)
                if attribute[0]:
                    value = attribute[1]
                    if type(attribute[1]) == bytes:
                        value = value.hex()
                    inputString = "{0}\\{1}\\{2}".format(
                        REGO_reg.hiveIntToStr(HIVE), PATH, attribute[0])
                    # Get the value of all attribute
                    # HIVE/PATH/Attribute: VALUE
                    self.dumpDict[inputString] = value
            except Exception as e:
                break
            i += 1
        REG.closeHReg(hKey)

        # Recursive Search all keys underneath
        for _ in keyList:
            newPath = PATH
            if PATH != "":
                newPath += "\\"
            newPath += _
            self.DFS_HIVE_SEARCH(REG, HIVE, newPath)
Esempio n. 24
0
def get_file_types():
    keys = {}
    length = winreg.QueryInfoKey(winreg.HKEY_CLASSES_ROOT)[0]
    for i in range(0, length):
        subkey = winreg.EnumKey(winreg.HKEY_CLASSES_ROOT, i)
        if subkey.startswith("."):
            theclass = winreg.CreateKey(winreg.HKEY_CLASSES_ROOT, subkey)
            keys[subkey] = {}
            try:
                keys[subkey]["content-type"] = winreg.QueryValueEx(
                    theclass, "Content Type")[0]
            except Exception as e:
                pass
            try:
                keys[subkey]["perceived-type"] = winreg.QueryValueEx(
                    theclass, "PerceivedType")[0]
            except Exception as e:
                pass
    return keys
Esempio n. 25
0
def _get_install_path():
    import sys
    if sys.version_info > (3, 0):
        import winreg
    else:
        import _winreg as winreg
    with winreg.OpenKey(
            winreg.HKEY_LOCAL_MACHINE,
            'SOFTWARE\\Wow6432Node\\National Instruments\\VeriStand\\'
    ) as vskey:
        r = winreg.QueryInfoKey(vskey)
        ver = '0'
        for k in range(r[0]):
            with winreg.OpenKey(vskey, winreg.EnumKey(vskey, k)) as this_key:
                this_ver = winreg.QueryValueEx(this_key, 'Version')[0]
                if this_ver > ver:
                    latest_dir = winreg.QueryValueEx(this_key, 'InstallDir')[0]
                    ver = this_ver
    return latest_dir if latest_dir is not None else ''
Esempio n. 26
0
def get_first_attached_date(device_class_guid, instance_id):
    """
        Get the first time a USB drive was attached to the system.
        @param device_class_guid: The device guid.
        @param instance_id: Device serial number or instance id.
    """
    path = "SYSTEM\\CurrentControlSet\\Control\\DeviceClasses\\{0}".format(device_class_guid)

    with reg.OpenKeyEx(reg.HKEY_LOCAL_MACHINE, path) as key:
        # Iterate over the registry keys.
        for key_inx in range(reg.QueryInfoKey(key)[0]):
            key_name = reg.EnumKey(key, key_inx)

            if (device_class_guid in key_name) and (instance_id in key_name):
                # Open the device registry key.
                with reg.OpenKeyEx(key, key_name) as device_key:
                    # Store last accessed time.
                    windows_time = reg.QueryInfoKey(device_key)[2]
                    return utils.get_time(windows_time)
Esempio n. 27
0
def findPV():
    'Find Paraview executable in the system. Under Windows (64bit only), this entails searching the registry (see `this post <http://www.paraview.org/pipermail/paraview/2010-August/018645.html>`__); under Linux, look in ``$PATH44 for executable called ``paraview``. Returns ``None`` is Paraview is not found.'
    import sys,operator
    if sys.platform=='win32':
        # oh gee...
        # http://www.paraview.org/pipermail/paraview/2010-August/018645.html
        # - HKEY_CURRENT_USER\SOFTWARE\Wow6432Node\Kitware Inc.\ParaView 3.8.X (64bit machines single user install)
        # - HKEY_CURRENT_USER\SOFTWARE\Kitware Inc.\ParaView 3.8.X (32bit machines single user install)
        # - HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Kitware Inc.\ParaView 3.8.X (64bit machines all users)
        # - HKEY_LOCAL_MACHINE\SOFTWARE\Kitware Inc.\ParaView 3.8.X (32bit machines all users)
        #
        # we don't care about 32 bit, do just 64bit
        import winreg as winreg
        path=r'SOFTWARE\Wow6432Node\Kitware Inc.'
        paraviews=[]
        for reg in (winreg.HKEY_CURRENT_USER,winreg.HKEY_LOCAL_MACHINE):
            aReg=winreg.ConnectRegistry(None,reg)
            try:
                aKey=winreg.OpenKey(aReg,r'SOFTWARE\Wow6432Node\Kitware, Inc.')
            except WindowsError: continue
            for i in range(0,winreg.QueryInfoKey(aKey)[0]):
                keyname=winreg.EnumKey(aKey,i)
                if not keyname.startswith('ParaView '):
                    # print 'no match:',keyname
                    continue
                subKey=winreg.OpenKey(aKey,keyname)
                paraviews.append((keyname,subKey))
        # sort lexically using key name and use the last one (highest version)
        pv=sorted(paraviews,key=operator.itemgetter(1))
        if not pv: return None # raise RuntimeError('ParaView installation not found in registry.')
        pvName,pvKey=pv[-1]
        pvExec=''
        for i in range(0,winreg.QueryInfoKey(pvKey)[1]):
            key,val,T=winreg.EnumValue(pvKey,i)
            if key=='':
                pvExec=val+'/bin/paraview'
                break
        if not pvExec: return None # raise RuntimeError('ParaView installation: found in registry, but default key is missing...?')
        return pvExec
    else:
        # on Linux, find it in $PATH
        import woo.utils
        return woo.utils.find_executable('paraview')
Esempio n. 28
0
def reg_find_value(key, value, root=winreg.HKEY_LOCAL_MACHINE):
    """
    遞迴搜尋機碼下的值, 回傳一組 tuple (所在位置, 數值)
    字串資料採用局部比對, 其餘型態採用完整比對
    """
    i = 0
    handle = winreg.OpenKey(root, key)
    vtype = type(value)

    while True:
        try:
            values = reg_list_value(key)
            for vname in values:
                # 除錯用
                # if key == r'SOFTWARE\Classes\TypeLib\{75AAD71C-8F4F-4F1F-9AEE-3D41A8C9BA5E}\1.0\0\win32':
                #     print(vname, values[vname], value)

                # 型態不同忽略
                if not isinstance(values[vname], vtype):
                    continue

                leaf_node = key + ':' + vname
                if isinstance(value, str):
                    # 字串採用局部比對, 不分大小寫
                    if value.lower() in values[vname].lower():
                        return (leaf_node, values[vname])
                else:
                    # 其餘型態採用完整比對
                    if value == values[vname]:
                        return (leaf_node, values[vname])

            subkey = key + '\\' + winreg.EnumKey(handle, i)
            result = reg_find_value(subkey, value)
            if result[0] != '':
                return result

            i += 1
        except OSError:
            # winreg.EnumKey(handle, i) 的 i 超出範圍
            break

    winreg.CloseKey(handle)
    return ('', '')
 def getVersionedInstallationsFromRrgistry(self):
     versions = []
     registered_services = winreg.OpenKey(winreg.HKEY_CLASSES_ROOT, None)
     key_prefix = "{}.".format(self._default_app_name)
     i = 0
     while True:
         try:
             key = winreg.EnumKey(registered_services, i)
             if key.startswith(key_prefix):
                 try:
                     major_version = key[len(key_prefix):]
                     major_version = int(major_version)
                     versions.append(major_version)
                 except ValueError:
                     pass
             i += 1
         except WindowsError: 
             break
     return versions
Esempio n. 30
0
def get_programUninstallsByFlag(sName, flag):
  info = []
  aReg = winreg.ConnectRegistry(None, winreg.HKEY_LOCAL_MACHINE)
  aKey = winreg.OpenKey(aReg, "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall", 0, winreg.KEY_READ | flag)
  count_subkey = winreg.QueryInfoKey(aKey)[0]

  for i in range(count_subkey):
    try:
      asubkey_name = winreg.EnumKey(aKey, i)
      asubkey = winreg.OpenKey(aKey, asubkey_name)
      progName = winreg.QueryValueEx(asubkey, 'DisplayName')[0]

      if (progName.find(sName) != -1):
        info.append(winreg.QueryValueEx(asubkey, 'UninstallString')[0])

    except:
      pass

  return info