API 登錄檔程式設計

2022-03-24 00:22:14 字數 4771 閱讀 4691

首先來認識一下鍵,項,值吧:

左邊有五個根鍵

hkey_classes_root

hkey_current_user

hkey_local_machine

hkey_user

hkey_current_config

根鍵展開後可以看到子健:像 "software, microsoft, windows, currentversion 等都是子健。

而最後一級便不是子健了,而是項:run。

「名稱欄」 下方的都稱為鍵值項

「型別欄」 下方的都稱為鍵值項的型別

「資料欄」 下方的都稱為 鍵值項的鍵值

regcreatekeyex() 介紹:

功能:建立或開啟登錄檔鍵。

函式原型:long regcreatekeyex(

hkey hkey,        // 鍵的控制代碼 (regcreatekey, regcreatekey() 的返回值) 或者 預定義的值( 即五個根鍵)。

lpctstr lpsubkey,   // 指向 要建立或要開啟的子健名稱。

dword reserved,     // 保留值必須為 0,

lptstr lpclass,     // 指向乙個字串,該字串定義了該鍵的型別。可以為空。

dword dwoptions,  //  新建立的鍵的屬性。

regsam samdesired,   // 鍵的訪問許可權。

lpsecurity_attributes lpsecurityattributes,   // 指向 security_attributes 結構的指標。

// 定義返回的控制代碼是否可以被子程序繼承,為 null 表示不繼承。

phkey phkresult,                 // 指向新建立或開啟的鍵的控制代碼的指標,儲存返回的控制代碼。

lpdword lpdwdisposition  //  指明鍵是被建立還是被開啟的

);(入參,即輸入的引數。出參,即輸出的引數)

引數:dwoptions

reg_option_non_volatile 新建立的鍵為乙個非短暫性的鍵 (資料資訊儲存在檔案中,當系統重新啟動時,資料資訊恢復)

reg_option_volatile 新建立的鍵為乙個短暫性的鍵(資料資訊儲存在記憶體中)。

reg_option_backup_restore 僅在winnt中支援,可以提供優先順序支援。

引數:samdesired

key_create_link 准許生成符號鍵

key_create_sub_key 准許生成子鍵

key_enumerate_sub_keys 准許生成列舉子鍵

key_execute 准許進行讀操作

key_notify 准許更換通告

key_query_value 准許查詢子鍵

key_all_access 提供完全訪問,是上面數值的組合

key_read 是下面數值的組合:

key_query_value、key_enumerate_sub_keys、key_notify

key_set_value 准許設定子鍵的數值

key_write 是下面數值的組合:

key_set_value、key_create_sub_key

引數:lpdwdisposition (出參)

reg_created_new_key 鍵先前不存在,現在被建立。

reg_opened_existing_key 鍵先前已存在,現在被開啟。

返回值:如果函式呼叫成功,則返回 error_success。否則返回非零的錯誤**。

regopenkeyex() 介紹:

功能:開啟乙個已經存在的子健。

函式原型:lstatus regopenkeyex(

hkey   hkey,

lpcstr lpsubkey,

dword  uloptions,   // 保留值必須為 0。

regsam samdesired,

phkey  phkresult

);引數:同 regcreatekeyex()。

返回值:如果函式呼叫成功,則返回 error_success。否則返回非零的錯誤**。

regclosekey() 介紹:

功能:關閉登錄檔。

函式原型:long regclosekey(

hkey hkey // 釋放鍵的控制代碼。

);返回值:如果函式呼叫成功,則返回 error_success。否則返回非零的錯誤**。

regdeletekey() 介紹:

功能:刪除登錄檔鍵值。(不能刪除含有子健的子健)

函式原型:lstatus regdeletekey(

hkey   hkey,

lpcstr lpsubkey,

regsam samdesired,

dword  reserved   // 保留值必須為 0。

);返回值:如果函式呼叫成功,則返回 error_success。否則返回非零的錯誤**。

regqueryvalueex() 介紹:

功能:檢索乙個已開啟的登錄檔控制代碼中,指定的登錄檔鍵的型別和設定值。

函式原型:lstatus regqueryvalueexa(

hkey  hkey,  // 已開啟項的控制代碼,或者指定乙個標準項名。

lpcstr  lpvaluename,  // 要查詢登錄檔鍵值的名字字串,登錄檔鍵的名字,以空字元結束。

lpdword  lpreserved,  // 保留值必須為 0。

lpdword  lptype,  //用於裝載取回資料型別的乙個指標變數。

lpbyte  lpdata,  //用於裝載指定值的乙個緩衝區,可以為空。

lpdword  lpcbdata  //用於裝載 lpdata 緩衝區長度的乙個變數。一旦返回,它會設為實際裝載到緩衝區的位元組數。

// 若 lpdata 為 null, 則也為 null。

);引數:lptype為乙個指向資料型別的指標,資料型別為下列型別之一:

reg_binary 二進位制資料

reg_dword 32位整數

reg_dword_little_endian little-endian格式的資料,例如0x12345678以(0x78 0x56 0x34 0x12)方式儲存

reg_dword_big_endian big-endian格式的資料,例如0x12345678以(0x12 0x34 0x56 0x78)方式儲存

reg_expand_sz 乙個包含未擴充套件環境變數的字串

reg_link 乙個unicode型別的鏈結

reg_mulit_sz 以兩個零結尾的字串

reg_none 無型別數值

reg_resource_list 裝置驅動資源列表

reg_sz 乙個以零結尾的字串根據函式使用的字符集型別的不同而設定為unicode或ansi型別的字串。

返回值:如果函式呼叫成功,則返回 error_success。否則返回非零的錯誤**。

regsetvalueex() 介紹:

功能:在登錄檔項下設定指定值的資料和型別。

函式原型:long regsetvalueex(

hkey hkey,

lpctstr lpvaluename,

dword reserved,// 保留值必須為0。

dword dwtype,

const byte *lpdata,

dword cbdata

);引數:同 regqueryvalueex()。

返回值:如果函式呼叫成功,則返回 error_success。否則返回非零的錯誤**。

regdeletevalue() 介紹:

功能:刪除指定項下方的乙個值。

函式原型:lstatus regdeletevalue(

hkey   hkey,

lpcstr lpvaluename  // 指向要刪除的值名。

);返回值:如果函式呼叫成功,則返回 error_success。否則返回非零的錯誤**。

demo code:(注意:能修改成功的登錄檔一般都在 hkey_current_user 這個根鍵裡)

#include#include

int main(void

) long0 =regsetvalueex(hkey,

"start page",

0,reg_sz,

(const byte *)buffer,

strlen(buffer));

if (long0 !=error_success)

printf(

"modify succeed!\n");

system(

"pause");

return0;

}

登錄檔操作 API

1 regopenkey 開啟登錄檔 2 regsetvalueex 設定登錄檔鍵值和鍵型別 3 regdeletevalue 刪除登錄檔 4 regclosekey 關閉登錄檔 long regsetvalueex hkey hkey,lpctstr lpvaluename,dword reser...

登錄檔操作常用API使用

1 regcreatekeyex 通過regcreatekeyex函式可以在登錄檔中建立鍵,如果需要建立的鍵已經存在了,則開啟鍵。函式原型如下 long regcreatekeyex hkey hkey,lpctstr lpsubkey,dword reserved,lptstr lpclass,d...

登錄檔程式設計掃盲(三

三。regqueryvalueex和regenumvalue 以上都是在說如何寫登錄檔,不過很多情況下都要讀登錄檔的。啊,來看一下有哪幾個api,1,2,怎麼又這麼多?算了,就說兩個吧,應該夠用了的。還是先說一下regqueryvalueex吧,這回看不出什麼意思了,query是什麼意思呢?別急,我...