Window注册表的学习记录

注册表的结构:

概述:注册表是一种树状结构,在很早之前是系统的其他配置信息存放的文件,通常以.ini结尾的文件,因为数量太多不方便管理,后来就整合在一起形成了注册表。你可以按住键盘win+r,然后输入regedit,回车之后打开自己电脑中自带的注册表。如果没有打开,请跳到文章最后,有解决方法。

可以看到如下内容:

 

 根键:以“HEKY_"开头,通常情况下有5大主键,分别如下:

HKEY_CLASSES_ROOT

HKEY_CURRENT_USER

HKEY_LOCAL_MACHINE

HKEY_USERS

HKEY_CURRENT_CONFIG

子键:任一键的子目录都叫做子键,子键是相对来说的

键值:包含键值名,键值类型,数据。是真正存放了计算机及应用程序的配置信息的地方,位于树状结构的叶子节点。键值类型有如下几种:

REG_DWORD       DWORD值

REG_BINARY       二进制值

REG_SZ             字符串

REG_MULTI_SZ      多字符串

REG_EXOEND_SZ      可扩展字符串

注册表文件存储位置:

注册表以文件的形式分别存储在:WINDOWS/system32/config文件夹下的”DEFAULT“,”SAM”,“SECURITY",”SOFTWARE",“SYSTEM"五个文件中

五大根建详解:

1.HKEY_CLASSES_ROOT

存放windows中所有数据文件的信息,主要存储不同文件后缀和应用程序间的映射关系,使用户在双击打开文件时,可以找到正确的应用程序。简单来说,就是为了确保我们认知中后缀名内涵的正确性,例如,我们有一个.mp4后缀的文件,我们知道是视频文件,所以电脑就应该以”视频“的形式打开,而不是文本的形式。此外,该根建中的内容与HKEY_LOCAL_MACHINE\Software\Classes中的内容相同

2.HKEY_CURRENT_USER

存储了有关当前登录用户的配置信息。例如,当前用户的键盘,鼠标,声音,显示等的配置信息。比较重要的子键如下:

Software:包含所有已安装软件的信息

Control Panel:用于保存某些Control Panel小应用程序的配置信息,例如附件,外观,鼠标,键盘等设置

3.HKEY_LOCAL_MACHINE

存放控制系统和软件的设置(针对所有登录到该系统的用户),比较重要的子键如下:

HARDWARE:包含系统当前使用的各种硬件信息

SAM:包含所有用户的自定义信息

SECURITY:包含安全设置信息,包括存入缓存的登录,策略,特殊支持账户等

SOFTWARE:包含所有组件和软件的信息,如各个软件被执行时的初始状态以及上次退出时的状态

SYSTEM:包括系统的定义,移动设备以及系统设置等配置信息

4.HKEY_USERS

包含了所有用户的配置文件,每个用户在这里都有独立的配置文件

5.HKEY_CURRENT_CONFIG

包含了系统在启动时需要的硬件的配置信息

使用代码调用windows的api去操作注册表

from winreg import *
def printNets():
    net = "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\NetworkList\\Signatures\\Unmanaged"
    key = OpenKey(HKEY_LOCAL_MACHINE, net)   #打开该目录,返回所有句柄
    print('test:')
    count = 0
    while True:
        try:
            guid = EnumKey(key, count)     #枚举每个句柄,返回该句柄的键
            netKey = OpenKey(key, str(guid))
            # 枚举打开注册表项的值,并返回一个元组,第一个参数为键,第二个参数为索引
            (n, addr, t) = EnumValue(netKey, 5)    #获取DefaultGatewayMac的数据,即获取该wifi的mac地址,返回为十六进制
            (n, name, t) = EnumValue(netKey, 4)    #获取FirstNetwork的数据,即获取wifi的名称
            #判断是否有mac地址
            if addr:
                macAddr = val2addr(addr)
            else:
                macAddr = 'None'
            netName = str(name)
            print('[+]' + netName + ' ' + macAddr)
            CloseKey(netKey)     #获取一个句柄内容后,关闭句柄
            count += 1
        except OSError:       #如果没有可迭代的内容就结束循环
            break
#对句柄下的mac地址数据,以常见的形式返回
def val2addr(val):
    addr = ""
    #print(val.hex())
    n = 0
    for i in val.hex():
        addr += '{}'.format(i)
        n += 1
        if n%2 == 0:
            addr += ':'
    return addr.rstrip(':')

def main():
    printNets()

if __name__ == "__main__":
    main()

上述代码作用:获取使用该电脑连接过的所有wifi的mac地址

解决调用系统api库权限不够报错问题:

报错问题:PermissionError: [WinError 5] 拒绝访问。

解决方法:如果使用pycharm执行脚本的话,在打开pycharm时使用管理员方式打开,如何操作?选中pycharm,单击右键就可以看到有”以管理的方式打开pycharm“

此外,你也可以通过dos命令窗口执行脚本,同样使用管理的方式打开dos命令窗口。

解决使用regedit命令找不到注册表问题:

被禁用了,按照如下方式来查看是否是被禁用了,以及如何修改。

1.按快捷键win+r,打开运行对话框。
2.输入gpedit.msc,然后点击确定,打开组策略管理。
3.在面板中找到用户配置下的管理模板,双击打开。在界面的右侧找到系统,双击打开。
4.在系统中找到阻止访问注册表编辑工具,双击打开。
5.弹出的编辑器中,我们选择未配置,这样就关闭了禁用,然后重试一下即可打开注册表。
6.点击确定即可完成设置。按快捷键win+r,看看是否已经解决了问题。如果打开了注册表,说明问题解决。

解决使用gpedit.msc命令打不开组策略管理问题

1.新建一个txt文件,把以下内容写到里面,然后关闭文件,修改文件名后缀为.cmd

@echo off

pushd "%~dp0"

dir /b C:\Windows\servicing\Packages\Microsoft-Windows-GroupPolicy-ClientExtensions-Package~3*.mum >List.txt

dir /b C:\Windows\servicing\Packages\Microsoft-Windows-GroupPolicy-ClientTools-Package~3*.mum >>List.txt

for /f %%i in ('findstr /i . List.txt 2^>nul') do dism /online /norestart /add-package:"C:\Windows\servicing\Packages\%%i"

pause

2.右键单击文件,以管理员身份运行,等待几秒就成功了。

3.验证成功,使用win+r,输入gpedit.msc确认后打开了组策略管理就说明成功

windows下显示文件名后缀:

打开任意一个文件夹,单击上方查看,勾选文件扩展名即可。

 

 相关外链:

学习winreg库地址:winreg -Windows注册表访问权限 - Python 3.10 简体中文 - 多语言手册 - OULUB

 

posted @ 2022-08-10 00:54  nLesxw  阅读(166)  评论(0编辑  收藏  举报