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.pswp.cn/bicheng/18351.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/18351.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/18351.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

008、字符串_內部編碼

字符串類型的內部編碼有3種: int:8個字節的長整型。 embstr:小于等于39個字節的字符串。 raw:大于39個字節的字符串。 Redis會根據當前值的類型和長度決定使用哪種內部編碼實現。 整數類型示例如下: 127.0.0.1:6379&…

使用 MyBatis-Plus 的 IService 進行模糊查詢操作

使用 MyBatis-Plus 的 IService 進行模糊查詢操作 一、前言1. 普通模糊查詢(like)2. 左模糊查詢(likeLeft)3. 右模糊查詢(likeRight)4. 不匹配指定字符串的模糊查詢(notLike) 一、前…

unity接入live2d

在bilibili上找到一個教程,首先注意一點,你直接導入那個sdk,并且打開示例,顯示的模型是有問題的,你需要調整模型上腳本的一個枚舉值,調整它的渲染順序是front z to我看教程時候,很多老師都沒有提…

常用匯編指令

(arg)argument:自變量,變元 (reg)register:寄存器 (seg)segment:段寄存器 (mem)memory:存儲器(內存單元&am…

什么是 BIO、NIO、AIO?

BIO、NIO、AIO 都是 Java 的 IO 模型 BIO (Blocking IO) 是傳統的 IO 模型,它在讀寫數據時會阻塞線程,直到數據讀寫完成,適用于并發不高的場景。 NIO (Non-blocking IO) 是 Java 的新 IO 模型,它在讀寫數據時不會阻塞線程&#…

Flutter 中的 AnimatedPositionedDirectional 小部件:全面指南

Flutter 中的 AnimatedPositionedDirectional 小部件:全面指南 在 Flutter 中,AnimatedPositionedDirectional 是一個用于創建具有方向感知的動畫定位效果的組件。它允許開發者在動畫過程中動態地改變子組件的位置,并且可以指定動畫的方向&a…

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…

數據庫技術都涵蓋那些內容

數據庫技術涵蓋了關系型數據庫(RDBMS)、非關系型數據庫(NoSQL)以及數據庫管理系統(DBMS)的其他方面。以下是一些我熟悉的數據庫技術: 關系型數據庫(RDBMS) MySQL&#…

溫故而知新-Spring篇【面試復習】

溫故而知新-Spring篇【面試復習】 前言版權推薦溫故而知新-Spring篇IOCAOP循環依賴springboot如果要對屬性文件中的賬號密碼加密如何實現?SpringBoot的優點Spring Boot 的核心注解是哪個?它主要由哪幾個注解組成的? 最后 前言 2023-7-31 15:…

Java RMI

RMI - 安全篇 RMI分為三個主體部分: *Client-客戶端*:客戶端調用服務端的方法 *Server-服務端*:遠程調用方法對象的提供者,也是代碼真正執行的地方,執行結束會返回給客戶端一個方法執行的結果。 *Registry-注冊中心…

詞嵌入nn.embedding的解釋

一、embedding如何處理文本 在NLP任務中,首先要對文本進行處理,將文本進行編碼轉換,形成向量表達,embedding處理文本的流程如下: (1)輸入一段文本,中文會先分詞(如jieb…

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 的二維矩陣。 給定一個初始位置和速度,一個物體從給定的初始位置出發,在給定的速度下進行移動,遇到矩陣的邊緣則發生鏡面發射。 無論物體…

算法訓練營第四十二天 | LeetCode 42 不同路徑、LeetCode 63 不同路徑 II

LeetCode 62 不同路徑 這題首先確定下dp數組下標和含義。主要有兩種方式,一種是按照位置在數組中下標直接確定,另一種是依據遞推時邊上的位置需要再往上和往左遞推時會出界,將位置設為序號而非下標。這一題第二種方式會比較好一些。遞推邏輯也…

Android和flutter交互,maven庫的形式導入aar包

記錄遇到的問題,在網上找了很多資料,都是太泛泛了,使用后,還不能生效,缺少詳細的說明,或者關鍵代碼缺失,我遇到的問題用紅色的標注了 導入aar包有兩種模式 1.比較繁瑣的,手動將aar…

The Sandbox DAO:投票決定元宇宙的未來!

賦予用戶治理權,打造由社群運營的開放式數碼國度 隨著The Sandbox DAO的啟動,我們邀請全球社群——這個新數字國度的公民們——提出建議并參與治理,共同塑造開放元宇宙的未來。 介紹 在The Sandbox,我們正在建立一個開放的元宇宙…