示例#1
0
 def get_autoruns():
     # 1. 连接注册表根键
     root1 = winreg.ConnectRegistry(None, winreg.HKEY_LOCAL_MACHINE)
     root2 = winreg.ConnectRegistry(None, winreg.HKEY_CURRENT_USER)
     result = {}
     try:
         # 2. 指定想要访问的子健
         reg_path = r"SOFTWARE\Microsoft\Windows\CurrentVersion\Run"
         # 3. 打开相应子健
         key1 = winreg.OpenKey(root1, reg_path)  # 打开localmachine的autorun列表
         key2 = winreg.OpenKey(root2, reg_path)  # 打开currentuser的autorun列表
         try:
             count = 0
             while 1:
                 try:
                     # 4. 通过winreg对象的EnumValue()方法迭代其中的键值
                     n, v, t = winreg.EnumValue(key1, count)
                     result[n] = v
                     count += 1
                 except EnvironmentError:
                     break
             count = 0
             while (1):
                 try:
                     n, v, t = winreg.EnumValue(key2, count)
                     result[n] = v
                     count += 1
                 except EnvironmentError:
                     break
         finally:
             # 5. 关闭相应子健
             winreg.CloseKey(key1)
             winreg.CloseKey(key2)
     finally:
         # 6. 关闭相应根键连接
         winreg.CloseKey(root1)
         winreg.CloseKey(root2)
     return json.dumps(result)
示例#2
0
def get_valid_ue4_paths():
    ue4_paths = []
    build_key_name = r"Software\Epic Games\Unreal Engine\Builds"
    build_key = winreg.OpenKey(winreg.HKEY_CURRENT_USER, build_key_name)
    i = 0
    try:
        while True:
            _, value, _ = winreg.EnumValue(build_key, i)
            version_info = {"RootPath": value, "OfficialBuild": False}
            if is_valid_root_dir(value, version_info):
                ue4_paths.append(version_info)
            i += 1
    except WindowsError:
        pass
    winreg.CloseKey(build_key)

    installed_key_name = r"SOFTWARE\EpicGames\Unreal Engine"
    installed_key = winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE,
                                   installed_key_name)
    i = 0
    try:
        while True:
            version_name = winreg.EnumKey(installed_key, i)
            version_key_name = r"%s\%s" % (installed_key_name, version_name)
            version_key = winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE,
                                         version_key_name)
            _, value, _ = winreg.EnumValue(version_key, 0)
            version_info = {
                "RootPath": value.replace("\\", "/"),
                "OfficialBuild": True
            }
            if is_valid_root_dir(value, version_info):
                ue4_paths.append(version_info)
            i += 1
    except WindowsError:
        pass
    winreg.CloseKey(installed_key)
    return ue4_paths
示例#3
0
    def find_jdk(self):
        """Find the JDK under Windows"""

        jdk_home = os.environ.get("JDK_HOME")
        if jdk_home is not None:
            return jdk_home

        node = r"SOFTWARE"
        # Registry keys changed in Java 9
        # https://docs.oracle.com/javase/9/migrate/toc.htm#GUID-EEED398E-AE37-4D12-AB10-49F82F720027
        jdk_key_paths = (node + r"\JavaSoft\JDK",
                         node + r"\JavaSoft\Java Development Kit")
        hkey = winreg.HKEY_LOCAL_MACHINE

        for key_path in jdk_key_paths:
            try:
                java_key = winreg.OpenKey(hkey, key_path)
                java_key_values = dict([
                    winreg.EnumValue(java_key, i)[:2]
                    for i in range(winreg.QueryInfoKey(java_key)[1])
                ])
                version = java_key_values["CurrentVersion"]
                version_key = r"{}\{}".format(key_path, version)
                version = winreg.OpenKey(hkey, version_key)
                version_values = dict([
                    winreg.EnumValue(version, i)[:2]
                    for i in range(winreg.QueryInfoKey(version)[1])
                ])
                jdk_home = version_values["JavaHome"]
                return jdk_home
            except WindowsError as exc:
                import errno
                if exc.errno != errno.ENOENT:
                    raise exc
        else:
            raise RuntimeError(
                "Failed to find the Java Development Kit. "
                "Please download and install the Oracle JDK 1.7 or later")
示例#4
0
def reg5():
    access_reg = winreg.ConnectRegistry(None, winreg.HKEY_LOCAL_MACHINE)

    regkey = winreg.OpenKey(
        access_reg,
        r"SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform"
    )

    for n in range(20):
        try:
            x = winreg.EnumValue(regkey, n)
            print(x)
        except:
            break
示例#5
0
文件: device.py 项目: qvant/cube
    def _discover_windows(self):
        import winreg as winreg
        path = r'HARDWARE\DEVICEMAP\SERIALCOMM'
        try:
            key = winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, path)
        except WindowsError:
            return

        for i in itertools.count():
            try:
                val = winreg.EnumValue(key, i)
                yield str(val[1])
            except EnvironmentError:
                break
示例#6
0
def read_value(winreg_hkey, location):
    key = winreg.OpenKey(getattr(winreg, winreg_hkey), location)
    values = []
    i = 0
    while True:
        try:
            # 获取注册表对应位置的键和值
            values.append(winreg.EnumValue(key, i))
            i += 1
        except Exception:
            # 一定要关闭这个键
            winreg.CloseKey(key)
            break
    return values
示例#7
0
文件: utils.py 项目: jayvdb/env-tool
def emptyUserEnvReg():
    """.. danger:: 清空当前用户的环境变量注册表项!

    使用了全局变量 ``gUSER_ENV_REG_KEY``
    """
    with winreg.OpenKeyEx(*gUSER_ENV_REG_KEY, 0, winreg.KEY_SET_VALUE) as key:
        _ = 0
        while True:
            try:
                name, value, type_ = winreg.EnumValue(key, _)
                winreg.DeleteValue(key, "")
                _ += 1
            except OSError:
                break
示例#8
0
文件: utils.py 项目: jayvdb/env-tool
 def readReg(self):
     """
     读取注册表项目
     """
     with winreg.OpenKeyEx(self.key, self.name, 0, winreg.KEY_READ) as key:
         _ = 0
         while True:
             try:
                 reg_value = RegValue(*winreg.EnumValue(key, _)).wrap()
                 self.updateValue(reg_value)
                 # EnumValue 返回 元组 (reg_name, reg_value, reg_type)
                 _ += 1
             except OSError:
                 break
示例#9
0
文件: get_live.py 项目: naaya17/carpe
def GetRegValues(_regKey):
    reg_value_list = []

    loop = 0
    while True:
        try:
            (regValue, regData, regType) = winreg.EnumValue(_regKey, loop)
            reg_value = {"value_name": regValue, "value_data": regData}
            reg_value_list.append(reg_value)

        except Exception as e:
            break
        loop += 1
    return reg_value_list
示例#10
0
 def check_reg(self):
     try:
         reg_hkey = winreg.HKEY_CURRENT_USER
         key = winreg.OpenKey(reg_hkey, r'Software\Microsoft\Windows\CurrentVersion\Run', 0, winreg.KEY_READ)
         index = 0
         while True:
             v = winreg.EnumValue(key, index)
             if 'Keylogger' not in v: # And this to what you have changed above
                 index += 1
                 continue
             return True
     except:
         winreg.CloseKey(key)
         self.add_reg()
示例#11
0
def GetValues(handle, regex):
    index = 0
    values = {}
    while True:
        try:
            value = wreg.EnumValue(handle, index)
            name = value[0]
            if regex.search(name):
                assert( name not in list(values.keys()) )
                values[name] = value[1]
        except:
            break
        index += 1
    return values
 def get_device(enum_key):
     number_of_values = winreg.QueryInfoKey(enum_key)[1]
     for i in range(number_of_values):
         value_name, value_data, _ = winreg.EnumValue(enum_key, i)
         if value_name.isdigit():  # device 0, 1, 2...
             m = regex.match(value_data)
             if m:
                 id_parts = value_data.split(
                     '\\'
                 )  # ['USB', 'VID_XXXX&PID_XXXX', 'SERIAL_NUMBER']
                 vid, board_id = m.groups()
                 if vid == cls.VENDOR_IDS[Vendor.Segger]:
                     board_id = board_id.lstrip('0')
                 yield board_id, UsbId(id_parts[1], id_parts[2])
示例#13
0
    def _collect(self, fontname=None):
        """Collect the informations of keys
        Args:
            fontname: If specified, then the target is limited according to it.
        """
        keynames = [
            (
                winreg.HKEY_CURRENT_USER,
                r"Software\Microsoft\Windows NT\CurrentVersion\Fonts",
            ),
            (
                winreg.HKEY_CURRENT_USER,
                r"Software\Microsoft\Windows\CurrentVersion\Fonts",
            ),
            (
                winreg.HKEY_LOCAL_MACHINE,
                r"Software\Microsoft\Windows NT\CurrentVersion\Fonts",
            ),
            (
                winreg.HKEY_LOCAL_MACHINE,
                r"Software\Microsoft\Windows\CurrentVersion\Fonts",
            ),
        ]
        ttf_files = []
        ttf_values = []
        ttc_files = []
        ttc_values = []

        for keyname in keynames:
            try:
                key = winreg.OpenKey(*keyname)
            except FileNotFoundError:
                continue
            _, n_value, _ = winreg.QueryInfoKey(key)
            for v_index in range(n_value):
                value_name, file_name, _ = winreg.EnumValue(key, v_index)
                if fontname:
                    if value_name.find(fontname) == -1:
                        continue
                file_type = Path(file_name).suffix.lower()
                if file_type == ".ttf":
                    ttf_files.append(file_name)
                    ttf_values.append(value_name)
                elif file_type == ".ttc":
                    ttc_files.append(file_name)
                    ttc_values.append(value_name)
                else:
                    continue
            winreg.CloseKey(key)
        return ttf_files, ttf_values, ttc_files, ttc_values
示例#14
0
def _win32RegistryFonts(reg_domain, base_dir):
    r"""
    Search for fonts in the Windows registry.

    Parameters
    ----------
    reg_domain : int
        The top level registry domain (e.g. HKEY_LOCAL_MACHINE).

    base_dir : str
        The path to the folder where the font files are usually located (e.g.
        C:\Windows\Fonts). If only the filename of the font is stored in the
        registry, the absolute path is built relative to this base directory.

    Returns
    -------
    `set`
        `pathlib.Path` objects with the absolute path to the font files found.

    """
    import winreg
    items = set()

    for reg_path in MSFontDirectories:
        try:
            with winreg.OpenKey(reg_domain, reg_path) as local:
                for j in range(winreg.QueryInfoKey(local)[1]):
                    # value may contain the filename of the font or its
                    # absolute path.
                    key, value, tp = winreg.EnumValue(local, j)
                    if not isinstance(value, str):
                        continue

                    # Work around for https://bugs.python.org/issue25778, which
                    # is fixed in Py>=3.6.1.
                    value = value.split("\0", 1)[0]

                    try:
                        # If value contains already an absolute path, then it
                        # is not changed further.
                        path = Path(base_dir, value).resolve()
                    except RuntimeError:
                        # Don't fail with invalid entries.
                        continue

                    items.add(path)
        except (OSError, MemoryError):
            continue

    return items
示例#15
0
def regsetval(src,valname,val):
    try:
        if src[1] != '':
            Key = winreg.OpenKey(src[0], src[1] + '\\' + src[2], 0, winreg.KEY_ALL_ACCESS)
        else:
            Key = winreg.OpenKey(src[0], src[2], 0, winreg.KEY_ALL_ACCESS)
        print(Key)
        size = winreg.QueryInfoKey(Key)[1]
        for i in range(size):
            valoare = winreg.EnumValue(Key, i)
            if valoare[0] == valname:
                winreg.SetValueEx(Key,valname,0,winreg.REG_SZ,val)
    except Exception as e:
        print("Could not set the Value of the key")
示例#16
0
def registry_check(registry_key_loc, G14dir):
    G14exe = "G14Control.exe"
    G14dir = str(G14dir)
    G14fileloc = os.path.join(G14dir, G14exe)
    G14Key = winreg.OpenKey(winreg.HKEY_CURRENT_USER, registry_key_loc)
    try:
        i = 0
        while 1:
            name, value, enumtype = winreg.EnumValue(G14Key, i)
            if name == "G14Control" and value == G14fileloc:
                return True
            i += 1
    except WindowsError:
        return False
示例#17
0
def registerBatFile(ext, bat, name):
    import winreg as wr
    ext_key = wr.CreateKey(wr.HKEY_CLASSES_ROOT, '.' + ext)
    try:
        auto_file = wr.EnumValue(ext_key, 0)[1]
    except:
        auto_file = ext + '_auto_file'
        wr.SetValue(ext_key, '', wr.REG_SZ, auto_file)

    key = wr.CreateKey(wr.HKEY_CLASSES_ROOT, auto_file)
    key = wr.CreateKey(key, 'shell')
    key = wr.CreateKey(key, name)
    key = wr.CreateKey(key, 'command')
    wr.SetValue(key, '', wr.REG_SZ, '"' + bat + '" "%1"')
示例#18
0
    def init_ui(self):
        QLabel("Select an installation directory:", self).move(25, 25)
        self.directory = QLineEdit(self)
        self.directory.move(25, 55)
        self.directory.resize(600, 30)
        self.directory.setText("C:/Program Files/Age of the Ring")

        self.pick_directory_btn = QPushButton("...", self)
        self.pick_directory_btn.resize(25, 25)
        self.pick_directory_btn.move(635, 60)
        self.pick_directory_btn.clicked.connect(self.pick_directory)

        self.install_btn = QPushButton("Install", self)
        self.install_btn.resize(250, 100)
        self.install_btn.move(225, 100)
        self.install_btn.clicked.connect(self.installer)
        self.install_btn.setToolTip(
            "Select an installation directory to unlock the button")

        self.progress_bar = QProgressBar(self)
        self.progress_bar.move(50, 150)
        self.progress_bar.resize(600, 25)
        self.progress_bar.hide()

        self.setFixedSize(700, 250)
        self.setWindowTitle('Age of the Ring Installer')

        self.show()
        self.path_rotwk = "GAME NOT FOUND"

        try:
            # reg = winreg.ConnectRegistry(None, winreg.HKEY_LOCAL_MACHINE)
            # key = winreg.OpenKey(reg, "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\App Paths\\lotrbfme2.exe")
            # self.path_bfme2 = winreg.EnumValue(key, 5)[1]

            reg = winreg.ConnectRegistry(None, winreg.HKEY_LOCAL_MACHINE)
            key = winreg.OpenKey(
                reg,
                "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\App Paths\\lotrbfme2ep1.exe"
            )
            self.path_rotwk = winreg.EnumValue(key, 5)[1]

            #in case the user has installed a weird version of ROTWK
            if os.path.isfile(self.path_rotwk):
                self.path_rotwk = os.path.dirname(self.path_rotwk)
        except FileNotFoundError:
            QMessageBox.critical(
                self, "Error",
                "Could not detect Rise of the Witch King. The installation will proceed but you may be unable to launch the game.",
                QMessageBox.Ok, QMessageBox.Ok)
示例#19
0
def detect_serial_path():
    try:
        path = r'HARDWARE\DEVICEMAP\SERIALCOMM'
        with winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, path) as key:
            for i in range(winreg.QueryInfoKey(key)[1]):
                name, value, value_type = winreg.EnumValue(key, i)
                # match both \Device\LGANDNETDIAG1 and \Device\LGVZANDNETDIAG1
                name = name.upper()
                if name.startswith(r'\DEVICE\LG') and name.endswith(
                        'ANDNETDIAG1'):
                    return value
    except OSError:
        pass
    return None
示例#20
0
def has_sound(sound):
    """Find out if a particular event is configured with a default sound"""
    try:
        # Ask the mixer API for the number of devices it knows about.
        # When there are no devices, PlaySound will fail.
        if ctypes.windll.winmm.mixerGetNumDevs() == 0:
            return False

        key = winreg.OpenKeyEx(
            winreg.HKEY_CURRENT_USER,
            "AppEvents\Schemes\Apps\.Default\{0}\.Default".format(sound))
        return winreg.EnumValue(key, 0)[1] != ""
    except OSError:
        return False
def check_registry_entry_for_osu():
    import winreg
    reg_table = winreg.ConnectRegistry(None, winreg.HKEY_CLASSES_ROOT)

    try:
        with winreg.OpenKey(reg_table, r'osu\shell\open\command', 0, winreg.KEY_READ) as handle:
            _, osu_exe_path, _ = winreg.EnumValue(handle, 0)

        osu_exe_path = osu_exe_path.split(" ")[0].strip('"')
        osu_path = os.path.split(osu_exe_path)[0]
    except:
        osu_path = None

    return osu_path
 def check_reg(self):
     try:
         reg_hkey = winreg.HKEY_CURRENT_USER
         key = winreg.OpenKey(reg_hkey, r'Software\Microsoft\Windows\CurrentVersion\Run', 0, winreg.KEY_READ)
         index = 0
         while True:
             v = winreg.EnumValue(key, index)
             if 'revShell_server' not in v:
                 index+=1
                 continue
             return True
     except:
         winreg.CloseKey(key)
         self.add_reg()
示例#23
0
def get_registry_key(key_path):
    '''
    This function gets registry key values from a given entry
    '''
    key = winreg.OpenKey(winreg.HKEY_CURRENT_USER, key_path)
    i = 0
    registry_keys = []
    while True:
        try:
            registry_keys.append(winreg.EnumValue(key, i))
            i += 1
        except:
            break
    return registry_keys
示例#24
0
def enumerate_key(key_hive, key_path, access_type=Wow64RegistryEntry.KEY_WOW64):
    """
    :param key_hive: Windows registry hive to edit, e.g. HKEY_CURRENT_USER
    :param key_path: Path Windows registry key inside the hive, for example "SOFTWARE\Microsoft\Windows"
    :param access_type: Access type for 32/64 bit registry sub-entries in HKLM/SOFTWARE key.
    :return: List of registry values
    """
    key_hive_value = HIVES_MAP[key_hive]
    wow64_flags = WOW64_MAP[access_type]
    registry_key = winreg.OpenKey(key_hive_value, key_path, 0, (wow64_flags | winreg.KEY_READ))
    result = []
    for i in range(0, winreg.QueryInfoKey(registry_key)[1]):
        result.append(winreg.EnumValue(registry_key, i)[0])
    return result
示例#25
0
def enumerate_serial_ports():

    path = 'HARDWARE\\DEVICEMAP\\SERIALCOMM'
    try:
        key = winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, path)
    except WindowsError:
        raise Exception

    for i in itertools.count():
        try:
            val = winreg.EnumValue(key, i)
            yield (str(val[1]))  # , str(val[0]))
        except EnvironmentError:
            break
示例#26
0
def pull_run_mru():
    try:
        # open the registry
        registry = winreg.ConnectRegistry(None, winreg.HKEY_CURRENT_USER)
        # open the OpenSavePidlMRU key
        key = winreg.OpenKey(registry, lastVisitedMRUpath)
        returnStr = "***Run Command History***\n"

        # Iterate through all subkeys of OpenSavePidlMRU
        for i in range(0, winreg.QueryInfoKey(key)[1]):
            returnStr += (winreg.EnumValue(key, i)[1] + '\n')
        return returnStr
    except Exception as e:
        print(e)
示例#27
0
def _find_visual_studio_2010_to_2015(vs_version):
    """Adapted from https://github.com/python/cpython/blob/3.5/Lib/distutils/_msvccompiler.py

    The ``vs_version`` corresponds to the `Visual Studio` version to lookup.
    See :data:`VS_YEAR_TO_VERSION`.

    Return Visual Studio installation path found by looking up all key/value pairs
    associated with the ``Software\\Microsoft\\VisualStudio\\SxS\\VC7`` registry key.
    If no install is found, returns an empty string.

    Each key/value pair is the visual studio version (e.g `14.0`) and the installation
    path (e.g `C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/`).
    """
    # winreg module
    try:
        import winreg
    except ImportError:
        # Support Python 2.7
        try:
            import _winreg as winreg
        except ImportError:
            return ""

    # get registry key associated with Visual Studio installations
    try:
        key = winreg.OpenKey(
            winreg.HKEY_LOCAL_MACHINE,
            r"Software\Microsoft\VisualStudio\SxS\VC7",
            0,
            winreg.KEY_READ | winreg.KEY_WOW64_32KEY
        )
    except OSError:
        return ""

    with key:
        for i in count():
            try:
                v, vc_dir, vt = winreg.EnumValue(key, i)
            except OSError:
                break
            # winreg.REG_SZ means "A null-terminated string"
            if v and vt == winreg.REG_SZ and os.path.isdir(vc_dir):
                try:
                    version = int(float(v))
                except (ValueError, TypeError):
                    continue
                if version == vs_version:
                    return vc_dir
    return ""
def userAssistParser(limit):
    access_registry = winreg.ConnectRegistry(None, winreg.HKEY_CURRENT_USER)
    path = r"Software\Microsoft\Windows\CurrentVersion\Explorer\UserAssist"
    paths = []
    listA = ["Focus Count", "Time Focused", "Last updated", "Name:REG_Binary"]

    access_key = winreg.OpenKey(access_registry, path)
    for i in range(10):  # 100 is just a number that can't be reached
        try:
            guid = winreg.EnumKey(access_key, i)
            #print(guid)
            temp = path + "\\" + str(guid) + "\Count"

            #paths.append(temp)
            #print("============")
            subkey = winreg.OpenKey(access_registry, temp)
            # now print the value name  :
            # querry info about the key
            info = winreg.QueryInfoKey(subkey)
            # (number of subkeys, number of values , last second)

            num_values = info[1]

            if num_values > 1:
                print("========= NEW GUID", i)
                print('metadata:\n')
                time = datetime(1601, 1,
                                1) + timedelta(seconds=info[2] / 10**7)
                print("\nThe key was last updated", time)
                print("Total number of values for this GUID ", num_values)
                print("GUID ", guid)

                if limit > num_values:

                    limit = num_values
                    print("limit", limit)
                for j in range(num_values - limit, num_values):
                    keyname = winreg.EnumValue(subkey, j)[0]
                    #print("=====START\n\n")
                    if keyname:
                        print("\nGUI executable : " + str(j),
                              codecs.encode(keyname, 'rot_13'))

                    #print(winreg.EnumValue(subkey,j)[2:])
                    #print("======END\n\n")
                print("\n\n")

        except:
            pass
示例#29
0
def win32InstalledFonts(directory=None, fontext='ttf'):
    """Search for fonts in the specified font directory, or use the
system directories if none given.  A list of TrueType fonts are
returned by default with AFM fonts as an option.
"""

    if directory is None:
        directory = win32FontDirectory()

    imported = False
    try:
        import winreg as wreg
        imported = True
    except ImportError:
        pass
    if not imported:
        try:
            import _winreg as wreg
            imported = True
        except ImportError:
            raise ImportError("Cannot find winreg module")

    key, items = None, {}
    for fontdir in MSFontDirectories:
        try:
            local = wreg.OpenKey(wreg.HKEY_LOCAL_MACHINE, fontdir)
        except OSError:
            continue

        if not local:
            return glob.glob(os.path.join(directory, '*.'+fontext))
        try:
            for j in range(wreg.QueryInfoKey(local)[1]):
                try:
                    key, direc, any = wreg.EnumValue( local, j)
                    if not os.path.dirname(direc):
                        direc = os.path.join(directory, direc)
                    direc = os.path.abspath(direc).lower()
                    if direc[-4:] == '.'+fontext:
                        items[direc] = 1
                except EnvironmentError:
                    continue
                except WindowsError:
                    continue

            return list(items.keys())
        finally:
            wreg.CloseKey(local)
    return None
示例#30
0
            def get_installed_packages_for_keypath(keypath):
                key = winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, keypath, 0,
                                     winreg.KEY_READ)

                packages = []

                i = 0

                while True:
                    try:
                        subkey_str = winreg.EnumKey(key, i)
                        i += 1
                        subkey = winreg.OpenKey(
                            winreg.HKEY_LOCAL_MACHINE,
                            keypath + "\\" + subkey_str, 0,
                            winreg.KEY_READ | winreg.KEY_WOW64_64KEY)
                        # print subkey_str

                        j = 0

                        package = rpmlist_command.Package()
                        while True:
                            try:
                                subvalue = winreg.EnumValue(subkey, j)
                                j += 1

                                _val, _data, _type = subvalue

                                _data = str(_data).split("\\u0000")[0]

                                if _val == "DisplayName":
                                    package.displayName = _data
                                elif _val == "DisplayVersion":
                                    package.displayVersion = _data
                                elif _val == "EstimatedSize":
                                    package.estimatedSize = _data
                                elif _val == "InstallDate":
                                    package.installDate = _data

                            except WindowsError as e:
                                break

                        if package.displayName != "Unknown":
                            packages.append(package)

                    except WindowsError as e:
                        break

                return packages