數據結構
注冊表由鍵(或稱"項")、子鍵(子項)和值項構成.一個鍵就是分支中的一個文件夾,而子鍵就是這個文件夾中的子文件夾,子鍵同樣是一個鍵.一個值項則是一個鍵的當前定義,由名稱、數據類型以及分配的值組成.一個鍵可以有一個或多個值,每個值的名稱各不相同,如果一個值的名稱為空,則該值為該鍵的默認值.
數據類型
注冊表的數據類型主要有以下四種:
顯示類型(在編輯器中) 數據類型 說明
REG_SZ 字符串 文本字符串
REG_MULTI_SZ 多字符串 含有多個文本值的字符串
REG_BINARY 二進制數 二進制值,以十六進制顯示.
REG_DWORD 雙字 一個32位的二進制值,顯示為8位的十六進制值.
各主鍵的簡單介紹
---------------------------------------------------------------------------------------------------------------------------------------------------
參考網頁http://www.cnblogs.com/kzloser/archive/2012/11/07/2758404.html
添加開機啟動程序
#include <iostream> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <strings.h> #include <windows.h> #include <cstdlib> using namespace std; int main() { HKEY hKey; LPCTSTR lpRun = "Software\\Microsoft\\Windows\\CurrentVersion\\Run"; DWORD state,dwtype,sizeBuff; long lRet; char reBuff[10] = {0}; cout<<"輸入0或者1.執行操作.1插入0刪除"<<endl; int operatorNum; cin>>operatorNum; cout<<operatorNum<<endl; cout<<"======================================================================="<<endl; /** LONG RegCreateKeyEx( HKEY hKey, // 主鍵名稱 LPCWSTR lpSubKey,// 子鍵名稱或路徑 DWORD Reserved, //0 保留字段,默認設置為0 LPWSTR lpClass, // 一般設置為NULL DWORD dwOptions, //對你建立的鍵的一些選項,可以是這些值:REG_OPTION_NON_VOLATILE,REG_OPTION_VOLATILE,REG_OPTION_BACKUP_RESTORE第一個是默認的了。一般用第一個就可以了。 REGSAM samDesired,// 設置你對你建立的這個鍵的訪問權限Ignored. Set to zero to ensure compatibility with future versions of Windows Mobile. LPSECURITY_ATTRIBUTES lpSecurityAttributes, //一般設置為NULL PHKEY phkResult, // 返回新建注冊表項的句柄 LPDWORD lpdwDisposition//用來查看是打開一個已經有的鍵,還是新建了鍵 ); 解釋:打開指定的鍵或子鍵。如果要打開的鍵不存在的話,本函數會試圖建立它。 當在創建或打開注冊表的鍵時,需要指定訪問權限,而這些訪問權限需要到一級。 默認的權限是KEY_ALL_ACCESS權限。 還有KEY_CREATE_LINK創建字符鏈權限, KEY_CREATE_SUB_KEY創建子鍵權限, KEY_EXECUTE讀取鍵權限, KEY_NOTIFY獲得修改鍵通知的權限, KEY_QUERY_VALUE查詢鍵值的權限, KEY_SET_VALUE設置數據值的權限。 注意不能在根一級建鍵,在注冊表的根一級僅可有預定義的鍵。具體使用,請查看聯機手冊。 */ //https://msdn.microsoft.com/zh-cn/aa911940 if(operatorNum==1){ lRet = RegCreateKeyEx(HKEY_CURRENT_USER,lpRun,0,NULL,0,0,NULL,&hKey,&state); if(lRet == ERROR_SUCCESS) { if(state == REG_CREATED_NEW_KEY) cout<<"create ok"<<endl; RegCloseKey(hKey); }else{ cout<<"create fail"<<endl; } /* LONG RegOpenKeyEx( HKEY hKey, LPCWSTR lpSubKey, DWORD ulOptions, //Reserved. Set to zero.保留字段,默認設置為0 REGSAM samDesired, //Not supported. Set to zero. PHKEY phkResult // Pointer to a variable that receives a handle to the opened key. When you no longer need the returned handle, call the RegCloseKey function to close it. ); */ /* LONG RegSetValueEx( HKEY hKey, LPCWSTR lpValueName,//輸入 DWORD Reserved,//Reserved. Must be set to zero. DWORD dwType,//Type of information to be stored as the value data const BYTE* lpData,//[in] Pointer to a buffer that contains the data to be stored with the specified value name. DWORD cbData//[in] Size, in bytes, of the information pointed to by lpData. If the data is of type REG_SZ, REG_EXPAND_SZ, or REG_MULTI_SZ, This parameter must include the size of the terminating null character. The maximum size of data allowed is 4 KB. ); */ lRet= RegOpenKeyEx(HKEY_CURRENT_USER, lpRun, 0, KEY_WRITE, &hKey); if(lRet == ERROR_SUCCESS) { cout<<"open ok"<<endl; //RegSetValueEx(hKey, "mgtest",0,REG_SZ,(BYTE *)"success",10); //RegSetValueEx(hKey, "mgtest",0,REG_SZ,(BYTE *)"C:\\windows\\system32\\notepad.exe",strlen("C:\\windows\\system32\\notepad.exe")*2); long temp= RegSetValueEx(hKey, "mgtest",0,REG_SZ,(BYTE *)"C:\\windows\\system32\\notepad.exe",strlen("C:\\windows\\system32\\notepad.exe")*2); if(temp!=ERROR_SUCCESS){ cout<<"set fail"<<endl; }else{ cout<<"set ok"<<endl; } RegCloseKey(hKey); }else{ cout<<"open fail"<<endl; } }else { lRet = RegOpenKeyEx(HKEY_CURRENT_USER, lpRun, 0, KEY_WRITE, &hKey); if(lRet==ERROR_SUCCESS) { cout<<"open ok"<<endl; //刪除鍵 long temp=RegDeleteValue(hKey,"mgtest"); if(temp!=ERROR_SUCCESS){ cout<<"del fail"<<endl; }else{ cout<<"del ok"<<endl; } //關閉鍵 RegCloseKey(hKey); }else{ cout<<"open fail"<<endl; } } getchar(); return 0; }
紅色背景的為開機啟動程序所在路徑