Windowsのレジストリから不正なキー名候補を検索するコードです。"\uFEFF"
のeast asian widthが"N"
(unicodedata.east_asian_width("\uFEFF") == "N"
)だったので、このような文字を含むキー名をすべて取り出してくるコードです。出力後にレジストリを目視で確認して整理することを目的としています。
Microsoft Payとやらのよく分からないキーがヒットしたのは見なかったことにしています。
import unicodedata
import winreg
from pprint import pp
def str_has_east_asian_width_N(s):
return any((unicodedata.east_asian_width(c) == "N" for c in s))
def get_winreg_invalid_candidates(key, path, candidates=[]):
for i in range(0xffffffff):
try:
name = winreg.EnumKey(key, i)
except OSError:
break
if str_has_east_asian_width_N(name):
candidates.append([name, path])
try:
get_winreg_invalid_candidates(
winreg.OpenKey(key, name),
path + "\\" + name,
candidates)
except FileNotFoundError:
pass
except PermissionError:
pass
return candidates
invalid_candidates = []
invalid_candidates.extend(get_winreg_invalid_candidates(
winreg.HKEY_CURRENT_USER, "HKEY_CURRENT_USER"))
invalid_candidates.extend(get_winreg_invalid_candidates(
winreg.HKEY_LOCAL_MACHINE, "HKEY_LOCAL_MACHINE"))
invalid_candidates.extend(get_winreg_invalid_candidates(
winreg.HKEY_USERS, "HKEY_USERS"))
invalid_candidates.extend(get_winreg_invalid_candidates(
winreg.HKEY_CURRENT_CONFIG, "HKEY_CURRENT_CONFIG"))
pp(invalid_candidates)