Windows内核函数 - 添加、修改注册表键值

        打开注册表的句柄后,就可以对该项进行设置和修改了。注册表是以二元形式存储的,即“键名”和“键值”。通过键名设置键值,而键值可以划分几个类,如下表所示。

        表1 键值的分类

        在添加和修改注册表键值的时候,要分类进行添加和修改,DDK提供了 ZwSetValueKey 函数来完成这个任务,其函数声明是:

NTSTATUS ZwSetValueKey(
    IN HANDLE KeyHandle,
    IN PUNICODE_STRING ValueName,
    IN ULONG TitleIndex,
    IN ULONG Type,
    IN PVOID Data,
    IN ULONG DataSize
    );
// KeyHandle: 注册表句柄
// ValueName:要新建或者修改的键名
// TitleIndex: 很少用,一般设为0
// Type: 在表1中选择一种类型
// Data: 记录键值数据
// DataSize: 记录键值数据的大小
// 返回值: 返回新建或者修改的结果

        使用 ZwSetValueKey 函数的时候,如果指定的键名不存在,则直接创建,如果指定键名已经存在。则对已有键值进行修改。当新建或者修改键值的时候,根据表1不同的类别,Data指向不同的数据结构,并且用DataSize指明数据大小。例如,REG_DWORD类型,对应的数据大小就是4,REG_QWORD数据类型,数据大小就是8,如果是REG_SZ,数据长度是字符串长度的二倍加上两个字节。下面的代码演示了如何修改和设置键值。

UNICODE_STRING RegUnicodeStr;
	HANDLE hRegister;

	// 初始化 UNICODE_STRING 字符串
	RtlInitUnicodeString(&RegUnicodeStr,
		MY_REG_SOFTWARE_KEY_NAME);

	OBJECT_ATTRIBUTES objectAttributes;

	// 初始化objectAttributes
	InitializeObjectAttributes(&objectAttributes,
		&RegUnicodeStr,
		OBJ_CASE_INSENSITIVE, // 对大小写敏感
		NULL,
		NULL
		);

	// 打开注册表项
	NTSTATUS ntStatus = ZwOpenKey(&hRegister,
		KEY_ALL_ACCESS, 
		&objectAttributes);

	// 判断操作是否成功
	if (NT_SUCCESS(ntStatus))
	{
		KdPrint(("Open register successfully. \n"));
	}

	UNICODE_STRING ValueName;
	// 初始化 ValueName
	RtlInitUnicodeString(&ValueName,
		L"REG_DWORD value");

	// 设置 REG_DWORD 子健
	ULONG ulValue = 1000;
	ZwSetValueKey(hRegister,
		&ValueName,
		0,
		REG_DWORD,
		&ulValue,
		sizeof(ulValue));

	// 初始化 ValueName
	RtlInitUnicodeString(&ValueName, L"REG_SZ value");
	WCHAR* strValue = L"Hello world";

	// 设置 REG_SZ 子健
	ZwSetValueKey(hRegister,
		&ValueName,
		0,
		REG_SZ,
		strValue,
		wcslen(strValue) * 2 + 2
		);

	// 初始化 ValueName
	RtlInitUnicodeString(&ValueName, L"REG_BINARY value");

	UCHAR buffer[10];
	RtlFillMemory(buffer, sizeof(buffer), 0xFF);

	// 设置REG_MULTI_SZ 子健
	ZwSetValueKey(hRegister,
		&ValueName,
		0,
		REG_BINARY,
		buffer,
		sizeof(buffer)
		);
	
	// 关闭句柄
	ZwClose(hRegister);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/661966.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

非线性优化:高斯-牛顿法的原理与实现

非线性优化:高斯-牛顿法的原理与实现 引言 在实际应用中,很多问题都是非线性的。非线性优化问题广泛应用于机器学习、数据拟合、工程设计等领域。高斯-牛顿法是一种常用于解决非线性最小二乘问题的迭代算法。本文将详细介绍高斯-牛顿法的原理、推导过程…

重磅发布,2024精选《制造业商业智能BI最佳实践合集 》

在数字时代,中国制造业正面临着前所未有的深刻变革。 商业环境的复杂性与多变性、全球化竞争的激烈程度、消费需求的快速演变,以及新技术的持续进步等多种因素共同推动着制造企业积极加入数字化转型的潮流。 在这个转型的过程中,转型的速度…

超好用的加密工具

超好用的加密工具 背景 介于行业原因经常要对相关文件进行加密传输,尽可能避免文件的泄漏,保护群众的隐私。于是我就开发了一个非常好用的加密工具。 环境 本工具目前只适用 Windows 操作系统,最好是Windows8以上,否则需要下载额外的依赖…

使用PyAutoGUI识别PNG图像并自动点击按钮

在自动化测试、任务批处理等场景中,我们常常需要控制GUI程序的鼠标键盘操作。PyAutoGUI就是一个非常方便的Python模块,可以帮助我们实现这些操作。今天我们就来看看如何使用PyAutoGUI识别屏幕上的PNG图像,并自动点击图像所在位置。 C:\pythoncode\new\autoguirecongnizepng.py …

AlexNet,LeNet-5,ResNet,VGG-19,VGG-16模型

模型 AlexNet导入必要的库:加载类别名称:创建标签映射字典:加载图像数据和对应的标签:构建AlexNet模型:编译模型:训练模型: LeNet-5导入必要的库:加载类别名称:创建标签映…

程序卡在 B.处什么原因?如何处理?(串口配置无问题,重写putc无问题,但不打印)

文章目录 前提现象:debug:原因总结 前提 为了张流量券多加更一篇,是我2月份遇到的问题的总结,在我的笔记中,一直没发 现象: 已经配置好串口但不打印输出(printf指向串口1 的SR寄存器&#xf…

CentOS下安装SVN客户端及使用方法

一、前言 Subversion(SVN)是一款开源的版本控制系统,它可以帮助开发者追踪和管理代码、文档或其他文件的更改历史。在Linux系统中,特别是在CentOS环境下,安装和使用SVN客户端是日常工作中常见的任务。本文将介绍如何在…

Neovim 配置全面解析(下)

Neovim 配置全面解析(下) 原文:Neovim 配置全面解析(下) - 知乎 (zhihu.com) 环境:Ubuntu 20.04 宿主机:windows (windows terminal)WSL 2 NVIM:v 0.10.0-de…

如何解压忘记了密码的加密zip压缩包?这两个方法收藏好!

加密是一种保护信息不被未经授权访问的重要手段。ZIP压缩包作为一种常见的文件压缩格式,zip文件加密是很多人都回去做的一件事情,那么zip加密文件如何解密?有几种方法可以解密呢?今天介绍几种方法给大家。 一、尝试常用密码 我们…

【Python】解决Python报错:TypeError: ‘xxx‘ object does not support item assignment

🧑 博主简介:阿里巴巴嵌入式技术专家,深耕嵌入式人工智能领域,具备多年的嵌入式硬件产品研发管理经验。 📒 博客介绍:分享嵌入式开发领域的相关知识、经验、思考和感悟,欢迎关注。提供嵌入式方向…

【busybox记录】【shell指令】unlink

目录 内容来源: 【GUN】【unlink】指令介绍 【busybox】【unlink】指令介绍 【linux】【unlink】指令介绍 使用示例: 删除文件 - 默认 常用组合指令: 指令不常用/组合用法还需继续挖掘: 内容来源: GUN &#x…

xcode依赖包package已经安装,但是提示No such module ‘Alamofire‘解决办法

明明已经通过xcode自带的swift包管理器安装好了依赖包,但是却还是提示:No such module,这个坑爹的xcode,我也只能说服气,但是无奈,没办法攻打苹果总部,只能自己想解决办法了 No such module Ala…

ClickHouse 与其他数仓架构的对比——Clickhouse 架构篇(四)

文章目录 前言ClickHouse与Hive的对比计算引擎的差异ClickHouse比Hive查询速度快的原因 ClickHouse与HBase的对比HBase的存储系统与ClickHouse的异同HBase的适用场景及ClickHouse不适合的原因 ClickHouse与Kylin的对比Kylin的架构Kylin解决性能问题的思路Kylin方案的缺陷ClickH…

图片处理软件有哪些?这三款软件好用

图片处理软件有哪些?在当今这个数字化时代,图片处理软件成为了我们日常生活和工作中不可或缺的工具。无论是为了修饰个人照片,还是为了设计专业海报,这些软件都能帮助我们轻松实现创意和美化。那么,究竟有哪些热门的图…

CEEMDAN +组合预测模型(CNN-Transfromer + XGBoost)

注意:本模型继续加入 组合预测模型全家桶 中,之前购买的同学请及时更新下载! 往期精彩内容: 时序预测:LSTM、ARIMA、Holt-Winters、SARIMA模型的分析与比较-CSDN博客 VMD CEEMDAN 二次分解,Transformer-BiGRU预测模…

read test

功能性语言: 在.sh脚本下,read -p ——答应 read -t 时间 ——时间完成限制 特别注意空格。 test -n测试是内容一定要加双引号。 test 变量1 -ne 变量2 即比较大小。

视频汇聚EasyCVR平台视图库GA/T 1400协议与GB/T 28181协议的区别

在公安和公共安全领域,视频图像信息的应用日益广泛,尤其是在监控、安防和应急指挥等方面。为了实现视频信息的有效传输、接收和处理,GA/T 1400和GB/T 28181这两个协议被广泛应用。虽然两者都服务于视频信息处理的目的,但它们在实际…

22net冒泡排序与插入排序

冒泡排序 观看视频 【python练习题】每日一练_第八天_冒泡排序_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1QT4y197pa/?spm_id_from333.337.search-card.all.click&vd_source498ae9e9c7a8a7d16da872c9d74cdc38PS:视频中用的了numpy库,大…

10W QPS高并发,如何防止重复下单?

小北说在前面 10wqps高并发,如何防止重复提交/支付订单? 10wqps高并发,如何防止重复下单? 10wqps高并发,如何防止重复支付? 10wqps高并发,如何解决重复操作问题? 最近有小伙伴在面试…

这有一封“数字赋能 强农兴村”的邀请函,请查收→

2024年6月5日至7日,以“数字赋能 强农兴村”为主题的2024中国(南京)数字乡村博览会暨第八届中国(南京)国际智慧农业博览会将在江苏南京举办。珈和科技在农业AI大数据展区的H16展位与您相约,共襄盛会。 私信…