登錄檔API函式和獲取系統版本

2021-07-24 06:02:08 字數 4044 閱讀 5016

開發過程中,遇到一些訪問登錄檔的函式,這裡貼幾個看著常用的函式。

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 ...