開發過程中,遇到一些訪問登錄檔的函式,這裡貼幾個看著常用的函式。
regopenkeyex:regcreatekeyex:
regqueryvalueex:
regclosekey:
regqueryinfokey:
regenumkeyex:
regenumvalue:
//開啟某個登錄檔項
long winapi regopenkeyex(
_in_ hkey hkey,
_in_opt_ lpctstr lpsubkey,
_in_ dword uloptions,
_in_ regsam samdesired,
_out_ phkey phkresult
);//hkey引數可以是通過regopenkeyex或regcreatekeyex返回的有效hkey值,也可以是以下值:
/*hkey_classes_root
hkey_current_config
hkey_current_user
hkey_local_machine
hkey_users
*///lpsubkey引數是要開啟的子項的字串
//uloptions引數可設定為0或reg_option_open_link,常為0
//samdesired引數類似檔案操作中的openmode吧,一般有key_read、key_write、key_execute等
//phkresult引數用於接收返回的hkey控制代碼,使用完後要用regclosekey關閉。
//建立或開啟某個登錄檔項
long winapi regcreatekeyex(
_in_ hkey hkey,
_in_ lpctstr lpsubkey,
_reserved_ dword reserved,//null
_in_opt_ lptstr lpclass,//null
_in_ dword dwoptions,
_in_ regsam samdesired,
_in_opt_ lpsecurity_attributes lpsecurityattributes,
_out_ phkey phkresult,
_out_opt_ lpdword lpdwdisposition
);
//獲取某個鍵的值
long winapi regqueryvalueex(
_in_ hkey hkey,
_in_opt_ lpctstr lpvaluename,//要獲得值的鍵名
_reserved_ lpdword lpreserved,//為null
_out_opt_ lpdword lptype,//標識接受的資料是什麼型別
_out_opt_ lpbyte lpdata,//接收值的緩衝區
_inout_opt_ lpdword lpcbdata//緩衝區大小和實際接受大小
);
//關閉hkey控制代碼
long winapi regclosekey(
_in_ hkey hkey
);
//獲取表項中的資訊
long winapi regqueryinfokey(
_in_ hkey hkey,
_out_opt_ lptstr lpclass,//可為null
_inout_opt_ lpdword lpcclass,//可為null
_reserved_ lpdword lpreserved,//null
_out_opt_ lpdword lpcsubkeys,//接收該項下有多少個子項,可為null
_out_opt_ lpdword lpcmaxsubkeylen,//接收該項下最長子項的長度,可為null
_out_opt_ lpdword lpcmaxclasslen,//可為null
_out_opt_ lpdword lpcvalues,//接收該項下有多少個直屬鍵值,可為null
_out_opt_ lpdword lpcmaxvaluenamelen,//接收該項下最長鍵的長度,可為null
_out_opt_ lpdword lpcmaxvaluelen,//接受該項下最長值的長度,可為null
_out_opt_ lpdword lpcbsecuritydescriptor,//安全選項,可為null
_out_opt_ pfiletime lpftlastwritetime//最後寫入時間,可為null
);//獲取到的項數目和鍵值數目與實際在windows下通過登錄檔工具看到的並不一樣,總是少於或等於,可能與訪問許可權有關。
一般,通過regqueryinfokey得知子項數目和子鍵值數目後,可通過regenumkeyex或regenumvalue獲取資訊。
//引數很直觀。
long winapi regenumkeyex(
_in_ hkey hkey,
_in_ dword dwindex,
_out_ lptstr lpname,
_inout_ lpdword lpcname,
_reserved_ lpdword lpreserved,
_inout_ lptstr lpclass,
_inout_opt_ lpdword lpcclass,
_out_opt_ pfiletime lpftlastwritetime
);long winapi regenumvalue(
_in_ hkey hkey,
_in_ dword dwindex,
_out_ lptstr lpvaluename,
_inout_ lpdword lpcchvaluename,
_reserved_ lpdword lpreserved,
_out_opt_ lpdword lptype,
_out_opt_ lpbyte lpdata,
_inout_opt_ lpdword lpcbdata
);
上面這些函式執行成功返回值為error_success,在很多情況下有些登錄檔在非管理員許可權下無權訪問,那麼就要注意判斷返回值再執行後續操作。
另外,由於系統不一樣,導致的登錄檔也會有所差別,那可以根據系統版本來區分對待。
下面2個獲取系統版本資訊的函式(就windows而言)
dword winapi getversion(void);
bool winapi getversionex(
_inout_ lposversioninfo lpversioninfo
);//osversioninfo結構如下:
typedef
struct _osversioninfo osversioninfo;
getversion直接返回乙個dword值,低8位為主版本號,低16位的高8位為次版本號,高16位為構建版本號(buildnumber,我也不知道該怎麼譯好。。)
可以用loword(),lobyte()這些巨集來獲取。
而getversionex會填充乙個osversioninfo結構體,資訊更多更直接。
登錄檔操作 API
1 regopenkey 開啟登錄檔 2 regsetvalueex 設定登錄檔鍵值和鍵型別 3 regdeletevalue 刪除登錄檔 4 regclosekey 關閉登錄檔 long regsetvalueex hkey hkey,lpctstr lpvaluename,dword reser...
API 登錄檔程式設計
首先來認識一下鍵,項,值吧 左邊有五個根鍵 hkey classes root hkey current user hkey local machine hkey user hkey current config 根鍵展開後可以看到子健 像 software,microsoft,windows,cu...
系統 登錄檔分析
一 reg檔案編寫 windows registry editor version 5.00 下面一定要空一行 hkey classes root x a.新建鍵名x hkey classes root x b.刪除鍵名x begin c.新建和修改x下的項,hkey classes root x ...