Win32注册表操作
注册表的概念
注册表是一个存储计算机配置信息的数据库,用于存储计算机上的硬件、安装的软件、系统设置以及用户账户配置等重要信息。对注册表的编辑不当可能会影响计算机的正常运行。应用程序可以调用API函数来对注册表进行增、删等操作。
注册表结构
运行Regedit.exe,打开注册表编辑器,可以看到注册表的结构如下:

注册表是一个分层数据库,其中包含对于Windows以及Windows上运行的应用程序和服务的运行至关重要的数据。注册表是树型结构。树中的每个节点都称为键。每个键都可以包含子键和值。
注册表是按照“根键” -> "子键" -> "键值"层次结构来组织的。
注册表包含五大根键
"HKEY_CLASSES_ROOT" : 包含各种文件类型关联数据的信息
"HKEY_CURRENT_USER": 包含当前登录计算机的用户账户的用户配置文件信息,例如桌面个性化、输入法设置、网络连接以及打印机首选项等
"HKEY_LOCAL_MACHINE":包含一些当前计算机的系统配置信息,例如系统内存、设备程序等
"HKEY_USERS" :包含默认用户的配置文件信息以及动态加载的用户配置文件信息
"HKEY_CURRENT_CONFIG":包含在计算机启动时系统所使用的硬件配置文件信息,用于配置一些计算机相关设置。例如加载设备的驱动程序、计算机使用的分辨率等
打开和关闭注册表
RegOpenKeyEx
打开注册表
LSTATUS RegOpenKeyExA(HKEY hKey,LPCSTR lpSubKey,DWORD ulOptions,REGSAM samDesired,PHKEY phkResult );
hKey: 指向一个父键句柄
lpSubKey:指向一个字符串,用来表示要打开的子键名称
ulOptions:系统保留,必须指定为0
samDesired:打印注册表的存取权限,通过使用KEY_ALL_ACCESS表示全部权限
phkResult:接收打开的子键句柄
如果函数执行成功,则返回ERROR_SUCCESS,并且在phkResult中保存返回打开子键的句柄
RegCloseKey
关闭已打开的注册表句柄
1 LSTATUS RegCloseKey( 2 HKEY hKey 3 );
hKey:要关闭的键句柄,即RegOpenKeyEx的phkResult值
创建和删除子键
RegCreateKeyEx
创建一个子键
LSTATUS RegCreateKeyExA(HKEY hKey,LPCSTR lpSubKey,DWORD Reserved,LPSTR lpClass,DWORD dwOptions,REGSAM samDesired,const LPSECURITY_ATTRIBUTES lpSecurityAttributes,PHKEY phkResult,LPDWORD lpdwDisposition );
hKey: 用来指向父键句柄
lpSubKey: 指向一个字符串,用来表示要创建的子键名称
ReServed:系统保留,必须指定为0值
lpClass:子键类名,一般设置为NULL值
dwOptions:创建子键时的选项,通常情况下使用REG_OPTION_NON_VOLATILE宏,表示创建的子键被创建到注册表文件中,而不是内存中
samDesired:打开注册表的存取权限,通常使用KEY_ALL_ACCESS。
lpSecurityAttributes:该参数指向一个SECURITY_ATTRIBUTE结构体,用来指定键句柄的安全属性,一般使用NULL
phkResult:指向用来接收打开的句柄
lpdwDisposition:指向DWORD的指针,该变量接收以下值:
| REG_CREATED_NEW_KEY 0x00000001L | 键不存在且已创建。 |
| REG_OPENED_EXISTING_KEY 0x00000002L | 键存在并且仅需打开即可更改。 |
如果lpdwDisposition为NULL,则不返回任何处置信息。
如果函数执行成功,则返回ERROR_SUCCESS,并且在phkResult中保存返回创建子键的句柄。当需要创建的子键已经存在,该函数和RegOpenKeyEx起到同样的作用。
RegDeleteKey
删除子键
1 LSTATUS RegDeleteKeyA( 2 HKEY hKey, 3 LPCSTR lpSubKey 4 );
hKey:用来指向父键句柄
lpSubKey:指向要删除的子键名称字符串
键值的查询、写入与删除
RegQueryValueEx
读取键名称中的数据或查询键名称的属性
1 LSTATUS RegQueryValueExA( 2 HKEY hKey, 3 LPCSTR lpValueName, 4 LPDWORD lpReserved, 5 LPDWORD lpType, 6 LPBYTE lpData, 7 LPDWORD lpcbData 8 );
hKey:用来指向要读取的键值项所处的子键句柄
lpValueName:用来指向要读取的键值项名称的字符串
lpReserved:保留参数,设置为NULL
lpType:接收返回的键值类型,如果不需要返回键值项类型,可以设置为NULL
lpDate:指向一个缓冲区,用来接收返回的键值数据
lpchData:在调用该函数时,这个参数用来指定缓冲区的长度;当函数返回时,该变量保存缓冲区实际接收到的长度
RegSetValueEx
写入键值项
1 LSTATUS RegSetValueExA( 2 HKEY hKey, 3 LPCSTR lpValueName, 4 DWORD Reserved, 5 DWORD dwType, 6 const BYTE *lpData, 7 DWORD cbData 8 );
hKey:用来指定要写入的键值项所处的子键句柄
lpValueName:指向定义键值项名称的字符串
Reservered:保存参数,设置为NULL
dwType:指定要写入的键值数据类型
lpData:指定要写入键值数据的缓冲区
cbData:要写入键值数据的缓冲区长度
RegDeleteValue
删除键值项
1 LSTATUS RegDeleteValueA( 2 HKEY hKey, 3 LPCSTR lpValueName 4 );
hKey:用来指定要删除的键值项所处的子键句柄
lpValueName:被删除键值项的名称
子键和键值的枚举
RegEnumKeyEx
子键枚举函数
1 LSTATUS RegEnumKeyExA(2 HKEY hKey,3 DWORD dwIndex,4 LPSTR lpName,5 LPDWORD lpcchName,6 LPDWORD lpReserved,7 LPSTR lpClass,8 LPDWORD lpcchClass,9 PFILETIME lpftLastWriteTime 10 );
hKey:指向被枚举的键句柄
dwIndex:指定需要返回信息的子键索引编号
lpName:用户接收返回子键名称的缓冲区
lpcchName:在调用函数前,该参数保存lpName指向缓冲区的长度;在调用该函数后,该参数保存缓冲区实际接收到的数据的长度
lpReserved:保留参数,必须为NULL值
lpClass:指向接收枚举子项的用户定义类。一般指定为NULL
lpcchClass:指向lpClass参数指定的缓冲区的大小,一般指定为NULL
lpftLastWriteTime:指向一个FILETIME结构体,用于接收最后一次被写入的时间
RegEnumValue
枚举键值
1 LSTATUS RegEnumValueA(2 HKEY hKey,3 DWORD dwIndex,4 LPSTR lpValueName,5 LPDWORD lpcchValueName,6 LPDWORD lpReserved,7 LPDWORD lpType,8 LPBYTE lpData,9 LPDWORD lpcbData 10 );
hKey:指向被枚举的键句柄
dwIndex:指定需要返回信息的键值索引编号
lpValueName:接收返回值名称的缓冲区
lpcchValueName:有调用该参数前,该参数保存lpValueName指向缓冲区的长度;在该函数调用完成后,该参数保存缓冲区实际接收到的数据的长度
lpReserved:保留参数,必须为NULL
lpType:指向返回键值数据类型
lpData:接收返回键值数据的缓冲区
lpcbData:在调用该函数前,该参数保存lpData指向缓冲区的长度;在该函数调用完成后,该参数保存缓冲区实际收到的数据的长度
常用的注册表设置(设置前建议备份整个注册表)
禁用快捷菜单的”发送到“菜单项
打开计算机\HKEY_CLASSES_ROOT\AllFilesystemObjects\shellex\ContextMenuHandlers\SendTo 删除默认值。如果要恢复,将默认值设置为 {7BA4C740-9E81-11CF-99D3-00AA004AE837}
删除快捷方式箭头
打开计算机\HKEY_CLASSES_ROOT\lnkfile,删除IsShortcut键值
隐藏桌面图标
打开计算机\HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer,新建名称为NoSetFolders键值,并设置数据为1
禁止访问任务管理器
打开计算机\HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System,修改DisableTaskmgr键值的数据为1。如果没有DisableTaskmgr键值,就创建一个。
在桌面显示Windows版本
打开计算机\HKEY_CURRENT_USER\Control Panel\Desktop,修改PaintDesktopVersion键值的数据为1
隐藏”重新启用“、”睡眠”和“休眠”命令
打开计算机\HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer,新建一个NoClose键值,并设置数据为1
禁用计算机中的USB端口
打开计算机\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\USBSTOR,修改Start键值数据为4
配置开机启动项
计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
推荐阅读:
注册表
Registry - Win32 apps | Microsoft Learn
相关文章:
Win32注册表操作
注册表的概念 注册表是一个存储计算机配置信息的数据库,用于存储计算机上的硬件、安装的软件、系统设置以及用户账户配置等重要信息。对注册表的编辑不当可能会影响计算机的正常运行。应用程序可以调用API函数来对注册表进行增、删等操作。 注册表结构 运行Regedi…...
白骑士的PyCharm教学高级篇 3.3 Web开发支持
系列目录 上一篇:白骑士的PyCharm教学高级篇 3.2 多模块项目管理 在现代Web开发中,前端技术的重要性日益增加。PyCharm不仅在后端开发中表现出色,在前端开发方面也提供了丰富的支持。本文将详细介绍PyCharm中对HTML、CSS、JavaScript的编辑支…...
SpringAOP-底层实现源码解析
目录 1. Spring AOP原理流程图 2. 动态代理 3. ProxyFactory 4. Advice的分类 5. Advisor的理解 6. 创建代理对象的方式 ProxyFactoryBean BeanNameAutoProxyCreator DefaultAdvisorAutoProxyCreator 7. 对Spring AOP的理解 8. AOP中的概念 9. Advice在Spring AOP中…...
【C语言初阶】C语言操作符全攻略:提升编程效率的关键步骤
📝个人主页🌹:Eternity._ ⏩收录专栏⏪:C语言 “ 登神长阶 ” 🤡往期回顾🤡:C语言数组 🌹🌹期待您的关注 🌹🌹 ❀操作符 📒1. 算术操作…...
2007-2023年上市公司金融化程度测算数据(含原始数据+计算代码+计算结果)
2007-2023年上市公司金融化程度测算数据(含原始数据计算代码计算结果) 1、时间:2007-2023年 2、指标:行业代码、行业名称、stkcd、year、证券简称、是否发生ST或ST或PT、是否发生暂停上市、股票简称、成立日期、交易性金融资产、…...
【时时三省】(C语言基础)操作符
山不在高,有仙则名。水不在深,有龙则灵。 ——csdn时时三省 算术操作符 这个时候打印出来的是整数 不会打印小数点后面的数字 因为它是int类型 只用把他换成浮点型并且它的两个数里面有一个必须是小数 才可以算出来小数 示例: %操作符的两个操作数必…...
常用API(三)
对于常见API的学习,主要学习了关于时间和日期的传统和新增APi 目录 1.Math 2.System 3.Runtime 4.日期和时间 (1)JDK8前传统时间API [1] Date [2] SimpledateFormat [3]Calendar (2)JDK8后新增时间API [1]代替…...
内存管理问题总结
内存管理 虚拟内存 我们程序所使⽤的内存地址叫做虚拟内存地址(Virtual Memory Address) 实际存在硬件⾥⾯的空间地址叫物理内存地址(Physical Memory Address) 操作系统引⼊了虚拟内存,进程持有的虚拟地址会通过 …...
十七、Intellij IDEA2022.1.1下载、安装、激活
目录 🌻🌻 一、下载二、 安装三、激活 一、下载 官网下载地址 本地直接下载 目前Intellij IDEA的最新版本已经更新到了 2024.1.4,由于最新版本可能存在不稳定的问题,此处选择其他版本进行下载,此处以2022.1.1为例进行下…...
【Material-UI】Button Group 中的 Disabled Elevation 功能
文章目录 一、Button Group 组件概述二、什么是 Elevation?三、为什么需要禁用 Elevation?四、使用 disableElevation 属性五、属性解析1. disableElevation 属性2. variant 属性3. aria-label 属性 六、应用场景1. 表单操作2. 工具栏3. 导航按钮 七、样…...
Java RESTful API 测试:使用 RestAssured
Java RESTful API 测试:使用 RestAssured 简介 在现代软件开发中,RESTful API扮演着至关重要的角色。API的测试同样重要以确保它们按预期工作。Java中的RestAssured库提供了一种简单直观的方式来测试RESTful Web服务。本文将介绍RestAssured的基本概念…...
将nestjs项目迁移到阿里云函数
注意:长耗时,高内存 的应用,定时任务 不适合迁移。 根据模板创建项目 一、模板配置修改 1.node版本修改 由于我的nestjs项目是node18的需要修改 pre-deploy项目: 改成 resources:framework:component: fc3actions:pre-deploy:-…...
边缘计算×AI:绘制未来实时智能的宏伟蓝图
引言:时代的召唤 随着物联网技术的飞速发展,数以亿计的传感器和智能设备正不断涌入我们的生活和工作空间,它们生成的数据量级之大,远非传统的集中式云处理所能高效应对。因此,一种新兴的数据处理模式——边缘计算&…...
实现关系运算符的重载
全局函数的实现法: 成员函数实现法:...
【css】使用CSS绘制奥运五环--巴黎奥运
使用CSS绘制奥运五环 在2024年巴黎奥运会期间,本文来使用 CSS 来画一个奥运五环。奥运五环由五个相互交叠的圆环组成,分别代表五大洲。 奥运五环是相互连接的,因此在视觉上会产生重叠效果,这也是实现五环最有挑战性的部分 HTML结…...
【Python数据处理】MatplotlibNumpyPandas常用API整理
目录 Matplotlib 1. 导入 Matplotlib 并创建图布 2. 实现基础绘图 2.1 折线图 2.2 柱状图 2.3 散点图 2.4 直方图 3. 完善绘图辅助功能 3.1 添加标题和标签 3.2 添加网格线 3.3 添加图例 4. 在一个坐标系下绘制多个图像 5. 在一个图形窗口创建多个子图 5.1 使用 a…...
Nacos是阿里巴巴开源的一款分布式服务注册中心和配置中心
Nacos是阿里巴巴开源的一款分布式服务注册中心和配置中心,旨在帮助开发人员更轻松地构建和管理微服务架构。以下是关于Nacos的详细介绍: 一、概述 Nacos是Dynamic Naming and Configuration Service(动态命名和配置服务)的缩写&a…...
条形码与二维码报表
概述 条形码与二维码:演示条形码与二维码,条形码数据将来自于关联的字段值。支持各种常用的条形码与二维码。 应用场景 如下图所示,简单展示数据 示例说明 数据准备 在数据面板中添加数据集,可选择Json数据集和API服务数据…...
数据采集工具之Flume
本文主要实现数据到datahub的采集过程 1、下载 Index of /dist/flume/1.11.0 datahub插件下载 https://aliyun-datahub.oss-cn-hangzhou.aliyuncs.com/tools/aliyun-flume-datahub-sink-2.0.9.tar.gz 2、安装 $ tar aliyun-flume-datahub-sink-x.x.x.tar.gz $ cd aliyun-…...
【24年最新】AI大模型零基础入门到精通学习资料大全,学完你就是LLM大师!
零基础如何学习大模型 AI 领取方式在文末 为什么要学习大模型? 学习大模型课程的重要性在于它能够极大地促进个人在人工智能领域的专业发展。大模型技术,如自然语言处理和图像识别,正在推动着人工智能的新发展阶段。通过学习大模型课程&am…...
变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析
一、变量声明设计:let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性,这种设计体现了语言的核心哲学。以下是深度解析: 1.1 设计理念剖析 安全优先原则:默认不可变强制开发者明确声明意图 let x 5; …...
Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误
HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误,它们的含义、原因和解决方法都有显著区别。以下是详细对比: 1. HTTP 406 (Not Acceptable) 含义: 客户端请求的内容类型与服务器支持的内容类型不匹…...
AI Agent与Agentic AI:原理、应用、挑战与未来展望
文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例:使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例:使用OpenAI GPT-3进…...
Python实现prophet 理论及参数优化
文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候,写过一篇简单实现,后期随着对该模型的深入研究,本次记录涉及到prophet 的公式以及参数调优,从公式可以更直观…...
Linux-07 ubuntu 的 chrome 启动不了
文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了,报错如下四、启动不了,解决如下 总结 问题原因 在应用中可以看到chrome,但是打不开(说明:原来的ubuntu系统出问题了,这个是备用的硬盘&a…...
深度学习习题2
1.如果增加神经网络的宽度,精确度会增加到一个特定阈值后,便开始降低。造成这一现象的可能原因是什么? A、即使增加卷积核的数量,只有少部分的核会被用作预测 B、当卷积核数量增加时,神经网络的预测能力会降低 C、当卷…...
为什么要创建 Vue 实例
核心原因:Vue 需要一个「控制中心」来驱动整个应用 你可以把 Vue 实例想象成你应用的**「大脑」或「引擎」。它负责协调模板、数据、逻辑和行为,将它们变成一个活的、可交互的应用**。没有这个实例,你的代码只是一堆静态的 HTML、JavaScript 变量和函数,无法「活」起来。 …...
通过 Ansible 在 Windows 2022 上安装 IIS Web 服务器
拓扑结构 这是一个用于通过 Ansible 部署 IIS Web 服务器的实验室拓扑。 前提条件: 在被管理的节点上安装WinRm 准备一张自签名的证书 开放防火墙入站tcp 5985 5986端口 准备自签名证书 PS C:\Users\azureuser> $cert New-SelfSignedCertificate -DnsName &…...
前端中slice和splic的区别
1. slice slice 用于从数组中提取一部分元素,返回一个新的数组。 特点: 不修改原数组:slice 不会改变原数组,而是返回一个新的数组。提取数组的部分:slice 会根据指定的开始索引和结束索引提取数组的一部分。不包含…...
上位机开发过程中的设计模式体会(1):工厂方法模式、单例模式和生成器模式
简介 在我的 QT/C 开发工作中,合理运用设计模式极大地提高了代码的可维护性和可扩展性。本文将分享我在实际项目中应用的三种创造型模式:工厂方法模式、单例模式和生成器模式。 1. 工厂模式 (Factory Pattern) 应用场景 在我的 QT 项目中曾经有一个需…...
