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…...
NodeJS全栈WEB3面试题——P4Node.js后端集成 服务端设计
4.1 如何在 Node.js 中管理钱包与私钥的安全性? 私钥管理原则:不暴露,不硬编码,不明文存储。 常见做法: 加密存储: 使用 crypto 或 ethers.Wallet.encrypt() 加密私钥,存储到数据库或文件系统…...

Linux操作系统安全管理概述与命令操作
前言: 1.本文将详细描述让读者了解Linux操作系统安全管理的概述和SELinux安全上下文以及基础操作命令; 2.本文将让读者掌握Linux操作系统防火墙firewall的结构和命令使用方法; 3.了解Iptables防火墙配置的结构与特点以及…...

基于Android的医院陪诊预约系统
博主介绍:java高级开发,从事互联网行业六年,熟悉各种主流语言,精通java、python、php、爬虫、web开发,已经做了六年的毕业设计程序开发,开发过上千套毕业设计程序,没有什么华丽的语言࿰…...

【Doris基础】Apache Doris中的Coordinator节点作用详解
目录 1 Doris架构概述 2 Coordinator节点的核心作用 2.1 查询协调与调度 2.2 执行计划生成与优化 2.3 资源管理与负载均衡 2.4 容错与故障恢复 3 Coordinator节点的关键实现机制 3.1 两阶段执行模型 3.2 流水线执行引擎 3.3 分布式事务管理 4 Coordinator节点的高可…...

Spring如何实现组件扫描与@Component注解原理
Spring如何实现组件扫描与Component注解原理 注解配置与包扫描的实现机制一、概述:什么是注解配置与包扫描?二、处理流程概览三、注解定义ComponentScope 四、核心代码结构1. ClassPathScanningCandidateComponentProvider2. ClassPathBeanDefinitionSca…...

边缘计算网关支撑医院供暖系统高效运维的本地化计算与边缘决策
一、项目背景 医院作为人员密集的特殊场所,对供暖系统的稳定性和高效性有着极高的要求。其供暖换热站传统的人工现场监控方式存在诸多弊端,如人员值守成本高、数据记录不及时不准确、故障发现和处理滞后、能耗难以有效监测和控制等,难以满足…...
virtio介绍 (三)--spdk作为virtio后端处理nvme盘io的流程--上
目录 一 简介 二 vhost-blk层 三 bdev层 四 lvol层 五 bdev_nvme层 六 硬件驱动层 七 完整取io调用栈流程 一 简介 上节介绍了virito的基本原理,后面根据实际代码介绍virtio的流程。virtio后端代码相对于前端代码更简单,我们先以spdk中的virtio后…...

Live Helper Chat 安装部署
Live Helper Chat(LHC)是一款开源的实时客服聊天系统,适用于网站和应用,帮助企业与访问者即时沟通。它功能丰富、灵活、可自托管,常被用于在线客户支持、销售咨询以及技术支持场景。 🧰 系统要求 安装要求 您提供的链接指向 Live Helper Chat 的官方安装指南页面,详细…...

YOLOv8 实战指南:如何实现视频区域内的目标统计与计数
文章目录 YOLOv8改进 | 进阶实战篇:利用YOLOv8进行视频划定区域目标统计计数1. 引言2. YOLOv8基础回顾2.1 YOLOv8架构概述2.2 YOLOv8的安装与基本使用 3. 视频划定区域目标统计的实现3.1 核心思路3.2 完整实现代码 4. 代码深度解析4.1 关键组件分析4.2 性能优化技巧…...

高密爆炸警钟长鸣:AI为化工安全戴上“智能护盾”
一、高密爆炸:一声巨响,撕开化工安全“伤疤” 2025年5月27日,山东高密友道化学有限公司的车间爆炸声,像一把利刃划破了化工行业的平静。剧烈的冲击波将车间夷为平地,黑色蘑菇云腾空而起,刺鼻的化学气味弥漫…...