Windows内核函数 - 创建关闭注册表

        在驱动程序的开发中,经常会用到对注册表的操作。与Win32的API不同,DDK提供另外一套对注册表操作的相关函数。首先明确一下注册表里的几个概念,避免在后面混淆。

图1 注册表概念

有5个概念需要重申一下:
* 注册表项: 注册表中的一个项目,类似目录的概念。每个项中存储多个二元结构,键名-键值。每个项中,可以有若干个子项。
* 注册表子项:类似于目录中的子目录。
* 键名:通过键名可以寻找到相应的键值。
* 键值类别:每个键值存储的时候有不同的类别,可以是整型、字符串等数据。
* 键值:键名下对应存储的数据。

创建关闭注册表

和文件操作类似,对注册表操作首先要获取一个注册表句柄。对注册表的操作都需要根据这个句柄进行操作。可以通过 ZwCreateKey 函数获得打开的注册表句柄。这个函数打开注册表后,并返回一个操作句柄。其函数声明如下:

NTSTATUS ZwCreateKey(OUT PHANDLE KeyHandle,IN ACCESS_MASK DesiredAccess,IN POBJECT_ATTRIBUTES ObjectAttributes,IN ULONG TitleIndex,IN PUNICODE_STRING Class,IN ULONG CreateOptions,OUT PULONG Disposition);
// KeyHandle: 获得的注册表句柄
// DesiredAccess:访问权限,一般设置为 KEY_ALL_ACCESS
// ObjectAttributes: OBJECT_ATTRIBUTES 数据结构
// TitleIndex: 很少用到,一般设置为0
// Class: 很少用到,一般设置为NULL
// CreateOptions:创建时的选项,一般设置为REG_OPTION_NON_VOLATILE.
// Disposition: 返回是创建成功,还是打开成功,返回值是REG_CREATED_NEW_KEY 或者是REG_OPENED_EXISTING_KEY.
// 返回值: 返回是否创建成功

如果ZwCreateKey指定的项目部存在,则直接创建这个项目,并利用Disposition参数返回 REG_CREATED_NEW_KEY。如果该项目已经存在了, Disposition参数返回 REG_OPENED_EXISTING_KEY。以下的代码演示了如何使用ZwCreateKey函数打开注册表。

	UNICODE_STRING RegUnicodeStr;HANDLE hRegister;// 初始化 UNICODE_STRING 字符串RtlInitUnicodeString(&RegUnicodeStr, NY_REG_SOFTWARE_KEY_NAME);OBJECT_ATTRIBUTES objectAttributes;// 初始化 objectAttriInitializeObjectAttributes(&objectAttributes,&RegUnicodeStr,OBJ_CASE_INSENSITIVE,NULL,NULL);ULONG ulResult;// 创建文件NTSTATUS ntStatus = ZwCreateKey(&hRegister,KEY_ALL_ACCESS,&objectAttributes,0,NULL,REG_OPTION_NON_VOLATILE,&ulResult);if (!NT_SUCCESS(ntStatus)){// 判断是被先创建,还是已经被创建if (ulResult == REG_CREATED_NEW_KEY){KdPrint(("The register item is created\n"));}else if (ulResult == REG_OPENED_EXISTING_KEY){KdPrint(("The register item has been created, and now is opened\n"));}}// 创建或打开某注册表项目的子项UNICODE_STRING subRegUnicodeString;HANDLE hSubRegister;// 初始化UNICODE_STRING字符串RtlInitUnicodeString(&subRegUnicodeString, L"SubItem");OBJECT_ATTRIBUTES subObjectAttributes;// 初始化subObjectAttributesInitializeObjectAttributes(&subObjectAttributes,&subRegUnicodeString,OBJ_CASE_INSENSITIVE,hRegister,NULL);// 创建或打开注册表项目 ZwCreateKeyntStatus = ZwCreateKey(&hSubRegister, KEY_ALL_ACCESS, &subObjectAttributes, 0, NULL, REG_OPTION_VOLATILE, &ulResult);if (NT_SUCCESS(ntStatus)){// 判断是被新创建,还是已经被创建if (ulResult == REG_CREATED_NEW_KEY){KdPrint(("The register item is created\n"));}else if (ulResult == REG_OPENED_EXISTING_KEY){KdPrint(("The register item has been created, and now is opened\n"));}}// 关闭注册表ZwClose(hRegister);ZwClose(hSubRegister);


 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

unity接入live2d

在bilibili上找到一个教程,首先注意一点,你直接导入那个sdk,并且打开示例,显示的模型是有问题的,你需要调整模型上脚本的一个枚举值,调整它的渲染顺序是front z to我看教程时候,很多老师都没有提…

Android Compose 九:interactionSource 的使用

先上官方文档 InteractionSource InteractionSource represents a stream of Interactions corresponding to events emitted by a component. These Interactions can be used to change how components appear in different states, such as when a component is pressed or…

温故而知新-Spring篇【面试复习】

温故而知新-Spring篇【面试复习】 前言版权推荐温故而知新-Spring篇IOCAOP循环依赖springboot如果要对属性文件中的账号密码加密如何实现?SpringBoot的优点Spring Boot 的核心注解是哪个?它主要由哪几个注解组成的? 最后 前言 2023-7-31 15:…

Java RMI

RMI - 安全篇 RMI分为三个主体部分: *Client-客户端*:客户端调用服务端的方法 *Server-服务端*:远程调用方法对象的提供者,也是代码真正执行的地方,执行结束会返回给客户端一个方法执行的结果。 *Registry-注册中心…

python双色球选号程序的实现与解析

新书上架~👇全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一、引言:双色球选号游戏的魅力 二、程序设计与实现 1. 生成红色球号码 2. 生…

3.游戏中自定义数据类型的解读分析

知识来源于腾讯课堂易道云 结构的解释: 计算机里的所有东西都是用二进制表示的,二进制是数字,我们用的阿拉伯数字0-9这个数字是十进制,计算机用的是二进制只有0或1,然后都是一堆0或1的数字,游戏中怎么把这…

AD使用问题

设计流程: 1.先创建项目——添加原理图,原理图库,PCB,PCB库 2.画原理图库和封装库 主要有三种方法: (1)手动画库和封装,常常用于嘉立创查询不到的器件 (2&#xff0…

双机多网口配置同网段地址,可以通过目的IP确定接收数据的网卡吗?

环境 两台机器两网卡同网段接入同一个二层交换机。 机器A ens38 00:0c:29:a4:8b:fb 10.0.0.11/24 ens39 00:0c:29:a4:8b:05 10.0.0.12/24 机器B ens38 00:0c:29:4f:a6:c4 10.0.0.21/24 ens39 00:0c:29:4f:a6:ce 10.0.0.22/24 初始ARP表 只有管理口接口的ARP表项&#xff0c…

浙江大学数据结构MOOC-课后习题-第十讲-排序4 统计工龄

题目汇总 浙江大学数据结构MOOC-课后习题-拼题A-代码分享-2024 题目描述 测试点 思路分析 这道题很明显就是利用桶排序的思路 受到课程内容的影响,我一开始是想着建立一个链表数组,数组内每个元素下方都存放链表,最后再遍历统计输出。 但是&…

【华为OD机试-C卷D卷-200分】反射计数(C++/Java/Python)

【华为OD机试】-(A卷+B卷+C卷+D卷)-2024真题合集目录 【华为OD机试】-(C卷+D卷)-2024最新真题目录 题目描述 给定一个包含 0 和 1 的二维矩阵。 给定一个初始位置和速度,一个物体从给定的初始位置出发,在给定的速度下进行移动,遇到矩阵的边缘则发生镜面发射。 无论物体…

Android和flutter交互,maven库的形式导入aar包

记录遇到的问题,在网上找了很多资料,都是太泛泛了,使用后,还不能生效,缺少详细的说明,或者关键代码缺失,我遇到的问题用红色的标注了 导入aar包有两种模式 1.比较繁琐的,手动将aar…

The Sandbox DAO:投票决定元宇宙的未来!

赋予用户治理权,打造由社群运营的开放式数码国度 随着The Sandbox DAO的启动,我们邀请全球社群——这个新数字国度的公民们——提出建议并参与治理,共同塑造开放元宇宙的未来。 介绍 在The Sandbox,我们正在建立一个开放的元宇宙…

opencv c++编程基础

1、图片的本质 图像在 OpenCV 中的本质 在 OpenCV 中,图像被表示为一个多维数组,其中每个元素对应于图像中的单个像素。图像的维度取决于其通道数和像素数。 **通道数:**图像可以有多个通道,每个通道存储图像的不同信息。例如&…

李廉洋:5.22黄金原油高位震荡,今日最新行情分析策略。

黄金消息面分析:根据4月份的通胀数据,加拿大央行6月5日降息应该是“理所当然的”。加拿大的整体通货膨胀率在4月份降至2.7%,为自2021年初以来的最低水平,核心CPI中加拿大央行的两项首选数据均降至3%以下。加拿大央行在决定降息之前…

鸿蒙学习第一课--认识目录结构

项目结构介绍 module.json5 src > main > module.json5:Stage模型模块配置文件。主要包含HAP包的配置信息、应用/服务在具体设备上的配置信息以及应用/服务的全局配置信息。具体的配置文件说明,详见module.json5配置文件。 资源分类和访问 关于s…

awk编辑器

目录 工作原理 命令格式 普通格式 BEGIN格式 语句循环格式 awk常见的内建变量(可直接用) 按行打印行内容 统计行数量 按字段输出文本 通过管道、双引号调用 Shell 命令 awk编辑器是一种流编辑器 工作原理 逐行读取文本,默认以空格或tab键为分…

java第十八课 —— 重载、可变参数

方法重载 基本介绍 java 中允许同一个类中,多个同名方法的存在,但要求形参列表不一致! 比如:System.out.println(); out 是 PrintStream 类型 重载的好处 减轻了起名的麻烦减轻了记名的麻烦 注意事项和使用细节 方法名&…

【Vue】Vue2中的Vuex

目录 Vuex介绍Vuex 中的核心概念 在vue2中使用Vuex安装 Vuex创建一个 Vuex Store在 Vue 实例中使用 Vuex编写 Vuex 的 state、mutations 和 actions在组件中使用 Vuex Vuex的核心State组件中获取 Vuex 的状态mapState 辅助函数对象展开运算符 Getter基本使用示例 通过属性访问通…

从多站点到多活,XEOS 对象数据容灾能力再提升

近日, XSKY SDS V6.4 新版本发布,其中 XEOS V6.4 全新升级并完善了统一命名空间功能,更进一步增强和完善了异地容灾方案,配合强一致代理读,可以实现异地多活;同时大幅降低管理复杂度,有效降低容…

TikTok电商带货特训营,跟随时代潮流,跨境掘金(8节课)

课程内容: 1-先导课 2-一、店铺运营认知与思路 3-二、店铺风控注意事项 4-三、美区Tiktok前期工作-1店铺入驻模式 5-三、美区Tiktok前期工作-2指纹浏览器介绍 6-三、美区Tiktok前期工作-4绑定电话号码 7-三、美区Tiktok前期工作-5添加仓库地址 8-三、美区Ti…