【注冊表操作】
RegOpenKeyEx
打開一個指定的注冊表項,值得注意的是注冊表的鍵值是不區分大小寫的。
第一個參數是主鍵,可以是預定義的鍵值,如HKEY_CLASSES_ROOT、HKEY_CURRENT_USER、HKEY_LOCAL_MacHINE、HKEY_USERS 這幾個。
第二個參數是子鍵,指向一個字符串。當這個字符串為空或這指針為NULL時,他會打開hKey的值。
第三個參數保留。
第四個參數是一種權限,如常用的查詢權限KEY_QUERY_VALUE,用於創建子鍵的KEY_CREATE_SUB_KEY,用於寫的權限KEY_SET_VALUE等。
第五個參數是一個句柄,就像CreateEvent一樣,返回了一個打開的注冊表鍵,用完了就用它來關閉。
返回值表示成功或失敗,成功則ERROR_SUCCESS,其他則表示出了些問題,在Winerror.h中定義。
RegCloseKey
用於關閉已經打開(RegOpenKeyEx)的或者創建出來(RegCreateKeyEx)的注冊表鍵值的句柄。
這個操作類似closeHandle。
RegCreateKeyEx
創建一個注冊表鍵值,如果該值已存在,則類似Open的行為。
第一個參數與RegOpenKeyEx相似。
第二個參數是要創建的子鍵的字符串。該值不可以為NULL,也不可以含有反斜線\,而且是不區分大小寫的。
第三個參數保留。傳入0即可。
第四個參數通常設置為NULL。
第五個參數默認設置為REG_OPTION_NON_VOLATILE,另外兩個值REG_OPTION_BACKUP_RESTORE和REG_OPTION_VOLATILE有特殊的含義,詳細信息見MSDN。
第六個參數與RegOpenKeyEx的相應參數含義一樣。通常創建一個子鍵的行為需要Create權限,因為這個函數需要創建子鍵,但是他並不能設置這個子鍵的值,需要別的函數幫助。
第七個參數是安全級別,傳入NULL為默認級別。
第八個參數是hanle。用於之後的操作。
第九個參數是一個傳出參數,它標示了調用該函數是新建了一個子鍵REG_CREATED_NEW_KEY還是打開了一個原有子鍵REG_OPENED_EXISTING_KEY。
返回值同樣是ERROR_SUCCESS表示成功,其他則表示有問題。
RegSetValueEx
創建了子鍵,需要給它賦以特定的值,該函數就是為子鍵賦值的。
第一個參數是目標鍵的handle。
第二個參數是值名稱。NULL、空字符串都會導致一個匿名屬性。
第三個參數保留。
第四個參數表示值的類型,常用的有二進制REG_BINARY、DWORD類型REG_DWord、字符串REG_EXPAND_SZ等。
第五個參數是值內容。
第六個參數是值內容的大小,sizeof即可,不過當是字符串的時候,記得加1,來表示結尾符。
RegQueryValueEx
我們要讀一個已經打開的鍵的值的時候,就需要這個函數。
第一個參數是目標鍵的handle。
第二個參數是值名稱。
第三個參數保留。
第四個參數是值類型,同RegSetValueEx的類型含義相同。但是他是傳出的,這時就有一個小技巧,當我們不知道一個鍵的值類型時,我們可以用這個參數第一次讀出值的類型,後兩個參數傳入NULL和大小,這時讀出了值的類型和值的大小,這樣在第二次想確切的讀出值的內容的時候,就可以分配恰好可用的空間。
第五個參數是傳出參數,用於讀出的數據。
第六個參數是傳出參數的大小。
to be continued~