Windows 擷取註冊表屬性

來源:互聯網
上載者:User
我們對註冊表的操作一般的步驟是,開啟、讀寫、關閉,那就先來看看相關最重要的幾個函數介紹吧,其它更多的函數還得靠大家去MSDN查閱。首先來看看,開啟與關閉函數,在讀寫註冊表前,必須先將目標的子鍵開啟,也就是取得一個操作的控制代碼,而開啟這個函數最常用的就是RegCreateKeyEx,如果沒有這個鍵存在,那麼就會自動的建立這個子鍵項。LONG RegCreateKeyEx(  HKEY hKey,                         //父鍵的控制代碼  LPCTSTR lpSubKey,               //子鍵名稱  DWORD Reserved,                  //一般為0  LPTSTR lpClass,                      //一般為0  DWORD dwOptions,               //建立子鍵時的選項  REGSAM samDesired,             //開啟檔案  LPSECURITY_ATTRIBUTES lpSecurityAttributes,      //指定繼承性  PHKEY phkResult,                                 //用於返回子鍵的控制代碼  LPDWORD lpdwDisposition                  //開啟還是建立子鍵的資訊);如果函數調用成功,會返回ERROR_SUCCESS也就是說成功會返回0,失敗返回非0值。SamDesired參數有多個取值,最後這個lpdwDisposition參數用於返回資訊,有兩個取值:REG_CREATED_NEW_KEY 指定的鍵不存在,那麼建立。REG_OPENED_EXISTING_KEY 指定的鍵存在,那麼開啟。另外還有相近的函數如下:LONG RegOpenKeyEx(  HKEY hKey,         // 要開啟主鍵的控制代碼  LPCTSTR lpSubKey,   //要開啟子鍵  DWORD ulOptions,    //保留  REGSAM samDesired,  //安全存取參數  PHKEY phkResult      //開啟鍵控制代碼的地址);與開啟函數相比,關閉就比較容易了,它的函數原型如下:LONG RegCloseKey( HKEY hKey);所以只需傳入一個要關閉的控制代碼就行了。然後,我們來看看讀寫的相關函數,讀取的函數原型如下:LONG RegQueryValueEx(  HKEY hKey,            //子鍵控制代碼  LPCTSTR lpValueName,  //索引值名稱  LPDWORD lpReserved,   //為0  LPDWORD lpType,      //返回索引值的資料類型  LPBYTE lpData,         //返回索引值的資料  LPDWORD lpcbData     //緩衝區的大小);函數調用成功後,返回ERROR_SUCCESS.例如用regedit 查到KEY_LOCAL_MACHINE中存在GUESTTOOLS 我們可以通過以上API來擷取其值及屬性
int GetGuestToolsFilePath( char * filename, char * path){     LONG lRet;     HKEY hKey;     DWORD dwBuflen = RGE_PATH_LENGTH;     char regpath[RGE_PATH_LENGTH] = {0};     char toolspath[RGE_PATH_LENGTH] = {0};     if ( NULL == path )     {         printf("The path in GetGuestToolsFilePath is Error");         return -1;     }     if(Is64BitSystem()){         if(RegOpenKeyExA(HKEY_LOCAL_MACHINE,"SOFTWARE\\Wow6432Node\\GUEST TOOLS",0,KEY_QUERY_VALUE,&hKey)!= ERROR_SUCCESS)        {            printf("##Open the Reg Get WhiteList Path Error##");            return -1;        }     }else{        if(RegOpenKeyExA(HKEY_LOCAL_MACHINE,"SOFTWARE\\GUEST TOOLS",0,KEY_QUERY_VALUE,&hKey)!= ERROR_SUCCESS)        {            printf("##Open the Reg Get WhiteList Path Error##");            return -1;        }     }     lRet = RegQueryValueExA(hKey,"InstallPath",NULL,NULL,(LPBYTE)regpath,&dwBuflen);     if(lRet != ERROR_SUCCESS)     {         //LOG_DEBUG("Failed to get the Reg Value!!");         printf("##Failed to get the Reg Value From:%s and error:%lu", toolspath, GetLastError());         return -1;     }     RegCloseKey(hKey);     if ('\0' == regpath[0] || RGE_PATH_LENGTH <= strlen(regpath))     {         printf("The regpath is Error!!");         return -1;     }     strcpy(path,regpath);     if ( NULL != filename &&         (IFLE_PATH_LENGTH - RGE_PATH_LENGTH) > strlen(filename))     {         strcat(path,filename);     }     printf("##Get IP Config File Path Success path:%s ##",path);     return 0;}
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.