Skip to content

Commit ad4a9b0

Browse files
authored
Create pywinreg.py
Main module
1 parent e969281 commit ad4a9b0

File tree

1 file changed

+70
-0
lines changed

1 file changed

+70
-0
lines changed

Pywinreg/pywinreg.py

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
from winreg import *
2+
3+
class EnumRegistry:
4+
5+
def __init__(self, root, strict=True):
6+
self.SubDir = []
7+
self.strict = strict
8+
self.rootname = root
9+
self.root = __class__.Hives[root]
10+
11+
Hives = { # If you enum a non-existing one it will return an empty list
12+
"HKEY_PERFORMANCE_DATA":HKEY_PERFORMANCE_DATA,
13+
"HKEY_CURRENT_CONFIG" :HKEY_CURRENT_CONFIG,
14+
"HKEY_DYN_DATA" :HKEY_DYN_DATA,
15+
"HKEY_USERS" :HKEY_USERS,
16+
"HKEY_LOCAL_MACHINE" :HKEY_LOCAL_MACHINE,
17+
"HKEY_CURRENT_USER" :HKEY_CURRENT_USER,
18+
"HKEY_CLASSES_ROOT" :HKEY_CLASSES_ROOT
19+
}
20+
reg = None
21+
22+
def __IsSubReg(self,Key): # Please don't poke !!!
23+
try:
24+
registry = OpenKey(self.root, Key, 0, KEY_READ)
25+
EnumKey(registry, 0)
26+
return True
27+
except OSError:
28+
return False
29+
30+
def EnumRegKey(self, KeyName): # I totally forgot how i wrote this amazing shit .-.
31+
count = 0
32+
errora = None
33+
try:
34+
currentn = "\\".join(self.SubDir + [KeyName])
35+
reg = OpenKey(self.root, currentn, 0, KEY_READ)# OPen registry
36+
yield currentn
37+
while 1:
38+
name = EnumKey(reg, count)
39+
count += 1
40+
if self.__IsSubReg("\\".join(self.SubDir + [KeyName,name])):
41+
self.SubDir.append(KeyName)
42+
data_registry = self.EnumRegKey(name)
43+
for i in data_registry:
44+
yield i
45+
else:
46+
yield "\\".join(self.SubDir + [KeyName, name])
47+
except OSError as error: # Either permission or it's out of thing to loop\
48+
if (isinstance(error, PermissionError) and self.strict) or isinstance(error, FileNotFoundError):
49+
errora = error
50+
else:
51+
self.SubDir.pop() if self.SubDir else None
52+
if errora:
53+
raise type(errora)(errora)
54+
55+
def EnumRootKey(self):
56+
int_key = 0
57+
_return_root = []
58+
erroraise = False
59+
try:
60+
while 1:
61+
reg = EnumKey(self.root,int_key)
62+
for i in self.EnumRegKey(reg):
63+
yield i
64+
int_key += 1
65+
self.SubDir=[]
66+
except OSError as error:
67+
if isinstance(error, PermissionError) or "reg" not in locals():
68+
erroraise = error
69+
if erroraise:
70+
raise type(erroraise)(erroraise)

0 commit comments

Comments
 (0)