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

server/2024/9/24 8:23:10/

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

        表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/server/46399.html

相关文章

微信小程序的tabbar怎么配置

微信小程序的tabBar配置是在全局配置文件app.json中进行的,主要用于设置小程序底部的导航栏效果。以下是一个清晰的tabBar配置步骤和示例: 1. 打开app.json文件 这个文件位于小程序项目的根目录下,是微信小程序的全局配置文件。 2. 添加或…

算法(十一)贪婪算法

文章目录 算法简介算法概念算法举例 经典问题 -背包问题 算法简介 算法概念 贪婪算法(Greedy)是一种在每一步都采取当前状态下最好的或者最优的选择,从而希望导致结果也是全局最好或者最优的算法。贪婪算法是当下局部的最优判断&#xff0c…

React Native 之 react-native-share(分享)库 (二十三)

react-native-share 是一个流行的 React Native库,它允许你在移动应用中分享文本、链接、图片等内容到各种社交网络和消息应用。以下是对其原理的简要概述以及代码示例的解析。 代码示例解析 1. 安装 npm install react-native-share # 或者 yarn add react-n…

nessus plugins目录为空的问题

想要避免这种问题,可以将nessus服务设置为手动,并且先停止nessus服务。 批处理脚本: 下面的/~/Nessus/plugin_feed_info.inc替换成你配置好的 plugin_feed_info.inc 所在的路径 service nessusd stop; cp /~/Nessus/plugin_feed_info.inc …

小白教你搭建测试环境(docker部署版)

如何使用docker创建多数据库端口(云服务器版) 背景: 需要搭建一个测试环境,同时还需要不同的端口映射mysql端口。那么我采用的docker拉取mysql镜像,通过宿主机和docker容器端口映射完成。 准备一台云服务器服务器安装…

云服务器重启后无法访问phpMyAdmin的解决方案

一、背景 我在解决另一问题的时候,重启了云服务器。当我想再次访问phpMyAdmin时,出现了如下报错。 HTTPConnectionPool(host127.0.0.1, port888): Max retries exceeded with url: /phpmyadmin_609a02b02423214c/index.php?langzh_cn (Caused by Ne…

【学习Day4】计算机基础

✍🏻记录学习过程中的输出,坚持每天学习一点点~ ❤️希望能给大家提供帮助~欢迎点赞👍🏻收藏⭐评论✍🏻指点🙏 ❤️学习和复习的过程是愉快嘚。 1.7.3 流水线 流水线(pipeline)技术…

PySide6 GUI 学习笔记——常用类及控件使用方法(常用类坐标点QPoint)

控件是PySide设计好的能承载用户输入、输出的小窗体,将多个控件有机整合,能形成用户所需要的界面。而每一个控件,都有属于自己的属性、方法、信号、槽函数和事件(event),且控件与控件之间又有继承关系。 G…