x64驅動操作登錄檔

2021-10-08 19:47:42 字數 3121 閱讀 3121

\\registry\\machine\\software\\test
handle create_regedit_dir

(unicode_string registrypath)

;initializeobjectattributes

(&objectattributes,

// 返回 object_attributes 結構體指標

®istrypath,

// 登錄檔路徑

obj_case_insensitive,

// 第二個引數不區分大小寫

null

,// 根物件目錄的控制代碼

null

// 安全描述符);

// 建立登錄檔目錄

handle h_register =

null

; ulong create_or_open =0;

if(zwcreatekey

(&h_register,

// 接收登錄檔鍵控制代碼的指標

key_all_access,

// 訪問許可權

&objectattributes,

// object_attributes 物件0,

// 裝置和驅動程式將此引數置 0

null

,// 登錄檔鍵物件類名

reg_option_non_volatile,

// 重啟保留,(不保留:reg_option_volatile)

&create_or_open // 建立新登錄檔,還是開啟現有登錄檔

)!= status_success)

return h_register;

badend:

if(h_register)

zwclose

(h_register)

;return0;

}

handle open_regedit_dir

(unicode_string registrypath)

;initializeobjectattributes

(&objectattributes,

// 返回 object_attributes 結構體指標

®istrypath,

// 登錄檔路徑

obj_case_insensitive,

// 第二個引數不區分大小寫

null

,// 根物件目錄的控制代碼

null

// 安全描述符);

// 開啟登錄檔鍵

handle h_register =

null;if

(zwopenkey

(&h_register,

// 接收登錄檔鍵控制代碼

key_all_access,

// 訪問許可權

&objectattributes // object_attributes 物件

)!= status_success)

return h_register;

badend:

if(h_register)

zwclose

(h_register)

;return0;

}

boolean get_regedit_value

(handle hreg, unicode_string keyname)

dbgprint

("[lysm] size:%d. \n"

, size)

;// 讀登錄檔

pvpi =

(pkey_value_partial_information)

exallocatepool

(pagedpool, size);if

(pvpi ==

null)if

(zwqueryvaluekey

( hreg,

// 登錄檔控制代碼

&keyname,

// 登錄檔鍵名

keyvaluepartialinformation,

// 讀取部分資訊

pvpi,

// 接收資訊的緩衝區指標

size,

// 緩衝區大小

&size // 實際接收的首席資訊官度

)!= status_success)

dbgprint

("[lysm] size:%d. \n"

, size)

;// 列印

switch

(pvpi-

>type)

break

;case reg_dword:

dbgprint

("[lysm] reg_dword:%x \n",*

(pdword32)pvpi-

>data)

;break

;case reg_qword:

dbgprint

("[lysm] reg_qword:%p \n",*

(pdword64)pvpi-

>data)

;break

;case reg_multi_sz:

dbgprint

("[lysm] reg_multi_sz:%s \n"

,pvpi-

>data)

;break

;case reg_expand_sz:

dbgprint

("[lysm] reg_expand_sz:%s \n"

, pvpi-

>data)

;break

;default

:break;}

return true;

badend:

if(pvpi)

return false;

}

boolean set_regedit_value

(handle hreg, unicode_string keyname,wchar value)

return true;

}

參考:

NSIS訪問X64登錄檔

nsis生成的安裝程式是32位程式,在64位系統上訪問登錄檔會重定向到wow6432node.使用 setregview 64 將允許安裝程式在 x64 中訪問登錄檔鍵值。它將影響deleteregkey,deleteregvalue,enumregkey,enumregvalue,readregd...

驅動層登錄檔操作

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

x64驅動 關閉 開啟 寫時保護

在核心裡想要寫入 別人的 記憶體 一般指 ntos 等系統模組的記憶體空間 需要遵守乙個規則 irql和記憶體保護。一般來說,要寫入 別人的 核心記憶體,必須關閉記憶體寫保護,並把 irql提公升到 2 才行 絕大多數候時候 irql 都為 0 當irql 2時,會阻斷大部分執行緒執行,防止執行出錯...