\\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時,會阻斷大部分執行緒執行,防止執行出錯...