核心與驅動 05 登錄檔

2021-10-02 20:00:19 字數 4174 閱讀 7169

應用程式設計中的子健

驅動中對應的路徑寫法

hkey_local_machine

\registry\machine

hkey_users

\registry\user

hkey_classes_root

沒有對應的路徑

hkey_current_user

沒有簡單的對應路徑,但是可以求得

函式名作用

zwcreatekey

建立或開啟乙個鍵

zwopenkey

開啟乙個鍵

zwqueryvaluekey

讀取鍵值

zwsetvaluekey

寫入鍵值

zwdeletekey

刪除key

zwdeletevaluekey

刪除鍵值

zwquerykey

讀取鍵的資訊

ntatatus zwoptnkey

( out phandle keyhandle,

in access_mask desiredaccess,

in pobject_attributes objectattributes

);

描述key_query_value

讀取鍵下的值

key_set_value

設定鍵下的值

key_create_sub_key

生成子子鍵

key_enumerate_sub_keys

列舉子鍵

key_read

乙個組合好的巨集,可以直接用對應的還有key_write,key_all_access

ntstatus zwqueryvaluekey

( in handle keyhandle,

//登錄檔鍵控制代碼

in punicode_string valuename,

//要讀取的值的名字

in key_value_information_class keyvalueinformationclass,

//索要查詢的資訊型別

out pvoid keyvalueinformation,

in ulong length,

//輸入空間的長度

out pulong resultlength //返回實際需要的長度

);

資訊

說明keyvaluebasicinformation

獲得基礎資訊,包含值名和型別

keyvaluefullinformation

獲得完整資訊,包含值名、型別和值的資料

keyvaluepartialinformation

獲得區域性資訊,包含型別和值的資料(最常用)

typedef

enum _key_information_class key_information_class;

typedef

struct

_key_value_partial_information

( ulong titileindex;

//請忽略這個成員

ulong type;

//資料型別

ulong datalength;

//資料長度

uchar data[1]

;//可變長度的資料

)key_value_partial_information,

*pkey_value_partial_information;

ntstatus zwsetvaluekey

( in handle keyhandle,

in punicode_string valuename,

in ulong titileindex optional,

in ulong type,

in pvoid data,

in ulong datasize);

//引數解釋:

//1. 其中keyhandle、valuename兩個引數和zwqueryvaluekey中的引數相同。

//2. data和datasize:data是寫入的資料的開始位址,datasize是要寫入資料的長度。data型別為pvoid空指標,所以data可以指向任何的資料

含義reg_binary

任何形式的二進位制資料

reg_dword

乙個四位元組的數值

reg_link

命名符號鏈結的unicode字串

reg_none

沒有特定型別的資料

reg_sz

空終止的unicode字串

//函式用來獲取乙個鍵

ntstatus myzwopenkey

(phandle hkey, punicode_string pkeypath)

;initializeobjectattributes

(&objattribute, pkeypath, obj_case_insensitive,

null

,null);

//開啟key

ntstatus status = status_success;

status =

zwopenkey

(hkey, key_read,

&objattribute)

;return status;

}

ntstatus myzwqueryvaluekey

(handle hkey,punicode_string pkeyname)

//讀取成功,申請空間,再次讀取

pinfo =

(pkey_value_partial_information)

exallocatepoolwithtag

(nonpagedpool, length,

'tag1');

status =

zwqueryvaluekey

(hkey, pkeyname, keyvaluepartialinformation, pinfo, length,

&length);if

(!nt_success

(status)

) unicode_string strinfo;

rtlinitunicodestring

(&strinfo, pinfo->data)

;//輸出鍵名稱

kdprint((

"鍵的值為:%wz\n"

,&strinfo));

exfreepool

(pinfo)

;return status;

}

//寫入鍵值

ntstatus myzwsetvaluekey

(handle hkey,punicode_string pkeyname, punicode_string pkeyvalue)

//列舉所有子項

void myzwenumallkey

(handle hkey)

exfreepool

(pinfo);}

__except (exception_execute_handler)

}

//列舉對應項下的所有子健

void myzwenumallvaluekey

(handle hkey)

pkey_full_information pinfo =

(pkey_full_information)

exallocatepoolwithtag

(nonpagedpool, size,

'tag4');

zwquerykey

(hkey, keyfullinformation, pinfo, size,

&size)

; __try

} __except (exception_execute_handler)

exfreepool

(pinfo)

;}

驅動層登錄檔操作

在使用者態下面,有大把的api可供我們操作登錄檔,例如regopenkey,regclosekey等,這些api都是由windows提供給使用者態使用的api。那麼對於驅動層了,因為驅動程式設計,並沒有哪個能夠提供額外的庫可供我們呼叫,肯定是不能呼叫如regopenkey等這些api函式,那難道核心...

核心查詢登錄檔鍵值

include void driverunload in pdriver object driverobject boolean querykeyinfo pcwstr path,pcwstr name rtlinitunicodestring keyname,name 要查詢的鍵值名字 試探性,返...

驅動中登錄檔的作用

登錄檔主要鍵的作用 hkey local machine drivers active 所有已經載入的驅動資訊都放在該鍵下 hkey local machine drivers active 所有要device.exe 載入的驅動都放在該鍵下面 驅動主要鍵的作用 dll 指明了該驅動使用的動態庫 p...