應用程式設計中的子健
驅動中對應的路徑寫法
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...