遍曆搜尋註冊表

來源:互聯網
上載者:User

遍曆搜尋註冊表

作者:UESTC 劉一

下載原始碼

一、註冊表的組織圖

 
              圖一

類比:Key有如檔案夾,Value有如檔案。
Value組成:Name/Type/Data, 通常指某Value就是指其Name。

二、目前的訪問手段
regedit, regedt32,第三方軟體,編程。
Windows提供了三種方式供編程實現:函數,Shell函數,CRegKey類(由ATL庫提供,是對API的封裝,簡化了部分功能)。這三種方式的提供的函數大同小異;由於它們對註冊表操作的函數都是原子動作,故功能強大卻使用不便。
類比:dir瀏覽當前檔案夾下的子檔案夾和檔案,卻無法知道子檔案夾中有什麼;註冊表操作函數也僅能瀏覽當前Key下的Subkey和Value,卻無法知道Subkey中有什麼。

三、面臨的問題——本程式的目的
無法直接查詢註冊表中是否存在某一Key或Value。
為實現對註冊表的查詢,必須編程對註冊表進行遍曆。
遞迴函式是不二的選擇。

圖二

四、基本函數(以API為例):
1、RegOpenKeyEx
主要參數:欲訪問鍵柄,子鍵路徑,存取權限,返回鍵柄
欲訪問鍵柄可以是5個預定義根鍵,也可以是返回鍵柄
子鍵路徑如果是空串,表明直接開啟欲訪問鍵柄
返回的鍵柄可以直接指定為欲訪問鍵柄
為加快處理速度,鍵柄用長整型表示
註:鍵的控制代碼,簡稱鍵柄

2、RegQueryKeyInfo
主要參數:欲訪問鍵柄,返回子鍵數目

3、RegEnumKeyEx
主要參數:欲訪問鍵柄,子鍵編號,返回某編號子鍵名
通過RegQueryKeyInfo返回的子鍵數目,再用RegEnumKeyEx逐個返回子鍵名

4、RegQueryValueEx
主要參數:欲訪問鍵柄, 欲查詢Value的Name
如果存在該Name,則返回ERROR_SUCCESS

五、演算法設計:使用遞迴函式對註冊表進行遍曆
1、使用RegOpenKeyEx開啟一個鍵
2、使用RegQueryValueEx尋找是否存在欲查詢的Value
   A、是:退出遞迴,並表示“已找到”
   B、否:使用RegQueryKeyInfo尋找當前鍵下是否有子鍵
      I、否:當前鍵下無欲尋找的Value
      II、是:逐個開啟子鍵,並調用遞迴函式

六、演算法流程圖:
 
             圖三

七、結束語——尚待改進之處
針對不同條件尋找:目前尋找的對象僅為value的name,改進可使其尋找key和value的data。
模糊尋找:該程式目前對字串的搜尋是精確尋找,要使其功能更加強大,須加入字串模糊比對演算法。
尋找下一個合格值:如果註冊表中有多個滿足條件的值,那麼本程式只能查出第一個,對遞迴進行中斷,再恢複,可實現下一次尋找。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.