【WIN32】【C/C++】枚举注册表子项及其值

Windows C盘清理手术刀:精准可控可逆的系统级清理工具 Windows系统盘清理不是简单的文件删除,而是涉及文件锁定、硬链接、事务安全等底层机制的高风险操作。理解Temp目录生存期管理、Windows日志归档策略与SoftwareDistribution缓存生命周期,是实现安全减负的前提。Csimplecleaner以Win32原生API为基础,通过进程句柄检测、SQLite数据库解析和7z高压缩归档等技术,提供精准、可控、可逆的清理能力,适用于IT运维、开发者及追求系统稳定性的进阶用户。 阅读详情

title: 调用Win32 API枚举注册表子项及其值


需求

在这里插入图片描述如上图所示,获得其中的名称和数据。

代码

/********************************************************************************
 *
 *        All rights reserved by mingming
 *
 *        filename		: RegQueryMultipleValues
 *        description	:
 *
 *        created by  mingming on Aug. 13th, 2021
 *
 ********************************************************************************/
#include <windows.h>
#include <stdio.h>
#include <atlstr.h>
#include <vector>
#include <iostream>
using namespace std;
#pragma warning(disable:4996)

void main(int argc, char* argv[])
{
	HKEY hKey = NULL;
	
	//KEY_READ | KEY_WOW64_32KEY   HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Run
	DWORD samDesire = KEY_READ | KEY_WOW64_64KEY; 
	LPCTSTR lpSubKey = L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run";

	if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, lpSubKey, 0, samDesire, &hKey) != ERROR_SUCCESS)
	{
		return;
	}

	FILETIME timeFile;
	long nError = 0;
	VALENT pValent[MAX_PATH];
	DWORD nValentCount = MAX_PATH;
	memset(pValent, 0, sizeof(pValent));

	// 1.获取子项键名
	DWORD dwSizeValueName = MAX_PATH;
	DWORD dwSizeofKeyName = MAX_PATH;
	DWORD dwIndex = 0;
	DWORD dwType;
	TCHAR szValueName[MAX_PATH] = { 0 };
	BYTE szKeyName[MAX_PATH] = { 0 };
	vector<wstring> keyName;

	int nCount = 0;
	do
	{
		nError = RegEnumValue(hKey, dwIndex++, szValueName, &dwSizeValueName, NULL, &dwType, szKeyName, &dwSizeofKeyName);
		if (nError == ERROR_SUCCESS)
		{
			wprintf(L"Key Name = %s\n", (wchar_t *)szValueName);
			//wprintf(L"Key Name = %s\n", (wchar_t *)szKeyName);
			wchar_t wsStr[128];
			_wcsncpy_l(wsStr, (wchar_t *)szValueName,sizeof(szValueName)/sizeof(szValueName[0]),0);
			keyName.push_back(wsStr);

			//VALENT pVal;
			//pVal.ve_valuename = (LPWSTR)wsStr.c_str();//输入值项名称
		}

		dwSizeValueName = MAX_PATH;
		dwSizeofKeyName = MAX_PATH;

	} while (nError != ERROR_NO_MORE_ITEMS);

	for (nCount = 0; nCount <  keyName.size(); nCount++)
	{
		pValent[nCount].ve_valuename = (LPWSTR)keyName[nCount].c_str();
	}

	// 2.根据键名获取值
	{
		char szVale[1024];
		DWORD nValueLen = 1024;

		printf("2.根据键名获取值 Success!\n");

		if (ERROR_SUCCESS == (nError = RegQueryMultipleValues(hKey, pValent, nCount, (LPWSTR)szVale, &nValueLen)))
		{

			printf("RegQueryMultipleValues Success!\n");

			CString szResult;
			printf("------------------------------------------\n");
			for (int i = 0; i < nCount; ++i)
			{

				CString szTemp;
				wcout.imbue(std::locale("chs"));

				/*if (REG_SZ == pVal.ve_type)
				{

					szTemp.Format(_T("第%d个参数[%s]的值是:%s\r"), i,
						pVal.ve_valuename, (char*)pVal.ve_valueptr);

					wcout << "s=" << szTemp.GetString() << endl;
				}
				else if (REG_DWORD == pVal.ve_type)
				{
					szTemp.Format(_T("第%d个参数[%s]的值是:%d\r"), i,
						pVal.ve_valuename, *((DWORD*)pVal.ve_valueptr));

					wcout << "s=" << szTemp.GetString() << endl;
				}*/



				if (REG_SZ == pValent[i].ve_type)
				{

					szTemp.Format(_T("第%d个参数[%s]的值是:%s\r"), i,
						pValent[i].ve_valuename, (char*)pValent[i].ve_valueptr);

					wcout << "s=" << szTemp.GetString() << endl;
				}
				else if (REG_DWORD == pValent[i].ve_type)
				{
					szTemp.Format(_T("第%d个参数[%s]的值是:%d\r"), i,
						pValent[i].ve_valuename, *((DWORD*)pValent[i].ve_valueptr));

					wcout << "s=" << szTemp.GetString() << endl;
				}


				if (!szTemp.IsEmpty())

					szResult += szTemp;
			}
			printf("------------------------------------------\n");

		}
		else
		{
			printf("erroe code: %d", nError);
		}


	// Close registry keys.
	if (hKey)
		RegCloseKey(hKey);

	}
	
}

结果

在这里插入图片描述

VC++实战Windows Shell编程:从COM接口到自定义右键菜单与属性页开发 Windows Shell是操作系统的核心用户界面层,其底层基于COM(组件对象模型)架构,通过定义标准接口实现高度可扩展性。理解COM原理是深入Shell编程的关键,它允许开发者通过实现特定接口(如IShellExtInit、IContextMenu)来创建可被资源管理器加载和调用的组件。这项技术的核心价值在于能够深度定制和扩展Windows用户体验,例如为特定文件类型添加上下文菜单或属性页。在工程实践中,使用Visual C++配合ATL(Active Template Library)是开发Shell 阅读详情

相关推荐

VC++桌面应用自动更新模块设计:独立进程架构与安全文件替换实践

在桌面应用开发中,自动更新是提升软件可维护性和用户体验的核心功能。其基本原理是通过网络检测新版本并下载替换本地文件,技术价值在于实现软件的无缝升级与问题修复。在工程实践中,采用独立更新器进程的架构能有效解耦主程序业务逻辑,避免因更新失败导致的主程序崩溃。通过WinINet/WinHTTP实现可靠的文件下载,结合文件哈希校验保障完整性,并运用原子性文件替换策略处理进程占用与回滚机制,可构建健壮的更新流程。这一方案尤其适用于VC++等原生开发场景,为桌面应用提供了稳定、安全的自动化部署能力。

weixin_34417183的博客 505

Win32编程3-注册表读取,创建,修改

创建窗口原理与上述也一致,页面排版就不多说了,就是CreateWindow函数反复使用,在创建新窗口前会调用QueryRegValue查询键值名称,类型和值,具体解释都在注释里,这里不多叙述,DWORD类型是最简单的,就没写注释,每一种类型都是通过RegGetValue先获取值的大小,然后在读取值并用对应类型接收,最后转为CString类型,并赋值给r,这是全局CString。至此读取,创建,修改注册表的内容就结束了,上述操作经过测试都是可用的,但没有做太多的非法输入处理,主要是懒,而且也用不上。

qq_16119139的博客 933

C语言实现遍历注册表

指定注册表中的项,将该项下的所有子项以及键值导出,写成txt文本文件。 指定注册表中的项,将该项下的所有子项以及键值导出,写成txt文本文件。

C/C++ 操作注册表与服务

注册表,与服务常用来注册自启动程序,开机自动运行,多用于后门。遍历注册表 HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run我们需要将服务放到 C://windows/system32/目录下,然后注册服务才能运行.

微软技术分享 1万+

win32读写注册表

WIn32读写注册表,读写注册表的方式,直接拷贝即可

注册表枚举

注册表枚举的相关的操作,主要是枚举相关的键值的操作!

C/C++枚举注册表某项下的所有子项【代码示例】

/*  * 版权:  * 文件名称:RegEnumKey.c  * 摘要:枚举注册表下的所有子项   * 当前版本:  * 作者:烈风  * 完成日期:  */ # include # include # include int main(void) { HKEY hKey = NULL; //保存注册表的句柄  TCHAR *subKey = "

技术皮皮虾 6617

C++编写的枚举注册表源代码

C++编写的枚举注册表源代码,程序所在文件名:枚举注册表程序 附有:EnumProcess[枚举进程].exe(枚举进程工具)

C/C++枚举注册表某项下的所有键值【代码示例】

使用Windows API 函数中的RegOpenKeyEx()函数和RegEnumKeyEx()函数来实现对注册表某项下的所有子项进行枚举。 1、RegOpenKeyEx 函数: 原形:LONG RegOpenKeyEx(               HKEY hKey,     // 要打开主键名               LPCTSTR lpSubKey, // 需要打

技术皮皮虾 4685

将AAL图谱对应到Yeo7大网络中【原理,代码分析】

本文介绍了将AAL2图谱映射到Yeo7大功能网络的方法。通过整合皮层(Yeo2011)、小脑(Buckner2011)和纹状体(Choi2012)三个区域的功能网络图谱,采用投票机制确定每个AAL区域的网络归属。具体步骤包括:1)统计每个AAL区域体素在各网络图谱中的分布;2)选择体素数量最多的网络作为该区域的最终标签。该方法实现了从解剖结构到功能网络的映射,可获得120个AAL区域对应的7大功能网络标签。

yes666666的博客 2206

KiCad自动布线实战:FreeRouting插件安装与使用指南

在PCB设计流程中,布线环节往往占据大量重复性工作,尤其对于中小型双面板,成百上千条飞线的手动连接既繁琐又易出错。自动布线技术通过算法在给定设计规则和元件布局的基础上自动规划走线路径,能显著提升布线效率。FreeRouting作为一款开源自动布线器,与KiCad通过DSN/SES标准中间格式无缝配合,让工程师将精力集中于关键信号和布局优化,而将常规网络交给工具处理。本文从自动布线的原理与边界出发,讲解了FreeRouting的安装、DSN导出、参数设置、自动布线及结果回传的完整流程,并结合实际案例展示了在S

weixin_32025789的博客 278

C/C++注册表【3】子键枚举,备份,恢复

C/C++注册表【2】子键枚举,备份,恢复

司徒荆的博客 994

6.5 构网型储能系统的协同控制策略

本文系统阐述了构网型储能系统的协同控制策略,重点分析了多机组群协同运行面临的功率分配不均、动态响应失配等挑战。研究提出了改进型下垂控制与虚拟阻抗法、基于一致性算法的分布式协同控制等解决方案,探讨了构网型储能与同步发电机在惯性响应、一次调频等方面的协同机制,以及与跟网型电源在电压支撑、阻抗重塑等方面的互补作用。文章构建了分层控制架构,为实现多类型电源的全局优化运行提供了技术路径,对提升高比例新能源电力系统的稳定性具有重要意义。

技术工作者 1002

【WIN32】【C/C++】枚举 注册表子项

调用`RegEnumValue`获取注册表某一路径下的所有键值。

此地无银 690

芒果YOLOv8改进72:动态标签分配策略篇之ATSS:自适应训练样本选择Adaptive Training Sample Selection策略

YOLOv8代码实践|ATSS标签分配策略改进🥭

包括YOLOv5、YOLOv7、YOLOv8等模型改进 2909

华为MetaERP的交易计税模块(即“税务引擎”)在设计上确实受到Oracle E-Business Tax(EBTax)等国际先进税务架构理念的影响,但结合了华为自身全球化运营、多准则合规、高并发处

华为MetaERP税务引擎在借鉴Oracle EBTax三层架构基础上,创新升级为五层智能税务架构,实现从"税码驱动"到"场景+规则+AI驱动"的转变。该模块采用云原生微服务架构,支持全球190+国家税务规则动态加载,具备实时计税、多准则并行处理、AI风险预警等核心能力,深度适配金税工程等国内合规要求。通过税务数字孪生、RPA机器人等创新,形成自主可控的智能税务中枢,为跨国企业提供全栈国产化税务解决方案,重新定义ERP税务管理范式。

金牌架构师 114

Happy Registry: A quick wrapper for the Win32 database(译文)

Happy Registry: A quick wrapper for the Win32 database (Happy Registry:快速Win32注册表封装类) 作者:Michael Chourdakis 翻译:Sam  Tan 原文地址:http://www.codeproject.com/Articles/1040618/Happy-Registry-A-qu

hckMe的专栏 712

黑猫带你学eMMC协议第26篇:eMMC的硬件复位操作(H/W reset)

本文依据eMMC JEDEC5.1及个人工作经验整理而成,如有错误请留言。 文章为个人辛苦整理,付费内容,禁止私自转载。 文章所在专栏:《黑猫带你学:eMMC协议详解》 1 概述 什么是硬件复位? 硬件复位就是使用一个特殊硬件信号(这个信号在RST_n这根实实在在的物理线路上传输)将emmc复位到pre-idle state,而不需要使用cmd0或者power cycle讲emmc复位到pre-idle state。 如何进行硬件复位? 1、设置RST_n_FUNCTION [162]为1,使emm.

黑猫奥利奥的博客 6316

Windows注册表REG_QWORD与REG_BINARY数据类型读取与解析实战指南

在Windows系统管理与软件开发中,注册表作为核心配置数据库,存储着系统与应用的关键信息。其数据类型多样,其中REG_QWORD(64位整数)和REG_BINARY(原始字节数组)是处理底层配置、硬件状态、加密数据及性能计数器信息时常见但易被误读的类型。理解其存储原理(如小端字节序)与正确读取方法,是进行系统故障排查、软件逆向与深度系统集成开发的基础技术能力。通过PowerShell、C#等工具,结合BitConverter与Encoding类库,可以高效地将这些二进制数据转换为程序可用的数值或字符串格式

weixin_30889885的博客 395

Python自动化脚本:模拟鼠标键盘保持电脑在线状态

在计算机自动化领域,模拟用户输入是一项基础且实用的技术,其核心原理是通过程序生成鼠标或键盘事件来与操作系统交互。这项技术的价值在于能够自动化重复性操作,提升工作效率,并解决特定场景下的系统交互问题。PyAutoGUI作为Python生态中广泛使用的自动化库,封装了跨平台的底层API调用,为开发者提供了简洁统一的接口来实现输入模拟。在实际工程实践中,这类技术常应用于自动化测试、远程办公辅助、数据抓取等场景,帮助用户保持系统活跃状态,防止因无操作导致的锁屏或休眠中断任务。通过合理配置移动间隔和随机化模式,可以更

weixin_28713299的博客 578

CollisionLoss 设计与实现原理说明

文章摘要 CollisionLoss是一种用于自动驾驶轨迹规划的碰撞惩罚损失函数,其核心思想是用多个沿车身纵轴排列的圆盘来近似表示车辆(Oriented Bounding Box)。该设计通过圆盘间的距离计算实现碰撞检测,具有以下特点: 可微性:圆盘距离计算处处可微,便于梯度回传,而传统矩形碰撞检测(分离轴定理)不可微且计算复杂。 多圆盘设计:沿车身纵向排列多个圆盘能更精确地拟合细长车体,避免单圆盘过度膨胀导致的误报。 安全覆盖:圆盘半径经过数学推导,确保完全覆盖车体矩形,避免漏检(宁可保守)。 软惩罚机制

@bangbang的博客 94

监听以太网(一) Packet32包说明

简述   监听网络上的所有数据,是一个比较有趣的题目。流传比较广的一些监听程序,它们都使用了一个更加著名的开发包Packet32。比如,ntsniff、EthernetSpy、ntpacket等,还有赫赫有名的WinPcap。应用程序通过它可以设置网卡的工作模式,直接在网卡上读写数据,等等。 一般使用的Packet32的实现版本,是微软的Packet32.c和Packet32.h。这个版本写得比较

zy122的专栏 2533

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Packet32.dll说明。

   WinPcap is an architecture for packet capture and network analysis for the Win32 platforms. It includes a kernel-level packet filter, a low-level dynamic link library (packet.dll), and a high-level

zskcy的专栏 3574

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

OpenClaw Windows 11一键部署:小白也能跑通的本地智能体框架

智能体(Agent)是当前AI工程化落地的核心范式,指能自主规划、调用工具、维护上下文并完成多步任务的程序单元。其底层依赖模型推理、工具集成与流程编排三大能力,技术价值在于降低大模型应用门槛,实现从‘单次问答’到‘自动化工作流’的跃迁。典型应用场景包括合同条款提取、邮件批量分析、Excel自动汇总等轻量级RPA任务。OpenClaw正是一款专注Windows平台的轻量级智能体调度框架,通过标准化Skill插件接口解耦模型与工具,并深度适配Windows 11原生特性——如DirectML GPU加速、WSL

weixin_34152820的博客 692

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

C/C++注册表【4】键值的获取,设置,删除,枚举

C/C++注册表【4】键值的获取,设置,删除,枚举

司徒荆的博客 2314
上一篇: 【WIN32】【C/C++】枚举 注册表子项
下一篇: 【WIN】【C/C++】获取文件版本号
欧恩意
博客等级 码龄7年 677粉丝 138原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

欧恩意

如有帮助,感谢打赏!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值