当前位置: 首页 > news >正文

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:要关闭的键句柄,即RegOpenKeyExphkResult

创建和删除子键

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…...

手游刚开服就被攻击怎么办?如何防御DDoS?

开服初期是手游最脆弱的阶段,极易成为DDoS攻击的目标。一旦遭遇攻击,可能导致服务器瘫痪、玩家流失,甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案,帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...

Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例

使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件,常用于在两个集合之间进行数据转移,如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model:绑定右侧列表的值&…...

ABAP设计模式之---“简单设计原则(Simple Design)”

“Simple Design”(简单设计)是软件开发中的一个重要理念,倡导以最简单的方式实现软件功能,以确保代码清晰易懂、易维护,并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计,遵循“让事情保…...

Unsafe Fileupload篇补充-木马的详细教程与木马分享(中国蚁剑方式)

在之前的皮卡丘靶场第九期Unsafe Fileupload篇中我们学习了木马的原理并且学了一个简单的木马文件 本期内容是为了更好的为大家解释木马(服务器方面的)的原理,连接,以及各种木马及连接工具的分享 文件木马:https://w…...

HashMap中的put方法执行流程(流程图)

1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中,其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下: 初始判断与哈希计算: 首先,putVal 方法会检查当前的 table(也就…...

vulnyx Blogger writeup

信息收集 arp-scan nmap 获取userFlag 上web看看 一个默认的页面,gobuster扫一下目录 可以看到扫出的目录中得到了一个有价值的目录/wordpress,说明目标所使用的cms是wordpress,访问http://192.168.43.213/wordpress/然后查看源码能看到 这…...

如何更改默认 Crontab 编辑器 ?

在 Linux 领域中,crontab 是您可能经常遇到的一个术语。这个实用程序在类 unix 操作系统上可用,用于调度在预定义时间和间隔自动执行的任务。这对管理员和高级用户非常有益,允许他们自动执行各种系统任务。 编辑 Crontab 文件通常使用文本编…...

【p2p、分布式,区块链笔记 MESH】Bluetooth蓝牙通信 BLE Mesh协议的拓扑结构 定向转发机制

目录 节点的功能承载层(GATT/Adv)局限性: 拓扑关系定向转发机制定向转发意义 CG 节点的功能 节点的功能由节点支持的特性和功能决定。所有节点都能够发送和接收网格消息。节点还可以选择支持一个或多个附加功能,如 Configuration …...

Sklearn 机器学习 缺失值处理 获取填充失值的统计值

💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 使用 Scikit-learn 处理缺失值并提取填充统计信息的完整指南 在机器学习项目中,数据清…...

WEB3全栈开发——面试专业技能点P7前端与链上集成

一、Next.js技术栈 ✅ 概念介绍 Next.js 是一个基于 React 的 服务端渲染(SSR)与静态网站生成(SSG) 框架,由 Vercel 开发。它简化了构建生产级 React 应用的过程,并内置了很多特性: ✅ 文件系…...