註冊表保存了Windows中極重要的配置資訊,而任何人都可以通過運行Regedit命令或雙擊某個Reg檔來改寫它,這樣做其實是很危險的。本期介紹的編程方法,就是為防止註冊表被改寫而設計的。本程式有三個功能:?顯示當前註冊表狀態(處於可改寫還是處於被保護狀態);?鎖定註冊表使它不被人改寫;?解鎖註冊表使它可以隨時被改寫。下麵我們用VB6.0來實現它。
一、設計窗體
首先打開VB程式,新建一個FORM1,將其Caption改為“註冊表保護程式演示”,BorderStyle設為1-Fixed Single。放上一個Label1(其Caption改為“當前註冊表狀態:”)和一個Label2,另放上COMMAND1,其Caption改為“禁止使用註冊表”,再放上COMMAND2,其Caption改為“允許使用註冊表”,COMMAND3的Caption改為“退出程式”。
二、編程思路
程式運行時首先檢查註冊表,看當前註冊表的狀態是處於被保護狀態還是鎖定狀態,並返回資訊到Label2。如已保護則COMMAND1不可用,如無保護則COMMAND2不可用,且建一個全局的BAS檔,其中包含所有訪問註冊表時要用的常數及函數程式,方便主FORM1可以隨時調用。下麵給出主程序的和全局BAS檔的核心代碼。
三、核心代碼
Private Sub Form_Load() //打開窗口
Dim ret As Integer
Move (Screen.Width - W-idth) 2, (Screen.Height - Height) 2 //居中顯示
ret = GetDWORDValue("SoftwareMicrosoftWindowsCur rentVersionPoliciesSystem", "DisableRegistryTools") //調用全局函數,在後面有全部的代碼
//判斷當前註冊表處於何種狀態
If ret = 1 Then //返回值為1說明已經禁用註冊表
Label2.Caption = "你的註冊表處於安全被保護的狀態"
Command1.Enabled = False
Else //返回除1以外的任何值都說明註冊表沒有受到保護
Label2.Caption = "你的註冊表處於隨時被改寫的狀態"
Command2.Enabled = False
End If
End Sub
----------------------------------
Private Sub Command1_Click() //禁用註冊表
//寫DWORD值的值項"DWORD Value",值為"1"
SetDWORDValue "SoftwareMicrosoftWindowsCur rentVersionPoliciesSystem", "DisableRegistryTools", "00000001"
//把DisableRegistryTools這個鍵值設置為1,如果沒有這個鍵就自動新建一個。
MsgBox "寫入成功"
Command1.Enabled = False
Command2.Enabled = True
Label2.Caption = "你的註冊表處於安全被保護的狀態"
End Sub
-------------------------
Private Sub Command2_Click()//可用註冊表
//寫DWORD值的值項"DWORD Value",值為"0"
SetDWORDValue "SoftwareMicrosoftWindowsCur rentVersionPoliciesSystem", "DisableRegistryTools", "00000000"
MsgBox "寫入成功"
Command2.Enabled = False
Command1.Enabled = True
Label2.Caption = "你的註冊表處於隨時被改寫的狀態"
End Sub
------------------------
Private Sub Command3_Click()//退出程式
Unload Me
End Sub
FORM1中的程式代碼之所以看起來非常簡潔,是因為它們調用了一個全局的BAS檔中的函數操作註冊表,全局的BAS檔的代碼由於太多,可以到網站下載,下載地址:
http://www.cpcw.com/xz/bas.rar
四、說明
在BAS檔的通用中有Public Const HKEY_CURRENT_USER = &H80000001,這是表明註冊表中HKEY_CURRENT_USER這個主鍵的調用值,如果你使用其他主鍵寫程式時,相應的常數值分別為:
Public Const HKEY_CLASSES_ROOT = &H80000000
Public Const HKEY_CURRENT_USER = &H80000001
Public Const HKEY_LOCAL_MACHINE = &H80000002
Public Const HKEY_USERS = &H80000003
Public Const HKEY_PERFORMANCE_DATA = &H80000004
Public Const HKEY_CURRENT_CONFIG = &H80000005
Public Const HKEY_DYN_DATA = &H80000006
注:以上程式在Windows XP SP2及VB6.0下編寫及調試成功。 |