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

ops/2024/10/21 15:30:44/

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

        表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;// 初始化objectAttributesInitializeObjectAttributes(&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;// 初始化 ValueNameRtlInitUnicodeString(&ValueName,L"REG_DWORD value");// 设置 REG_DWORD 子健ULONG ulValue = 1000;ZwSetValueKey(hRegister,&ValueName,0,REG_DWORD,&ulValue,sizeof(ulValue));// 初始化 ValueNameRtlInitUnicodeString(&ValueName, L"REG_SZ value");WCHAR* strValue = L"Hello world";// 设置 REG_SZ 子健ZwSetValueKey(hRegister,&ValueName,0,REG_SZ,strValue,wcslen(strValue) * 2 + 2);// 初始化 ValueNameRtlInitUnicodeString(&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);


http://www.ppmy.cn/ops/45246.html

相关文章

大创项目推荐 深度学习机器视觉车道线识别与检测 -自动驾驶

文章目录 1 前言2 先上成果3 车道线4 问题抽象(建立模型)5 帧掩码(Frame Mask)6 车道检测的图像预处理7 图像阈值化8 霍夫线变换9 实现车道检测9.1 帧掩码创建9.2 图像预处理9.2.1 图像阈值化9.2.2 霍夫线变换 最后 1 前言 🔥 优质竞赛项目系列,今天要分…

【Linux】Socket中的心跳机制(心跳包)

Socket中的心跳机制(心跳包) 1. 什么是心跳机制?(心跳包) 在客户端和服务端长时间没有相互发送数据的情况下,我们需要一种机制来判断连接是否依然存在。直接发送任何数据包可以实现这一点,但为了效率和简洁,通常发送一个空包&am…

PS系统教学02

多个图片同时进行打开 在素材库里面选中两张图片,直接拖进PS软件中,此时会显示其中一张。当按下回车键会显示另一张。 当图层过多,需要进行选择,其中某一张图片,按住Ctrl键,进行选择点击,可以移…

三层交换机基本配置,动态路由链接

<Huawei>system-view //进入系统视图[Huawei]undo info-center enable //关日志[Huawei]vlan batch 2 3 //创建vlan2与3[Huawei]display vlan //检查[Huawei]interface GigabitEthernet 0/0/2 //进2口[Huawei-GigabitEthernet0/0/2]port link-type access //配置…

原神抽卡点名程序教程(直接下载用)

今天我要给大家分享一个在抖音上特别火的视频——原神抽卡点名程序教程。 废话不多说&#xff0c;直接上链接 &#xff1a;--点击下载原神抽卡程序 步骤1&#xff1a; 步骤2&am…

转发和重定向

目录 是什么 转发&#xff08;Forwarding&#xff09; 概念 特点 实现方式 重定向&#xff08;Redirecting&#xff09; 概念 特点 实现方式 转发和重定向区别整理 转发和重定向的适用场景 转发&#xff08;Forwarding&#xff09; 重定向&#xff08;Redirect&am…

MySQL性能优化:从基础到高级技巧

前言 在当今的IT世界中&#xff0c;数据库的性能优化是确保应用流畅运行的关键。MySQL作为最流行的关系型数据库之一&#xff0c;其性能优化尤为重要。本文将从基础到高级技巧&#xff0c;全面介绍如何对MySQL进行性能优化。 MySQL性能优化&#xff1a;从基础到高级技巧 第一…

LPDDR6带宽预计将翻倍增长:应对低功耗挑战与AI时代能源需求激增

在当前科技发展的背景下&#xff0c;低能耗问题成为了业界关注的焦点。国际能源署(IEA)近期报告显示&#xff0c;日常的数字活动对电力消耗产生显著影响——每次Google搜索平均消耗0.3瓦时&#xff08;Wh&#xff09;&#xff0c;而向OpenAI的ChatGPT提出的每一次请求则消耗2.9…